3

Apache POI ライブラリを使用して XLSX ファイルを作成します (POI 3.8 beta1 から beta 4 を使用して試しました)。Excel 2007 で XLSX ファイルを開こうとすると、シートに読み取り不能なコンテンツがあるというエラーが表示され、Excel から修復するかどうか尋ねられます。

私の問題は、私のプログラムが XLSX ファイルを生成し、別のプログラムが POI イベント API を介してそれを読み取ることです。イベント API を介してディメンション XML を読み取ると、A1:500Z (Excel に 500 行と 26 列があるとします) ではなく、A1 のみが読み取られることがわかります。シートが空の場合にのみシートの寸法が A1 であることがわかりましたが、私の場合、シートには 500 行のデータがあります。そのため、寸法が正しく設定されない原因となる XLSX 書き込みコードに問題があります。(これが、Excelが読み取り不能コンテンツエラーをスローする理由に違いないと思います)。

この読み取り不能コンテンツ エラーについて言及している POI メーリング リストを確認しましたが、役に立ちませんでした。

XLSX ファイル作成コードは非常に単純なので、そこに何か問題があるとは思えません (この誤った動作は、書き込まれるシートに数百行を超えるデータがある場合にのみ発生します)。

誰もそのような問題を経験しましたか? それとも、POI ライブラリに本質的に何か問題がありますか (彼らのメーリング リストには読み取り不能コンテンツ エラーが表示されます)。

4

3 に答える 3

3

ここで同じ問題を抱えています。xlsx を解凍してファイル 'xl/worksheets/sheet1.xml' を調べると、常に次のように表示されます。

<worksheet>
 <dimension ref="A1"/>
 <sheetViews>
  <sheetView ...

追加された行とセルの数に関係なく。

Apache のバグ トラッカーにバグを報告しました: https://issues.apache.org/bugzilla/show_bug.cgi?id=53611

[編集]
バグトラッカーに回避策がRyanによって投稿されました https://issues.apache.org/bugzilla/show_bug.cgi?id=53611#c3

CTWorksheet ctSheet = wb.getXSSFWorkbook().getSheetAt(0).getCTWorksheet();
ctSheet.getDimension().setRef("A1:D47");

そのため、作成した列と行を追跡し、各シートのディメンション タグを自分で設定する必要があります。

結果のコードは次のとおりです。

private void updateDimensionRef(Sheet sheet, int columnIndex, int rowNumber) {
    ((XSSFSheet) sheet).getCTWorksheet().getDimension()
        .setRef("A1:" + CellReference.convertNumToColString(columnIndex) + rowNumber);
}

[編集#2]

バージョン 3.16-beta1 で修正されています。変更ログ (バグ #53611)参照してください。

于 2012-07-27T13:11:12.257 に答える
0

私も同じ問題を抱えてる。奇妙なことに、Open Office はこのファイルをエラーなしで開くことができます (ただし、何らかの奇妙な理由でグループ化が失われます)。コードでグループ化を無効にすると、すべて正常に動作します。したがって、Apache POI 行のグループ化のバグのようです。

于 2011-09-27T04:09:24.927 に答える
0

不適切な寸法レコードに関連する POI の未解決のバグは認識していません。問題のある XSSF を使用して単純な xlsx ファイルを生成する小さなテストケースを作成できる場合は、POI Bugzillaで新しいバグを開いて追跡および修正できるようにすることを強くお勧めします。

メーリング リストのコンテンツが読めない最も一般的な理由は、古いバージョンのライブラリを使用している人 (現在は修正されているバグがあった) か、独自の xlsx ファイルをほとんど手作業で作成しようとしている人 (BigGridDemo スタイルのアプローチを使用) のいずれかです。 )。後者は通常、ストリーミング書き込みを行う新しい SXSSF の方法に切り替えることで解決されます。

(Excel は通常、問題のあるファイルを修正するときに、エラーの詳細を含む xml ファイルを提供します。正確に何が問題なのかを確認するのは困難です)

于 2011-08-26T16:16:00.060 に答える