19

エクセルでカレンダーを作っています。列 1 は 01.01.2010 (dd.MM.yyyy)、列 2 は 02.01.2010 などです。

これは私のコードです:

int day_cell = 0;

for(int i = 0; i < days.size(); i++)
{
     Date day = days.get(i);

     HSSFCell cell = row.createCell(day_cell++);
     cell.setCellValue(day.toString());
}

列 256 POI に到達すると、次の例外がスローされます。

java.lang.IllegalArgumentException: Invalid column index (256).  Allowable column range for BIFF8 is (0..255) or ('A'..'IV')
at org.apache.poi.hssf.usermodel.HSSFCell.checkBounds(HSSFCell.java:926)
at org.apache.poi.hssf.usermodel.HSSFCell.<init>(HSSFCell.java:162)
at org.apache.poi.hssf.usermodel.HSSFRow.createCell(HSSFRow.java:141)
at org.apache.poi.hssf.usermodel.HSSFRow.createCell(HSSFRow.java:119)

3.6 リリースで修正されたことを示唆するこのバグ レポートを見つけました。3.5 を使用していましたが、3.6 に変更しても効果がないようです。ヒントはありますか?

https://issues.apache.org/bugzilla/show_bug.cgi?id=46806

編集:バグの問題は数式に関するものだったようです..

4

6 に答える 6

27

2007 年より前の Excel シートには、256 列の制限がありました。これらのシートも「.xls」拡張子を生成します。Excel 2007 以降は 16K 列に対応でき、XML 形式に基づいており、".xlsx" 形式を生成します。2007 年より前のシートの POI オブジェクト モデルはorg.apache.poi.hssf.usermodel、2007 年以降のシートのオブジェクト モデルは ですorg.apache.poi.xssf.usermodel 。パッケージorg.apache.poi.ss.usermodelは、両方のオブジェクト モデルをカバーする統一されたインターフェイスを提供します。したがって、256 を超える列を作成するには、org.apache.poi.xssf.usermodelパッケージ内または 内でクラスを使用する必要がありますorg.apache.poi.ss.usermodel

于 2011-08-04T16:00:16.683 に答える
9

私はそれを考え出した。org.apache.poi.hssf.usermodel からorg.apache.poi.ss.usermodelに切り替える必要がありました

これにより、16k 列などを使用できます。

于 2010-02-24T19:39:10.447 に答える
9

API ではなく、Excel に問題がある可能性があります。

Excel 2007 より前のスプレッドシートの最大列数は 256です。

于 2010-02-24T14:39:01.757 に答える
3

1 年のうち 65,000 行を使用できるように、縦向きから横向きに切り替える (つまり、データを転置する) ことを検討することもできます。これはまさに、多数の列と少数の行を必要とするレポートで行ったことです。

または、1 年を 6 か月のサブ期間に分割し、それぞれを独自のシートに分割することもできます。

これらはどちらもその場しのぎのソリューションですが、要件によっては「十分な」ソリューションを提供する場合があります。 

于 2010-02-24T14:37:16.143 に答える
2

これは、Excel の列数が制限されているためです。

于 2010-11-24T13:52:21.133 に答える