6

私はPOIHSSFを使用してExcelデータを読み取り、JUnitを使用してデータベースprocRefCursorに対してデータをチェックしています。

Junitテストは、たとえば100のRefcursorからの数値データがExcelシート100のデータと比較されるため失敗しますが、POIが100.0として読み取るため失敗します。

        InputStream fileInputStream = Testdb.class.getClassLoader().getResourceAsStream(fileName);
        //retrieve number of columns and rows
        int numRows=0, numCols=0, i, j, minColIndex=0, maxColIndex=0;
        POIFSFileSystem fsFileSystem = new POIFSFileSystem(fileInputStream);
        HSSFWorkbook workBook = new HSSFWorkbook(fsFileSystem);
        HSSFSheet hssfSheet = workBook.getSheetAt(0);
        Iterator rowIterator = hssfSheet.rowIterator();
        while (rowIterator.hasNext())
        {
            numRows++;
            HSSFRow hssfRow = (HSSFRow) rowIterator.next();
            Iterator iterator = hssfRow.cellIterator();
            List cellTempList = new ArrayList();
            if (numRows == 1)
            {
                minColIndex = hssfRow.getFirstCellNum();
                maxColIndex = hssfRow.getLastCellNum();
                numCols = maxColIndex;
            }
            for(int colIndex = minColIndex; colIndex < maxColIndex; colIndex++)
            {
                HSSFCell hssfCell = hssfRow.getCell(colIndex);
                cellTempList.add(hssfCell);

            }
            cellDataList.add(cellTempList);
        }


        String expected[][] = new String[numRows][numCols];
        String[] tableColumns = new String[numCols];
        System.out.println("Rows : " + numRows + "Columns : " + numCols);
        System.out.println("Min Col Index : " +minColIndex + "Max Col Index : " + maxColIndex);
        for (i=0; i<numRows; i++)
        {
            List cellTempList = (List) cellDataList.get(i);
            for (j=0; j < numCols; j++)
            {
                HSSFCell hssfCell = (HSSFCell) cellTempList.get(j);
                if (i == 0)
                {
                    tableColumns[j] = hssfCell.toString();
                    System.out.print(tableColumns[j] + "\t");
                }
                else
                {
                    if(hssfCell != null)
                    {
                        expected[i-1][j] = hssfCell.toString();
                    }
                    else
                    {
                        expected[i-1][j] = null;
                    }
                    System.out.print(expected[i-1][j] + "\t");
                }
            }
            System.out.println();
        }

これは私が構築している汎用フレームワークプログラムであるため、フレームワークは「.0」を無視するのに十分インテリジェントである必要があります。これを解決する方法について何か入力はありますか?

4

2 に答える 2

7

これは、文字列の代わりに 10 進数を返すなど、ここにある他の多くの質問と実質的に同じです(POI jar)

答えは私がここで与えたものと同じです:

POI は、Excel がファイルに保存した正確な値を示しています。一般に、Excel セルに数値を書き込むと、Excel はそれをフォーマット付きの数値として保存します。POI は、必要に応じてその書式設定を行うためのサポートを提供します (ほとんどの人はそうしません - 数値を使用できるように、数値を数値として使用したいのです)。

探しているクラスはDataFormatterです。あなたのコードは次のようになります

 DataFormatter fmt = new DataFormatter();
 for (Row r : sheet) {
    for (Cell c : r) {
       CellReference cr = new CellRefence(c);
       System.out.println("Cell " + cr.formatAsString() + " is " + 
                          fmt.formatCellValue(c) );
    }
 }
于 2012-10-09T14:17:53.850 に答える
1

こんにちは私の解決策は、シンボルを置くことでした:

'

すべての番号の前に。次に、数値がテキストとして処理されます。

そうすると、小さな緑色の三角形と警告が表示されます。 ここに画像の説明を入力

私にとってこれは問題ではありません。

于 2017-05-31T05:46:38.093 に答える