您的位置:首页 > 编程语言 > Java开发

如何通过Java实现生成excel并通过流的方式返回,提供下载!!

2017-06-16 16:16 821 查看
jxl.jar是通过java操作excel表格的工具类库,还有一种是poi.这里介绍jxl类来操作.

import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import net.sf.json.JSONObject;

private void createDeviceOrderListExcel(Result<InventoryDeviceVO> result, WritableWorkbook workbook) throws Exception {
try{
WritableSheet wsheet = workbook.createSheet("盘点列表", 0);
wsheet.getSettings().setVerticalFreeze(1);
wsheet.getSettings().setVerticalFreeze(2);
wsheet.getSettings().setVerticalFreeze(3);

// 定义title单元格样式:字体 下划线 斜体 粗体 颜色
WritableFont wf_title = new WritableFont(WritableFont.ARIAL, 9, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK);
// 单元格定义
WritableCellFormat wcf_title = new WritableCellFormat(wf_title);
// 设置单元格的背景颜色
wcf_title.setBackground(Colour.GRAY_25);
// 设置对齐方式
wcf_title.setAlignment(Alignment.CENTRE);
wcf_title.setVerticalAlignment(VerticalAlignment.CENTRE);
//设置边框
wcf_title.setBorder(Border.ALL, BorderLineStyle.THIN,Colour.BLACK);

// 定义body单元格样式:定义格式 字体 下划线 斜体 粗体 颜色
WritableFont wf_table = new WritableFont(WritableFont.ARIAL, 9, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK);
WritableCellFormat wcf_table = new WritableCellFormat(wf_table);
wcf_table.setBackground(Colour.WHITE);
wcf_table.setAlignment(Alignment.CENTRE);
wcf_table.setVerticalAlignment(VerticalAlignment.CENTRE);
wcf_table.setBorder(Border.ALL, BorderLineStyle.THIN,Colour.BLACK);

// title名称
String[] str = {"配置项编号","设备名称","规格型号","出库日期","所在地点","资产财务编号","清查确认所在地","使用部门","使用人","管理责任人",
"单价","盘点结果","账实相符","在用","闲置","报废待处理","盘亏"};

// 在Label对象的构造子中指名单元格位置是第几列第几行
for (int i = 0; i < 14; i++) {
// 第一步:设置显示列宽度
switch (i) {
case 0: case 2: case 8:
wsheet.setColumnView(i, 16);
break;
case 1: case 3: case 6: case 12:
wsheet.setColumnView(i, 12);
break;
case 4: case 5:
wsheet.setColumnView(i, 14);
break;
case 7: case 9: case 10:
wsheet.setColumnView(i, 8);
break;
case 11: case 13:
wsheet.setColumnView(i, 6);
break;
default:
break;
}

// 第二步:创建添加到wsheet的cell
Label label = null;
if (i == 4) {
// 所在地点
label = new Label(i, 0, str[i], wcf_title);
// 资产财务编号
Label assetfinNumLab = new Label(i, 1, str[i+1], wcf_title);
wsheet.addCell(assetfinNumLab);
} else if (i == 5) {
// 清楚确认所在地
label = new Label(i, 1, str[i+1], wcf_title);
} else if (i == 10) {
// 盘点结果
label = new Label(i, 0, str[i+1], wcf_title);
// 账实相符
Label realLab = new Label(i, 1, str[i+2], wcf_title);
wsheet.addCell(realLab);
// 在用
Label usingLab = new Label(i, 2, str[i+3], wcf_title);
wsheet.addCell(usingLab);
} else if (i == 11) {
// 闲置
label = new Label(i, 2, str[i+3], wcf_title);
} else if (i == 12) {
// 报废待处理
label = new Label(i, 2, str[i+3], wcf_title);
} else if (i == 13) {
// 盘亏
label = new Label(i, 1, str[i+3], wcf_title);
} else {
if ( i>5 && i<10) {
label = new Label(i, 0, str[i+1], wcf_title);
} else {
label = new Label(i, 0, str[i], wcf_title);
}
}
wsheet.addCell(label);

// 第三步:合并单元格
if (i == 4 && i < 11) {
// 所在地点
wsheet.mergeCells(i, 0, i+1, 0);
// 资产财务编号
wsheet.mergeCells(i, 1, i, 2);
} else if (i == 5 && i < 11) {
// 清查确认所在地点
wsheet.mergeCells(i, 1, i, 2);
} else if (i == 10 && i < 11) {
// 盘点结果
wsheet.mergeCells(i, 0, i+3, 0);
// 账实相符
wsheet.mergeCells(i, 1, i+2, 1);
} else if (i < 11){
wsheet.mergeCells(i, 0, i, 2);
}
}
// 合并盘亏
wsheet.mergeCells(13, 1, 13, 2);
// 输出值到excel
int j = 3;
for (InventoryDeviceVO order : result) {
int index = 0;
// 配置项编号
wsheet.addCell(new Label(index++, j, order.getAssetBarcode()==null ?"":order.getAssetBarcode(), wcf_table));
// 设备名称
wsheet.addCell(new Label(index++, j, order.getDeviceName()==null ?"":order.getDeviceName(), wcf_table));
// 规格型号
wsheet.addCell(new Label(index++, j, order.getAssetModel()==null ?"":order.getAssetModel(), wcf_table));
// 出库日期
if (!isNull(order.getCiOutStroageDate())) {
wsheet.addCell(new Label(index++, j, dateToStr(order.getCiOutStroageDate(),"yyyy-MM-dd"), wcf_table));
} else {
wsheet.addCell(new Label(index++, j, "", wcf_table));
}
// 资产财务编号
wsheet.addCell(new Label(index++, j, order.getCiFinanceCode()==null ?"":order.getCiFinanceCode(), wcf_table));
// 清查确认所在地点
wsheet.addCell(new Label(index++, j, order.getConfirmArea()==null ?"":order.getConfirmArea(), wcf_table));
// 所属部门
wsheet.addCell(new Label(index++, j, order.getCiUseUserDepartment()==null ?"":order.getCiUseUserDepartment(), wcf_table));
// 使用人
wsheet.addCell(new Label(index++, j, order.getCiUseUser()==null ?"":order.getCiUseUser(), wcf_table));
// 管理责任人
wsheet.addCell(new Label(index++, j, order.getManagerRes()==null ?"":order.getManagerRes(), wcf_table));
// 单价
wsheet.addCell(new Label(index++, j, order.getCiPrice()==null ?"":order.getCiPrice(), wcf_table));
// 在用(由客户填写,这里设置为空)
wsheet.addCell(new Label(index++, j, "", wcf_table));
// 闲置(由客户填写,这里设置为空)
wsheet.addCell(new Label(index++, j, "", wcf_table));
// 报废待处理(由客户填写,这里设置为空)
wsheet.addCell(new Label(index++, j, "", wcf_table));
// 盘亏(由客户填写,这里设置为空)
wsheet.addCell(new Label(index++, j, "", wcf_table));

j++;
}
}catch(Exception e){
e.printStackTrace();
BeanLog.getLogger().fatal("构造book", e);
throw e;
}
}
这里面有 几个方法讲解一下

