poi读取模板并生成多个sheet

public void loadMainRequirePlan(HttpServletResponse response) throws IOException {
  Map map=new HashMap();
  //根据当前时间查询出数据
  SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
  String date=/*sdf.format(new Date());*/"2018-03-04";
  String date1=date+" 00:00:00";
  String date2=date+" 23:59:59";
  map.put("date1", date1);
  map.put("date2", date2);
  map.put("laboratory", laboratory);
  //查询出该事件段的所有操作人员
  List listConner=vmws.selectConnerName(map);
// 读取模板,写入数据,下载
// path是指欲下载的文件的路径。
File file = new File("C:\\Users\\谢杨华\\Desktop\\模板.xls");
// 读取文件写入数据
InputStream io = new FileInputStream(file);
HSSFWorkbook wbook = new HSSFWorkbook(io);
HSSFSheet sheetModel = wbook.getSheetAt(0);//获取到sheet模板
//隐藏Sheet 
wbook.removeSheetAt(0);
for(int s=0;s HSSFSheet sheet = wbook.createSheet(listConner.get(s).getConnerUsername()+"-"+sdf.format(new Date()));
copySheet(wbook, sheetModel, sheet, sheetModel.getFirstRowNum(), sheetModel.getLastRowNum());
int num = 0;
int rows = 0;
//根据不同的操作人员查询出不同数据
map.put("connerName", listConner.get(s).getConnerUsername());
List list=vmws.reportExcel(map);
int a = list.size();
int max = sheet.getLastRowNum();
sheet.setDefaultRowHeightInPoints(30 * 20);
HSSFRow row = null;
HSSFCellStyle cellStyle = wbook.createCellStyle(); // 单元格样式
cellStyle.setAlignment(HorizontalAlignment.CENTER);
cellStyle.setBorderBottom(BorderStyle.THIN);
cellStyle.setBorderLeft(BorderStyle.THIN);
cellStyle.setBorderRight(BorderStyle.THIN);
cellStyle.setBorderTop(BorderStyle.THIN);


for (int i = 0; i < list.size(); i++) {
row = sheet.getRow(i + 1);
row = sheet.createRow(i + 1); // 该行无数据,创建行对象
for (int j = 0; j < 12; j++) {
row.createCell(j).setCellStyle(cellStyle);
}
row.getCell(0).setCellValue(list.get(i).getMpnum());
row.getCell(1).setCellValue(list.get(i).getCrnum());
row.getCell(2).setCellValue(list.get(i).getIoNum());
row.getCell(3).setCellValue(list.get(i).getStartTime());
row.getCell(4).setCellValue(list.get(i).getEcnend_date());
row.getCell(5).setCellValue(list.get(i).getProcedureName());
row.getCell(6).setCellValue(list.get(i).getAssignCount());
row.getCell(7).setCellValue(list.get(i).getEcnMachine());
row.getCell(8).setCellValue(list.get(i).getConnerUsername());
row.getCell(9).setCellValue(list.get(i).getBomName());
row.getCell(10).setCellValue(list.get(i).getProjectName());
row.getCell(11).setCellValue(list.get(i).getGyyq());
 
}
}
String name=sdf.format(new Date())+"已排计划.xls";
 
// 取得文件名。
String filename = file.getName();
// 取得文件的后缀名。
String ext = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase();


// 以流的形式下载文件。
 
io = new BufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[io.available()];


io.read(buffer);
io.close();


// 清空response
response.reset();
// 设置response的Header
response.setHeader("Content-Disposition",
"attachment;filename=" + new String(name.getBytes(), "ISO-8859-1"));
response.setContentType("application/vnd.ms-excel;charset=utf-8");
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
wbook.write(toClient);
toClient.flush();
toClient.close();
  }

/**
     * 
     * @param Excel工作簿对象
     * @param 模板Sheet页
     * @param 新建Sheet页
     * @param 模板页的第一行
     * @param 模板页的最后一行
     */
    private static void copySheet(HSSFWorkbook wb, HSSFSheet fromsheet, HSSFSheet newSheet, int firstrow, int lasttrow) {


        // 复制一个单元格样式到新建单元格
        if ((firstrow == -1) || (lasttrow == -1) || lasttrow < firstrow) {
            return;
        }
        
        HSSFRow fromRow = null;
        HSSFRow newRow = null;
        HSSFCell newCell = null;
        HSSFCell fromCell = null;
        // 设置列宽
        for (int i = firstrow; i < lasttrow; i++) {
            fromRow = fromsheet.getRow(i);
            if (fromRow != null) {
                for (int j = fromRow.getLastCellNum(); j >= fromRow.getFirstCellNum(); j--) {
                    int colnum = fromsheet.getColumnWidth((short) j);
                    if (colnum > 100) {
                        newSheet.setColumnWidth((short) j, (short) colnum);
                    }
                    if (colnum == 0) {
                        newSheet.setColumnHidden((short) j, true);
                    } else {
                        newSheet.setColumnHidden((short) j, false);
                    }
                }
                break;
            }
        }


        // 复制行并填充数据
        for (int i = 0; i < lasttrow; i++) {
            fromRow = fromsheet.getRow(i);
            if (fromRow == null) {
                continue;
            }
            newRow = newSheet.createRow(i - firstrow);
            newRow.setHeight(fromRow.getHeight());
            for (int j = fromRow.getFirstCellNum(); j < fromRow.getPhysicalNumberOfCells(); j++) {
                fromCell = fromRow.getCell((short) j);
                if (fromCell == null) {
                    continue;
                }
                newCell = newRow.createCell((short) j);
                newCell.setCellStyle(fromCell.getCellStyle());
                int cType = fromCell.getCellType();
                newCell.setCellType(cType);
                switch (cType) {
                    case HSSFCell.CELL_TYPE_STRING:
                        newCell.setCellValue(fromCell.getRichStringCellValue());
                        break;
                    case HSSFCell.CELL_TYPE_NUMERIC:
                        newCell.setCellValue(fromCell.getNumericCellValue());
                        break;
                    case HSSFCell.CELL_TYPE_FORMULA:
                        newCell.setCellValue(fromCell.getCellFormula());
                        break;
                    case HSSFCell.CELL_TYPE_BOOLEAN:
                        newCell.setCellValue(fromCell.getBooleanCellValue());
                        break;
                    case HSSFCell.CELL_TYPE_ERROR:
                        newCell.setCellValue(fromCell.getErrorCellValue());
                        break;
                    default:
                        newCell.setCellValue(fromCell.getRichStringCellValue());
                        break;
                }
            }
        }
    }

你可能感兴趣的:(poi读取模板并生成多个sheet)