[英]Creating multiple sheets using Apache poi and servlets
当我使用Apache poi和servlet创建多个工作表时。 它正在创建工作表但不将数据写入文件。 我试图通过下面的代码将前1000条记录写入sheet1,将下一条1000写入sheet2,但不能正常工作
private void writeDataToExcelFile(String string,
ArrayList<ArrayList<String>> excelData, OutputStream outputStream) {
HSSFWorkbook myWorkBook = new HSSFWorkbook();
String sheetName = "";
sheetName = "Document-" + 0;
HSSFSheet mySheet = myWorkBook.createSheet();
HSSFRow myRow = null;
HSSFCell myCell = null;
for (int rowNum = 0; rowNum < excelData.size(); rowNum++) {
ArrayList<String> rowData = excelData.get(rowNum);
if(rowNum>0 && rowNum%1000 == 0)
{
sheetName = "Document-" + (rowNum/1000);
mySheet = myWorkBook.createSheet();
}
myRow = mySheet.createRow(rowNum);
for (int cellNum = 0; cellNum < rowData.size(); cellNum++) {
myCell = myRow.createCell(cellNum);
myCell.setCellValue(rowData.get(cellNum));
}
}
System.out.println("Last row:" + mySheet.getLastRowNum());
System.out.println("Row number:" + mySheet.rowIterator().next().getRowNum());
try {
myWorkBook.write(outputStream);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
我的逻辑有什么问题。请做必要的帮助。 谢谢
循环遍历数据集时,您希望在第1000行拆分以启动新工作表,这很好,但是当您启动新工作表时,您创建的下一行是行1001(外部循环索引变量)
myRow = mySheet.createRow(rowNum);
要获得您想要的效果,请将循环更改为如下所示:
int currentRow = 0;
for (int rowNum = 0; rowNum < excelData.size(); rowNum++)
{
ArrayList<String> rowData = excelData.get(rowNum);
if(currentRow == 1000)
{
sheetName = "Document-" + (rowNum/1000);
mySheet = myWorkBook.createSheet();
currentRow = 0;
}
myRow = mySheet.createRow(currentRow);
for (int cellNum = 0; cellNum < rowData.size(); cellNum++)
{
myCell = myRow.createCell(cellNum);
myCell.setCellValue(rowData.get(cellNum));
}
currentRow++;
}
我没有编译这个,所以我不知道它是否会立即起作用,但它应该指向正确的方向。
HTH
编辑
进一步考虑这个问题,你可以从1行更改到原始应用程序获得相同的效果(尽管有点清晰):
myRow = mySheet.createRow(rowNum%1000);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.