POI技术总结文档

Poi操作excle文件

一、 POI简介
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
二、 HSSF概况
电子表格格式
HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。
三、 POI EXCEL文档结构类

HSSFWorkbook excel文档对象—工作簿
HSSFSheet excel的sheet
HSSFRow excel的行
HSSFCell excel的单元格
HSSFFont excel字体
HSSFName 名称
HSSFDataFormat 日期格式
HSSFHeader Sheet 头
HSSFFooter Sheet尾
HSSFCellStyle cell样式
HSSFDateUtil 日期
HSSFPrintSetup 打印
HSSFErrorConstants 错误信息表

说明:poi3.9已经可以用一个方法来读取excel2003和2007
四、 poi开发步骤
1、 poi需要用到的jar文件
需要的jar文件截图
这里写图片描述
2、创建excle的步骤
创建文件步骤:
// 1先创建工作簿对
HSSFWorkbook workbook2003 = new HSSFWorkbook();
// 2创建工作表对象并命名
HSSFSheet sheet = workbook2003.createSheet(“学生信息统计表”);
// 遍历集合对象创建行和单元格
//3 创建行
HSSFRow row = sheet.createRow(i);
// 4开始创建单元格并赋值
HSSFCell nameCell = row.createCell(0);
nameCell.setCellValue(student.getName());
// 5生成文件
File file = new File(filePath);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
workbook2003.write(fos);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

样式问题:
// 设置行列的默认宽度和高度
sheet.setColumnWidth(0, 32 * 80);// 对A列设置宽度为80像素
sheet.setColumnWidth(1, 32 * 80);
sheet.setColumnWidth(2, 32 * 80);
sheet.setColumnWidth(3, 32 * 80);
sheet.setColumnWidth(4, 32 * 80);

表头设置
1.// 创建样式
XSSFFont font = workbook2007.createFont();
XSSFCellStyle headerStyle = workbook2007.createCellStyle();
// 设置垂直居中
headerStyle.setAlignment(HorizontalAlignment.CENTER);
headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
// 设置边框
headerStyle.setBorderTop(BorderStyle.THIN);
headerStyle.setBorderBottom(BorderStyle.THIN);
headerStyle.setBorderLeft(BorderStyle.THIN);
headerStyle.setBorderRight(BorderStyle.THIN);
// 字体加粗
font.setBold(true);
// 设置长文本自动换行
headerStyle.setWrapText(true);
headerStyle.setFont(font);
应用实例:
// 创建表头
XSSFRow headerRow = sheet.createRow(0);
headerRow.setHeightInPoints(25f);// 设置行高度
XSSFCell nameHeader = headerRow.createCell(0);
nameHeader.setCellValue(“姓名”);
nameHeader.setCellStyle(headerStyle);
XSSFCell genderHeader = headerRow.createCell(1);
genderHeader.setCellValue(“性别”);
genderHeader.setCellStyle(headerStyle);
XSSFCell ageHeader = headerRow.createCell(2);
ageHeader.setCellValue(“年龄”);
ageHeader.setCellStyle(headerStyle);
XSSFCell classHeader = headerRow.createCell(3);
classHeader.setCellValue(“班级”);
classHeader.setCellStyle(headerStyle);
XSSFCell scoreHeader = headerRow.createCell(4);
scoreHeader.setCellValue(“成绩”);
scoreHeader.setCellStyle(headerStyle);

3、读取excle的步骤
1通过文件流获取HSSFWorkbook对象
InputStream is = new FileInputStream(excelFile);// 获取文件输入流
HSSFWorkbook workbook2003 = new HSSFWorkbook(is);// 创建Excel2003文件对象
2通过HSSFWorkbook对象获取HSSFSheet工作表对象
HSSFSheet sheet = workbook2003.getSheetAt(0);// 取出第一个工作表,索引是0

3 通过HSSFSheet获取HSSFRow行对象,通过行数进行for循环

4 通过HSSFRow获取HSSFCell列对象,通过列数进行for循环
5 关闭文件流