将结果以流的方式返回

outputStream = WebUtils.getOutputStream(response, fileName + ".xls", "UTF-8");

// 导出查询结果

WritableWorkbook workbook = Workbook.createWorkbook(outputStream);

创建一个sheet页

WritableSheet wsheet = workbook.createSheet("盘点列表", 0);

对应的设置是


// 定义title单元格样式:字体 下划线 斜体 粗体 颜色

WritableFont wf_title = new WritableFont(WritableFont.ARIAL, 9, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK);

// 单元格定义

WritableCellFormat wcf_title = new WritableCellFormat(wf_title);

// 设置单元格的背景颜色

wcf_title.setBackground(Colour.GRAY_25);

// 设置对齐方式

wcf_title.setAlignment(Alignment.CENTRE);

wcf_title.setVerticalAlignment(VerticalAlignment.CENTRE);

 //设置边框

 wcf_title.setBorder(Border.ALL, BorderLineStyle.THIN,Colour.BLACK);

// 在Label对象的构造子中指名单元格位置是第几列第几行

 Label label1 = new Label(0, 0, "导出盘点管理", wcf_title);

合并单元格 wsheet.mergeCells(0, 0, 7, 0);

第一个参数,左边的列数,第二个参数,左边的行数,第三个参数,右边的列数,第四个参数,右边的行数
wsheet.addCell(label1);将该单元格添加到sheet页

wsheet.setColumnView(i, 16);设置单元格的宽度;

wsheet.setRowView(arg0, arg1);设置单元格的长度

将一个list循环的数据,添加到sheet页

for (InventoryDeviceTestVO order : result) {
int index = 0;
// 配置项编号
wsheet.addCell(new Label(index++, j, order.getAssetBarcode()==null ?"":order.getAssetBarcode(), wcf_table));
// 设备名称
wsheet.addCell(new Label(index++, j, order.getDeviceName()==null ?"":order.getDeviceName(), wcf_table));
// 规格型号
wsheet.addCell(new Label(index++, j, order.getAssetModel()==null ?"":order.getAssetModel(), wcf_table));
// 出库日期
if (!isNull(order.getCiOutStroageDate())) {
wsheet.addCell(new Label(index++, j, dateToStr(order.getCiOutStroageDate(),"yyyy-MM-dd"), wcf_table));
} else {
wsheet.addCell(new Label(index++, j, "", wcf_table));
}
// 资产财务编号
wsheet.addCell(new Label(index++, j, order.getCiFinanceCode()==null ?"":order.getCiFinanceCode(), wcf_table));
// 所属部门
wsheet.addCell(new Label(index++, j, order.getCiUseUserDepartment()==null ?"":order.getCiUseUserDepartment(), wcf_table));
// 使用人
wsheet.addCell(new Label(index++, j, order.getCiUseUser()==null ?"":order.getCiUseUser(), wcf_table));
// 单价
wsheet.addCell(new Label(index++, j, order.getCiPrice()==null ?"":order.getCiPrice(), wcf_table));
j++;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: