引用 4 楼 fangmingshijie 的回复: 如果没有读到这个excel,也就是没有流也会出现这个这个错误的。
不是赌气excel文件,是我直接用WritableWorkbook 创建的,数据是从数据库查询出来的,查询出来后用WritableWorkbook 创建的,完整 的代码:
public String exportExcel() {
ByteArrayOutputStream targetFile = new ByteArrayOutputStream();
try {
/** **********创建工作簿************ */
WritableWorkbook workbook = Workbook.createWorkbook(targetFile);
/** **********创建工作表************ */
WritableSheet sheet = workbook.createSheet("测试报告", 0);// 定义sheet名,第几个sheet
/** *********设置列宽**************** */
sheet.setColumnView(0, 20); // 第1列
sheet.setColumnView(1, 18); // 第2列
sheet.setColumnView(2, 30);// 第3列
sheet.setColumnView(3, 30);// 第4列
sheet.setColumnView(4, 15);// 第5列
sheet.setColumnView(5, 30);// 第6列
sheet.setColumnView(6, 15);// 第7列
sheet.setColumnView(7, 30);// 第7列
sheet.setColumnView(8, 25);// 第7列
// 设置行高
sheet.setRowView(0, 600, false);
sheet.setRowView(1, 400, false);
// 设置页边距
sheet.getSettings().setRightMargin(0.5);
// 设置页脚
// sheet.setFooter("", "", "测试页脚");
/** ************设置单元格字体************** */
// 字体
WritableFont NormalFont = new WritableFont(WritableFont.ARIAL, 10);
WritableFont BoldFont = new WritableFont(WritableFont.ARIAL, 14,
WritableFont.BOLD);
/** ************以下设置几种格式的单元格************ */
// 用于标题
WritableCellFormat wcf_title = new WritableCellFormat(BoldFont);
wcf_title.setAlignment(Alignment.CENTRE);
wcf_title.setWrap(true); // 是否换行
// 用于正文左
WritableCellFormat wcf_center = new WritableCellFormat(NormalFont);
wcf_center.setAlignment(Alignment.LEFT);
WritableCellFormat wcf_table = new WritableCellFormat(NormalFont);
wcf_table.setAlignment(Alignment.CENTRE);
/** ************单元格格式设置完成****************** */
// 合并单元格,注意mergeCells(col0,row0,col1,row1)
// --列从0开始,col1为你要合并到第几列,行也一样
sheet.mergeCells(0, 0, 26, 0);
//sheet.addCell(new Label(0, 0, "测试报告", wcf_title));
// 另起一table
sheet.addCell(new Label(0, 1, "测试编号", wcf_table));
sheet.addCell(new Label(1, 1, "厂商名称", wcf_table));
sheet.addCell(new Label(2, 1, "车牌号", wcf_table));
sheet.addCell(new Label(3, 1, "车长", wcf_table));
sheet.addCell(new Label(4, 1, "检测时间", wcf_table));
sheet.addCell(new Label(5, 1, "厂商检测时间", wcf_table));
sheet.addCell(new Label(6, 1, "车速", wcf_table));
sheet.addCell(new Label(7, 1, "厂商车速", wcf_table));
sheet.addCell(new Label(8, 1, "车速差", wcf_table));
HqlFilter hqlFilter = new HqlFilter(getRequest());
List<StatData> list = service.findByFilter(hqlFilter);
for (int i = 0; i < list.size(); i++) { //
StatData data = (StatData) list.get(i);
sheet.addCell(new Label(0, 2 + i, data.getWorksNo(), wcf_center));
sheet.addCell(new Label(1, 2 + i, data.getWorksName(), wcf_center));
sheet.addCell(new Label(2, 2 + i, data.getCarNoR(), wcf_center));
sheet.addCell(new Label(3, 2 + i, data.getCarLengthR().toString(), wcf_center));
if (data.getWatchTimeR() != null) {
String dateTime = String.valueOf(data.getWatchTimeR());
sheet.addCell(new Label(4, 2 + i,dateTime.split("\\.")[0], wcf_center));
}else{
sheet.addCell(new Label(4, 2 + i,"", wcf_center));
}
if (data.getWatchTimeC() != null) {
String dateTime = String.valueOf(data.getWatchTimeC());
sheet.addCell(new Label(5, 2 + i,dateTime.split("\\.")[0], wcf_center));
}else{
sheet.addCell(new Label(5, 2 + i,"", wcf_center));
}
sheet.addCell(new Label(6, 2 + i, data.getCarSpeedAverageR().toString(), wcf_center));
sheet.addCell(new Label(7, 2 + i, data.getCarSpeedC().toString(),wcf_center));
Double per = data.getSpeedDiffer()/data.getCarSpeedAverageR();
sheet.addCell(new Label(8, 2 + i, data.getSpeedDiffer().toString()+","+per+"%",wcf_center));
}
/** **********以上所写的内容都是写在缓存中的,下一句将缓存的内容写到文件中******** */
workbook.write();
/** *********关闭文件************* */
workbook.close();
// 导出名称
//filename = new String("测试报告.xls".getBytes(), "ISO8859-1");
} catch (Exception e) {
System.out.println("在输出到EXCEL的过程中出现错误,错误原因:" + e.toString());
}
excelStream = new ByteArrayInputStream(targetFile.toByteArray());
System.out.println("===================================="+excelStream);
// try {
// excelStream.close();
// } catch (IOException e) {
// System.out.println("关闭inputStream异常:" + e.toString());
// e.printStackTrace();
// } finally {
// if (excelStream != null) {
// try {
// excelStream.close();
// } catch (IOException e) {
// System.out.println("关闭inputStream异常:" + e.toString());
// e.printStackTrace();
// }
// }
// }
return "excel";