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

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++;
				}
			}












  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值