-1

複数のシートで 1 つのワークブックを作成しようとしていますが、ソース ファイルの最後の行である各 Excel シートで常に 1 行しか取得できません。私のコードは次のように動作しています:

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:

   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]);
    }

}

私が間違っていること、およびループで実行していないときに複数の行を作成できるかどうかを知る必要があります。

前もって感謝します!

4

1 に答える 1

1

問題は次の行にあります。

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

初めてのメソッドは をsheet.getLastRowNum()返す0ので、引数としてsheet.createRow与えられ0ます。ただし、次回の結果は同じで、再度行を作成します0(ループの各反復で同じです)。

javadocからgetLastRowNum():

Excel ファイル形式の特異性により、このメソッドを呼び出した結果がゼロの場合、それがシートにゼロの行があることを意味するのか、位置ゼロに 1 つの行があるのか​​ を判断できません。その場合、さらに getPhysicalNumberOfRows() を呼び出して、位置ゼロに行があるかどうかを確認します。

したがって、次のようなものが機能するはずです。

HSSFRow row = sheet.createRow(sheet.getPhysicalNumberOfRows() == 0 ? 0 :sheet.getLastRowNum()+1);
HSSFRow rowMain = sheetMain.createRow(sheetMain.getPhysicalNumberOfRows() == 0 ? 0 :sheetMain.getLastRowNum()+1);
于 2015-06-22T07:34:39.783 に答える