2015-06-22 1015 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以顯示該解決方案。 –