五、 EXCEL常用操作方法
1、得到Excel常用对象
1.POIFSFileSystem fs=newPOIFSFileSystem(new FileInputStream(“d:/test.xls”));
2.//得到Excel工作簿对象
3.HSSFWorkbook wb = new HSSFWorkbook(fs);
4.//得到Excel工作表对象
5.HSSFSheet sheet = wb.getSheetAt(0);
6.//得到Excel工作表的行
7.HSSFRow row = sheet.getRow(i);
8.//得到Excel工作表指定行的单元格
9.HSSFCell cell = row.getCell((short) j);
10.cellStyle = cell.getCellStyle();//得到单元格样式
实例:
POIFSFileSystem fs=newPOIFSFileSystem(new FileInputStream(“d:/test.xls”));//得到Excel工作簿对象
HSSFWorkbook wb = new HSSFWorkbook(fs); //得到Excel工作表对象
HSSFSheet sheet = wb.getSheetAt(0); //得到Excel工作表的行
HSSFRow row = sheet.getRow(i); //得到Excel工作表指定行的单元格
HSSFCell cell = row.getCell((short) j);cellStyle = cell.getCellStyle(); //得到单元格样式
2、建立Excel常用对象
1.HSSFWorkbook wb = new HSSFWorkbook();//创建Excel工作簿对象
2.HSSFSheet sheet = wb.createSheet(“new sheet”);//创建Excel工作表对象
3.HSSFRow row = sheet.createRow((short)0); //创建Excel工作表的行
4.cellStyle = wb.createCellStyle();//创建单元格样式
5.row.createCell((short)0).setCellStyle(cellStyle); //创建Excel工作表指定行的单元格
6.row.createCell((short)0).setCellValue(1); //设置Excel工作表的值

实例:
HSSFWorkbook wb = new HSSFWorkbook();//创建Excel工作簿对象
HSSFSheet sheet = wb.createSheet(“new sheet”);//创建Excel工作表对象
HSSFRow row = sheet.createRow((short)0); //创建Excel工作表的行
cellStyle = wb.createCellStyle();//创建单元格样式
row.createCell((short)0).setCellStyle(cellStyle); //创建Excel工作表指定行的单元格
row.createCell((short)0).setCellValue(1); //设置Excel工作表的值
3、设置sheet名称和单元格内容
1.wb.setSheetName(1, “第一张工作表”,HSSFCell.ENCODING_UTF_16);
2.cell.setEncoding((short) 1);
3.cell.setCellValue(“单元格内容”);
实例:
wb.setSheetName(1, “第一张工作表”,HSSFCell.ENCODING_UTF_16);
cell.setEncoding((short) 1); cell.setCellValue(“单元格内容”);

4、取得sheet的数目
1.wb.getNumberOfSheets()
实例:
wb.getNumberOfSheets()

5、 根据index取得sheet对象
1.HSSFSheet sheet = wb.getSheetAt(0);
HSSFSheet sheet = wb.getSheetAt(0);
6、取得有效的行数
1.int rowcount = sheet.getLastRowNum();
实例:
int rowcount = sheet.getLastRowNum();
7、取得一行的有效单元格个数
1.row.getLastCellNum();
row.getLastCellNum();
8、单元格值类型读写

1.cell.setCellType(HSSFCell.CELL_TYPE_STRING); //设置单元格为STRING类型
2.cell.getNumericCellValue();//读取为数值类型的单元格内容
实例:
cell.setCellType(HSSFCell.CELL_TYPE_STRING); //设置单元格为STRING类型cell.getNumericCellValue();//读取为数值类型的单元格内容

9、设置列宽、行高
1.sheet.setColumnWidth((short)column,(short)width);
2.row.setHeight((short)height);

实例:
sheet.setColumnWidth((short)column,(short)width);
row.setHeight((short)height);

10、添加区域,合并单元格
1.Region region = new Region((short)rowFrom,(short)columnFrom,(short)rowTo ,(short)columnTo);//合并从第rowFrom行columnFrom列
2.sheet.addMergedRegion(region);//到rowTo行columnTo的区域
3.//得到所有区域
4.sheet.getNumMergedRegions()
11、保存Excel文件
1.FileOutputStream fileOut = new FileOutputStream(path);
2.wb.write(fileOut);
实例:
FileOutputStream fileOut = new FileOutputStream(path); wb.write(fileOut);
12、根据单元格不同属性返回字符串数值
实例;
public String getCellStringValue(HSSFCell cell) {
String cellValue = “”;
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:// 字符串类型
cellValue = cell.getStringCellValue();
if (cellValue.trim().equals(“”) || cellValue.trim().length() <= 0)
cellValue = ” “;
break;
case HSSFCell.CELL_TYPE_NUMERIC: // 数值类型
cellValue = String.valueOf(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA: // 公式
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
cellValue = String.valueOf(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
cellValue = ” “;
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;

    default:
        break;
    }
    return cellValue;
}

13、常用单元格边框格式

1.HSSFCellStyle style = wb.createCellStyle();
2.style.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);//下边框
3.style.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);//左边框
4.style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
5.style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
实例:
HSSFCellStyle style = wb.createCellStyle(); style.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);//下边框 style.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);//左边框 style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框 style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框

14、设置字体和内容位置
1.HSSFFont f = wb.createFont();
2.f.setFontHeightInPoints((short) 11);//字号
3.f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);//加粗
4.style.setFont(f);
5.style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中
6.style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中
7.style.setRotation(short rotation);//单元格内容的旋转的角度
8.HSSFDataFormat df = wb.createDataFormat();
9.style1.setDataFormat(df.getFormat(“0.00%”));//设置单元格数据格式
10.cell.setCellFormula(string);//给单元格设公式
11.style.setRotation(short rotation);//单元格内容的旋转的角度
实例:
HSSFFont f = wb.createFont(); f.setFontHeightInPoints((short) 11);// 字号 ’
f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);// 加粗
style.setFont(f); style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
style.setRotation(short rotation);// 单元格内容的旋转的角度
HSSFDataFormat df = wb.createDataFormat();
style1.setDataFormat(df.getFormat(“0.00%”));// 设置单元格数据格式
cell.setCellFormula(string);// 给单元格设公式
style.setRotation(short rotation);// 单元格内容的旋转的角度
15、插入图片
1.//先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
a)ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
b)BufferedImage bufferImg = ImageIO.read(new File(“ok.jpg”));
c)ImageIO.write(bufferImg,”jpg”,byteArrayOut);
2.//读进一个excel模版
3.FileInputStream fos = new FileInputStream(filePathName+”/stencil.xlt”);
4.fs = new POIFSFileSystem(fos);
5.//创建一个工作薄
6.HSSFWorkbook wb = new HSSFWorkbook(fs);
7.HSSFSheet sheet = wb.getSheetAt(0);
8.HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
9.HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,1023,255,(short) 0,0,(short)10,10);
10.patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));
实例:
//先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
BufferedImage bufferImg = ImageIO.read(new File(“ok.jpg”));
ImageIO.write(bufferImg, “jpg”, byteArrayOut); //读进一个excel模版
FileInputStream fos = new FileInputStream(filePathName + “/stencil.xlt”);
fs = new POIFSFileSystem(fos); //创建一个工作薄
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023, 255,
(short) 0, 0, (short) 10, 10);
patriarch.createPicture(anchor, wb.addPicture(byteArrayOut
.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));

16、调整工作表位置
1.HSSFWorkbook wb = new HSSFWorkbook();
2.HSSFSheet sheet = wb.createSheet(“format sheet”);
3.HSSFPrintSetup ps = sheet.getPrintSetup();
4.sheet.setAutobreaks(true);
5.ps.setFitHeight((short)1);
6.ps.setFitWidth((short)1);
实例:
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet(“format sheet”);
HSSFPrintSetup ps = sheet.getPrintSetup();
sheet.setAutobreaks(true);
ps.setFitHeight((short) 1);
ps.setFitWidth((short) 1);

swfupload文件上传

一、swfupload简介
SWFUpload是一个flash和js相结合而成的文件上传插件
二、SWFUpload的文件上传流程

1、引入相应的js文件
2、实例化SWFUpload对象,传入一个配置参数对象进行各方面的配置。
3、点击SWFUpload提供的Flash按钮,弹出文件选取窗口选择要上传的文件;
4、文件选取完成后符合规定的文件会被添加到上传的队列里;
5、调用startUpload方法让队列里文件开始上传;
6、文件上传过程中会触发相应的事件,开发者利用这些事件来更新ui、处理错误、发出提示等等;

三、Swf开发过程
1 引入js与css文件
Js文件
1.swfupload.js
2.swfupload.queue.js
3.fileprogress.js
4.handlers.js
css文件
1.process.css
2 在jsp页面中定义swfupload对象

Js部分

wfu=new SWFUpload({
upload_url : uploadUrl,//文件上传的地址
flash_url : “thirdparty/swfupload/swfupload.swf”,//上传或解析处理类的URL
file_size_limit : “1 MB”,//限制上传文件的大小, 0表示不受限制
//向后台传递额外的参数
//提交到服务器的参数信息,这样就添加了一个param参数,值是uploadParams在服务器用request.getParameter(“param名称”)就可以拿到值
//post_params: {“root” : “/r/cms/www/red/css”},
file_post_name: “filedata”,//上传文件的名称
file_types : “.“,//文件上传的类型
file_types_description : “All Files”,
file_queue_limit : 0,
custom_settings : {
progressTarget : “fsUploadProgress”,
cancelButtonId : “btnCancel”
},
debug: false,

    //按钮的处理
    button_image_url : "thirdparty/swfupload/button_notext.png",
    button_placeholder_id : "spanButtonPlaceHolder",
    button_text: "<span class='btnText'>上传文件</span>",
    button_width: 81,
    button_height: 24,
    button_text_top_padding: 2,
    button_text_left_padding: 20,
    button_text_style: '.btnText{color:#666666;}',

    /*事件处理**/
    file_queued_handler : fileQueued,
    file_queue_error_handler : fileQueueError,
    file_dialog_complete_handler : fileDialogComplete,
    upload_start_handler : uploadStart,// uploadStart事件侦听函数
    upload_progress_handler : uploadProgress,
    upload_error_handler : uploadError,
    upload_success_handler : uploadSuccess,
    upload_complete_handler : uploadComplete,
    queue_complete_handler : queueComplete2//处理完成调用
});

};

