给同学做的一个小工具,可以把Excle中的一个三角形进行倒置,填充成对称的矩形.并把这个excle文件回传给客户端
难点:
1.EXCLE文件上传,并回传
2.JXL读取Excle文件并修改
3.三角矩阵装置
解决:
1.上传使用Struts上传组件
1.在JSP文件中,输入的From为:
<form action="XSLAction.do" enctype="multipart/form-data" method="post">
2.在ActionForm中使用FormFile来保存excle文件;
2.JXL读取Excle文件并修改
//从From中读取数据形成一个excle实例
XSLForm xf = (XSLForm) form;
FormFile file = xf.getXsl();
Workbook bookin = Workbook.getWorkbook(file.getInputStream());
//通过这个实例构成另一个可以修改的excle实例,输出对象为response
WritableWorkbook bookout = Workbook.createWorkbook(response
.getOutputStream(), bookin);
3.把文件回传给用户
//写入excle实例
bookout.write();
//设置ContentType和Header
response.setContentType("application/x-msdownload");
response.setHeader("content-disposition","attachment;filename=report.xls");
//关闭流
bookout.close();
//把数据写入客户端
response.getOutputStream().flush();
4.转置矩阵
通过两个for循环转置:
for (int i = 0; i < length; i++) {
for (int k = i; k < length; k++) {
// 取得单元格
Cell cell = ws.getCell(column + i, row + k);
// 判断单元格格式
if (cell.getType() == CellType.NUMBER) {
NumberCell nc = (NumberCell) cell;
//System.out.println(nc.getValue());
// 生成单元格
jxl.write.Number number = new jxl.write.Number(column
+ k, row + i, nc.getValue());
ws.addCell(number);
}
}
}
5.jxl读取excle文件
// 获得工作表
WritableSheet ws = bookout.getSheet(sheetname);
// 取得单元格
Cell cell = ws.getCell(column + i, row + k);
// 判断单元格格式是否为数字
(cell.getType() == CellType.NUMBER)
//读取数字单元格,并且生成数字单元格
NumberCell nc = (NumberCell) cell;
jxl.write.Number number = new jxl.write.Number(column
+ k, row + i, nc.getValue());
ws.addCell(number);
//加入到sheet中去
ws.addCell(number);
一些参考资料:
文件对象 2工作簿对象 3 单元格对象。
相应的在JXL中就有Workbook,Sheet ,Cell 。通过这三个对象我们就可以实现Excel文件的读取工作。
我们先想想一下读取步骤,不管是什么样的Excel操作框架必定都要经历
1选取Excel文件,2选择工作簿,3选择Cell,4读取信息。