0

私は、Excelスプレッドシートから各行とセルを読み取り、特定の行の各セルからデータを取得して、そのデータを使用してWebサービス呼び出しを行うプログラムに取り組んでいます。WebサービスXML応答が返されると、それを解析して成功ブール値と失敗が発生した場合のメッセージを取得します。

データを解析でき、各行の応答を取得していますが、その行の最後の2つのセルを編集しようとすると、最初の行の成功と結果メッセージのセルのみが更新されます。

以下は私のコードのスニペットです:

private static XSSFRow[] retrieveRows(XSSFWorkbook wb)
{
    XSSFSheet xslSheet = wb.getSheetAt(0);
    XSSFRow[] sheetRows = new XSSFRow[xslSheet.getLastRowNum()];

    for (int i = 1; i < xslSheet.getLastRowNum()+1; i++)
    {
        sheetRows[i-1] = xslSheet.getRow(i);
    }

    return sheetRows;
}

public static String[] processRow(XSSFRow xslRow)
{
    String[] cellValues = new String[totalCells];

    for (int i = 0; i < totalCells; i++)
    {
        XSSFCell currentCell = xslRow.getCell(i);
        String cellVal;
        try
        {
            cellVal = currentCell.getStringCellValue();
        }
        catch (Exception e)
        {
            cellVal = "";
        }
        cellValues[i] = cellVal;
        System.out.println("Cell "+i+": "+cellVal);
    }

    return cellValues;
}

そして、すべての魔法が起こる最後の部分...またはそのようなもの。

try
    {
        XSSFRow[] xslRows = retrieveRows(theWorkbook);
        ArrayList<String[]> rowCellVals = new ArrayList<String[]>();

        String sessionKey[] = WQSServices.sessionToken();

        for (int r = 0; r < xslRows.length; r++)
        {               
            System.out.println("R Value: "+r);
            rowCellVals.add(processRow(xslRows[r]));

            if(sessionKey[0].equals("true"))
            {
                String sessionData = sessionKey[1];
                String[] cellValCurrRow = rowCellVals.get(r);
                String attachmentData[] = WQSServices.uploadAttachment(sessionData, cellValCurrRow);

                XSSFCell cell = xslRows[r].getCell(7);

                if(cell == null)
                {
                    cell = xslRows[r].createCell(7);
                }

                XSSFCell cell2 = xslRows[r].getCell(8);

                if(cell2 == null)
                {
                    cell2 = xslRows[r].createCell(8);
                }

                cell.setCellType(Cell.CELL_TYPE_STRING);
                cell2.setCellType(Cell.CELL_TYPE_STRING);
                cell.setCellValue(attachmentData[0]);
                cell2.setCellValue(attachmentData[1]);

                System.out.println("New Cell Data: 1-"+cell.getStringCellValue()+" 2-"+cell2.getStringCellValue());

                FileOutputStream fos = new FileOutputStream(xslFile);
                theWorkbook.write(fos);
                fos.close();
            }
            else
            {                   

                XSSFCell cell = xslRows[r].getCell(7);

                if(cell == null)
                {
                    cell = xslRows[r].createCell(7);
                }

                System.out.println("The Cell: "+cell.getStringCellValue());

                cell.setCellType(Cell.CELL_TYPE_STRING);
                cell.setCellValue(sessionKey[0]);

                FileOutputStream fis = new FileOutputStream(xslFile);
                theWorkbook.write(fis);
                fis.close();

            }

            readFile();
        }

    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
4

1 に答える 1

1

Gagravarrの観察に基づくと、私の問題は、ファイル出力ストリームをforループ内に置くことに基づいていました。これをforループから移動すると、すべてが期待どおりにブックに書き込まれます。

于 2013-01-04T15:49:18.860 に答える