Как получить более 255 столбцов в таблице Excel с помощью Apache POI 3.6 - PullRequest
19 голосов
/ 24 февраля 2010

Я создаю календарь в Excel.Столбец 1 - 01.01.2010 (дд.мм.гггг), Столбец 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

Редактировать: Похоже, ошибка связана с формулами ..

Ответы [ 6 ]

25 голосов
/ 04 августа 2011

Листы Excel до 2007 года имели ограничение в 256 столбцов. Эти листы также генерируют расширение ".xls". Excel 2007 и более поздние версии могут вмещать 16 тыс. Столбцов, основаны на формате XML и генерируют формат «.xlsx». Объектная модель POI для листов до 2007 года - 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.

9 голосов
/ 24 февраля 2010

Я понял это. Мне пришлось переключиться с org.apache.poi.hssf.usermodel на org.apache.poi.ss.usermodel

Это позволяет вам использовать 16 тыс. Столбцов или что-то в этом роде.

9 голосов
/ 24 февраля 2010
3 голосов
/ 24 февраля 2010

Вы можете подумать о переключении с портретного на ландшафтное (иными словами, транспонирование данных), чтобы вы могли использовать 65 тыс. Строк для дней года. Это именно то, что я сделал с отчетом, требующим большого количества столбцов и небольшого количества строк.

В качестве альтернативы, вы можете разделить год на 6-месячные подпериоды, каждый на отдельном листе.

Оба эти решения являются временными, но могут предоставить вам «достаточно хорошее» решение, в зависимости от ваших требований.

2 голосов
/ 24 ноября 2010

Это потому, что в Excel количество столбцов ограничено Смотрите это: http://office.microsoft.com/en-us/excel-help/excel-specifications-and-limits-HP005199291.aspx

1 голос
/ 18 мая 2018

Как получить более 255 столбцов в листе Excel с помощью Apache POI
попробуй

Workbook workbook = new XSSFWorkbook()

<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi-ooxml</artifactId>`enter code here`
   <version>3.15</version>
  </dependency>

  <dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi</artifactId>
   <version>3.15</version>
  </dependency>
...