日期:2014-05-19 浏览次数:20804 次
public static InputStream writeExcel(ArchiveVO archiveVO, List<ArchiveDatatypeVO> archiveDatatypeVOList, String filePath , DataTypeMgtService dataTypeMgtService, DataArchiveMgtService dataArchiveMgtService) throws Exception { InputStream inputStream = null; //创建输出文件 File file = new File(filePath , archiveVO.getName()+".zip"); if(!file.exists()){ file.createNewFile(); }else{ file.delete(); } //定义压缩输出流,用来输出到压缩文件中 ZipOutputStream zos = new ZipOutputStream(file); ZipEntry entry = null; for (ArchiveDatatypeVO advo : archiveDatatypeVOList) { //查到要写入到当前工作簿的数据和数据类型的指标项。 List<DatatypeAttributeVO> davos = dataTypeMgtService.getDatatypeAttributeVOByDatatypeIdVO(advo.getDatatypeIdVO().getId()); List<Map<String,String>> datas = dataArchiveMgtService.getArchiveDataByArchiveDatatypeId(advo,davos); //根据数据量来判断需要多少个sheet来存储数据 int sheetNum = (datas.size() + StatusUtil.EXCELMAXROW - 1) / StatusUtil.EXCELMAXROW; //创建工作薄对象 XSSFWorkbook wb = new XSSFWorkbook(); //开始迭代sheet for(int s = 0; s < sheetNum; s++){ int rowNum = 0; if(s == sheetNum - 1){ rowNum = datas.size() % StatusUtil.EXCELMAXROW; } XSSFSheet sheet = wb.createSheet("sheet" + s ); //将指标项列表的显示名称写入到sheet中的首行 XSSFRow firstRow = sheet.createRow(0); for (int d = 0; d < davos.size(); d ++) { XSSFCell cell = firstRow.createCell(d); cell.setCellValue(davos.get(d).getDisplayName()); } //迭代数据,List中的每条数据做为一行,而Map中的数据放到一个Cell里 for(int i = 0; i < datas.size(); i++){ XSSFRow row = sheet.createRow(i + 1); Map<String, String> map = datas.get(i); for(int d = 0; d < davos.size(); d ++){ DatatypeAttributeVO davo = davos.get(d); XSSFCell cell = row.createCell(d); cell.setCellValue(map.get(davo.getName())); } } } //将excel压缩到压缩文件中 entry = new ZipEntry(advo.getDatatypeIdVO().getName()+".xlsx"); zos.putNextEntry(entry); zos.setEncoding("gbk"); //将excel直接写入到压缩文件中 wb.write(zos); zos.closeEntry(); } zos.close(); inputStream = new FileInputStream(file); return inputStream; }