Apache POI> обработка специальных форматов? - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь сгенерировать файл xlsx, и для некоторых ячеек применить «Специальный» (это точное слово, используемое в Excel, в ячейках формата> Категория) категория с конкретный язык . Например, моя локальная установка Excel поставляется с «Номер социального страхования» для локали «Английский (Канада)».

Я проверил API POI, немного погуглил и озадачен тем, как это сделать. Я попытался создать такие ячейки вручную (с использованием Excel), а затем прочитать их с помощью POI.
Если я применяю getCellStyle (). GetDataFormat () к моей ячейке, мне возвращаются значения, равные или превосходящие 164. Что я предполагаю, это означает, что это рассматривается как нечто определяемое пользователем, поскольку POI org.apache.poi.ss.usermodel.BuiltinFormats #FIRST_USER_DEFINED_FORMAT_INDEX Константа равна 164.

То, что я пытаюсь сделать, вообще достижимо? Я даже не знаю, где вообще определены специальные типы Excel. Кажется, они встроены.

1 Ответ

2 голосов
/ 04 июля 2019

Все Excel числовые форматы на основе шаблона специального формата.См. Как управлять и понимать настройки в диалоговом окне «Формат ячеек» в Excel .

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

Ниже приведен специальный формат «Номер социального страхования (CH)» - Швейцария:

enter image description here ЭтоНемецкий Excel «Sonderformat» - «Специальный».

Это соответствует пользовательскому формату 000\.00\.000\.000.Вы можете вычесть это, просто перейдя в категорию Custom в диалоговом окне Excel Format Cells - Number.Затем прочитайте шаблон из текстового поля ниже Type::

enter image description here Это немецкий Excel "Benutzerdefiniert" это "Custom".

Итак, общеепуть: сначала выберите свой специальный формат в диалоговом окне Excel Format Cells - Number.Затем измените категорию на Custom и прочитайте соответствующий шаблон из текстового поля ниже Type:.

Если у вас есть шаблон формата чисел, его можно использовать, используя apache poi следующим образом:

import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

class CreateExcelNumberFormat {

 public static void main(String[] args) throws Exception {

  try (Workbook workbook = new XSSFWorkbook(); 
       FileOutputStream fileout = new FileOutputStream("Excel.xlsx") ) {

   DataFormat format = workbook.createDataFormat();
   CellStyle specialSIN = workbook.createCellStyle();
   specialSIN.setDataFormat(format.getFormat("000\\.00\\.000\\.000"));

   Sheet sheet = workbook.createSheet(); 

   Cell cell = sheet.createRow(0).createCell(0);
   cell.setCellStyle(specialSIN);
   cell.setCellValue(12345678901d);

   sheet.setColumnWidth(0, 14*256);

   workbook.write(fileout);
  }

 }
}

Ваш номер социального страхования для английского языка (Канада) должен быть:

...
specialSIN.setDataFormat(format.getFormat("000 000 000"));
...
cell.setCellValue(46454286);
...
...