/**在设置时需要设置一下上传事件
*upload_start_handler : UploadStart,
*动态传参数,解决文件名中文乱码问题
**/
function uploadStart(file) {
try {
/* I don’t want to do any file validation or anything, I’ll just update the UI and return true to indicate that the upload should start */
var progress = new FileProgress(file, this.customSettings.progressTarget);

    //progress.setStatus("Uploading...");
    progress.setStatus("上传中...");
    progress.toggleCancel(true, this);
    this.setPostParams({'fileName':encodeURIComponent(file.name)}); 
}
catch (ex) {
}
return true;

}

function queueComplete2(numFilesUploaded) {
//刷新页面
//location.href=”http://localhost:8080/upload/swfUpload.jsp”;
}

Html代码部分:

….

后台代码部分:
springMVC文件上传
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
CommonsMultipartFile file = (CommonsMultipartFile)multipartRequest.getFile(“filedata”);
//通过输入流与输出流实现文件上传
InputStream stream = file.getInputStream();

/*解决中文问价名称乱码问题/
String fileName = request.getParameter(“fileName”);
fileName = URLDecoder.decode(fileName, “UTF-8”);
OutputStream bos = new FileOutputStream(fileNameFull);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, bytesRead);
}
bos.close();
stream.close();
四、配置参数对象中的常用属性及说明
五、各种事件说明

Jmagick实现图片缩略

开发步骤:
(1)安装安装ImageMagick-6.2.6-8-Q16-windows-dll.exe
(2)把安装后目录里面的dll文件全部复制到windows–>system32下面
(3)将jmagick.jar放在 WebRoot–>Web-Info–>lib里面
(4)jmagick.dll文件放到:jdk1.5–>jre–>bin
ImgUtil工具类代码:
import magick.ImageInfo;
import magick.MagickException;
import magick.MagickImage;
public class ImageUtil {
/**
* Description:
* @param args
* @throws MagickException
*/
public static void ImageUtil(String beginpath,String endpath,int width,int height) throws MagickException {
System.setProperty(“jmagick.systemclassloader”,”no”);

//reading image
ImageInfo info = new ImageInfo(beginpath);
MagickImage image = new MagickImage(info);

//resize image
MagickImage scaleImg = image.scaleImage(width, height);

//write image to file
scaleImg.setFileName(endpath);
scaleImg.writeImage(info);
}
}
测试代码:
String path =”d:\big.jpg”;//原图片存储路径
String url =”c:\small.jpg”;//缩略图存储路径
java.io.File smallfile = new java.io.File(path); //读入刚才上传的文件
Image src = javax.imageio.ImageIO.read(smallfile); //构造Image对象
int old_w=src.getWidth(null); //得到源图宽
int old_h=src.getHeight(null); //得到源图长
int new_w=0;
int new_h=0;
if(old_w>old_h) { //设置缩略图的宽和高
if(old_w<120) {
new_w=old_w;
new_h=old_h;
}else{
new_w=120;
new_h=120*old_h/old_w;
}
}else{
if(old_h<120) {
new_w=old_w;
new_h=old_h;
}else{
new_h=120;
new_w=120*old_w/old_h;
}
}
iu.ImageUtil(path,url,new_w,new_h);//生成缩略图
ckeditor文本编辑器
Ckeditor简介
www.ckeditor.com
到官方网站下载使用资源:http://ckeditor.com/download
什么是ckeditor
CKeditor是一个专门使用在网页上属于开放源代码的所见即所得文字编辑器。它志于轻量化,不需要太复杂的安装步骤即可使用。
它可和PHP、JavaScript、ASP、ASP.NET、ColdFusion、Java、以及ABAP等不同的编程语言相结合。“FCKeditor”是它的早期版本名称中的“FCK”是这个编辑器的作者的名字Frederico Caldeira Knabben的缩写。
CKeditor 相容于绝大部分的网页浏览器像是: Internet Explorer 5.5+ (Windows)、Mozilla Firefox 1.0+、Mozilla 1.3+ 和Netscape 7+。
在未来的版本也将会加入对Opera 的支援。
下载ckeditor
使用CKeditor所需要的资源到CKeditor的官方网站下载如下的压缩包
 ckeditor-java-core-2.4.1.jar为使用fckeditor所用到得jar包
Fckeditor-java-demo-2.4.1.war为官方提供的例子
ckeditor-2.6.4.zip为所需资源文件和例子
keditor-java-2.4.1-bin.zip为帮助文档
ckeditor-java-2.4.1-src.zip为源码
配置ckeditor
通过javascript调用
第一步将ckeditor的资源文件夹复制到webRoot下
第二步引人JavaScript文件

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

战神丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值