2015-06-22 1017 views
-1

我试图用多个工作表创建一个工作簿,但始终只在每个Excel工作表中获取一行,这是源文件中的最后一行。 我的代码工作如下:HSSF createrow每次只创建一行

public void parse() 
{ 
    BufferedReader reader = null; 
    BufferedWriter writer = null; 
    String tmpFile = "tmpFile.tmp"; 
    ExcelFile excelFile = new ExcelFile(_fileName + ".xlsx"); 
    int lineCount = 0; 
    try 
    { 
     reader = new BufferedReader(new FileReader(_fileName)); 
     writer = new BufferedWriter(new FileWriter(tmpFile)); 
     String line = null;   
     while ((line = reader.readLine()) != null) 
     { 
      String newLine = processLine(line.trim()); 
      if (newLine == null) 
       continue; 
      else 
      {     
       if (newLine.isEmpty()) 
       { 
        lineCount++; 
        if(lineCount > 1) 
        { 
         continue; 
        } 
       } 
       else if (!newLine.isEmpty()) 
       { 
        lineCount = 0; 
       } 
       if (getRepositoryName(newLine) != null && !getRepositoryName(newLine).isEmpty()) 
        excelFile.writeLine(getRepositoryName(newLine), newLine); 
      } 

     } 
     reader.close(); 
     excelFile.createFile(_fileName.split("\\.")[0]);    
    } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 
} 

创作所做的每一行的: excelFile.writeLine(getRepositoryName(新行),换行); 从以前的方法。

的WriteLine作为实现ExcelFile类如下:

public void writeLine(String sheetName, String line) 
{ 
    HSSFSheet sheet = getSheet2(sheetName);  
    HSSFSheet sheetMain = getSheet2(_mainSheetName); 
    HSSFRow row = sheet.createRow(sheet.getLastRowNum() == 0 ? 0 :sheet.getLastRowNum()+1); 
    HSSFRow rowMain = sheetMain.createRow(sheetMain.getLastRowNum() == 0 ? 0 :sheetMain.getLastRowNum()+1); 
    String[] columnsArr = line.split(","); 
    for (int i = 0; i < columnsArr.length ; i++) 
    { 
     HSSFCell cell = row.createCell(i); 
     HSSFCell cellMain = rowMain.createCell(i); 
     cell.setCellValue(columnsArr[i]); 
     cellMain.setCellValue(columnsArr[i]); 
    } 

} 

需要知道我做错了,如果它可以创建多行不用时循环中运行。

提前致谢!

回答

1

问题是在线路:

sheet.getLastRowNum()返回 0
HSSFRow row = sheet.createRow(sheet.getLastRowNum() == 0 ? 0 :sheet.getLastRowNum()+1); 
HSSFRow rowMain = sheetMain.createRow(sheetMain.getLastRowNum() == 0 ? 0 :sheetMain.getLastRowNum()+1); 

首先时间的方法,以便sheet.createRow作为参数给出0。但下次结果是相同的,并且您再次创建行0(并且在循环的每次迭代中都是相同的)。

javadocgetLastRowNum()的:

由于Excel文件格式的特质,如果调用此方法的结果是零,你不能,如果这意味着有在纸张上零行告诉,或者位置为零的一个。对于这种情况,另外调用getPhysicalNumberOfRows()来判断零位是否有一行。

所以这样的事情应该工作:

HSSFRow row = sheet.createRow(sheet.getPhysicalNumberOfRows() == 0 ? 0 :sheet.getLastRowNum()+1); 
HSSFRow rowMain = sheetMain.createRow(sheetMain.getPhysicalNumberOfRows() == 0 ? 0 :sheetMain.getLastRowNum()+1); 
+0

感谢您的回答!我能够看到并理解这就是发生了什么,但仍然不明白为什么每次都不增加,我该如何解决这个问题。 – Alina

+0

我想你可以使用'getPhysicalNumberOfRows()'方法。我已经更新了我的answear以显示该解决方案。 –