Несколько групп столбцов в Excel с Apache Poi - PullRequest
0 голосов
/ 02 ноября 2018

Я использую apache poi версии 4.0.0 и пытаюсь создать много групп столбцов, как показано на рисунке ниже: Я не знаю, возможно ли это с помощью poi.

enter image description here

Я пробовал с XSSFSHeet.groupColumn() методом внутри цикла.

            int indexColumnMonth = INDEX_START_RESULTS;
            for(int i =0; i< meses.size(); i++) {
                int columnFim = indexColumnMonth + (turmas.size());
                planilha.groupColumn(indexColumnMonth, columnFim);
                indexColumnMonth = columnFim +1;
            }

Но в результате получается лист с одной группой столбцов, которые получают все столбцы. Я проверил, правильно ли сгенерированы позиции, но это правильно.

Есть ли способ сделать это с помощью POI?

1 Ответ

0 голосов
/ 03 ноября 2018

[Стартовый режим, режим: саркастический] Как часто не хватает понимания того, как работает Excel. Многие программисты, кажется, думают, что могут программировать Excel функциональные возможности, не зная Excel. Они могут подумать: «Excel зачем мне это? Я программист, а не офисный работник». Но для программирования Excel функциональных возможностей сначала нужно знать Excel. Там нет пути вокруг. [/ rant end]

Если вы открываете файл Excel, показанный на вашей картинке в графическом интерфейсе Excel, и нажимаете на первую - над J, тогда J часть группы ? Нет. И это часть второй группы? Нет это тоже нет. Это связано с тем, что между отдельными группами столбцов должен быть хотя бы один столбец, если они отображаются так, как показано на рисунке.

Итак, как показано на вашей картинке, вы сгруппировали E:I, K:O и Q:U.

Источник:

enter image description here

Код:

import org.apache.poi.ss.usermodel.*;

import java.io.FileInputStream;
import java.io.FileOutputStream;

class ExcelGroupColumns {

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

  FileInputStream in = new FileInputStream("Test.xlsx");
  Workbook workbook = WorkbookFactory.create(in);

  Sheet sheet = workbook.getSheetAt(0);

  int firstColumn = 4;
  int countGoupedColumns = 5;
  int countGroups = 3;

  for (int i = 0; i < countGroups; i++) {
   sheet.groupColumn(firstColumn, firstColumn + countGoupedColumns - 1);
   firstColumn += countGoupedColumns + 1;
  }

  FileOutputStream out = new FileOutputStream("Test_1.xlsx");
  workbook.write(out);
  out.close();
  workbook.close();

 }
}

Результат:

enter image description here

...