Создать файл Excel с оглавлением Spring boot java - PullRequest
0 голосов
/ 04 февраля 2020

Я технически знаю, как создать xls с листа. Но у меня проблема с созданием оглавления для каждого листа в моем Excel.

Пример ниже этого сообщения. Как вы можете видеть, есть имя листа и строки с соответствующим именем листа (например, Sheet1, Sheet2). Есть ли возможный синтаксис, где я могу связать Sheet1 с Sheet1?

Спасибо

enter image description here

1 Ответ

0 голосов
/ 05 февраля 2020

На скриншоте показаны гиперссылки типа HyperlinkType.DOCUMENT . Есть HyperlinkExample.java в https://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/xssf/usermodel/examples/. Также показано, как создать гиперссылку на целевой лист и ячейку в одной и той же книге.

Что вам необходимо знать, чтобы создать то, что показывает ваш скриншот:

Создание книги, листов , строки и ячейки. Настройка содержимого ячейки. Настройка автофильтра. Установка ширины столбцов.

Все это показано в Руководстве для занятых разработчиков по функциям HSSF и XSSF . Полные примеры для большинства из этого также в https://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/xssf/usermodel/examples/ и / или в https://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/hssf/usermodel/examples/.

Полный пример создания именно того, что показывает ваш скриншот:

import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.common.usermodel.HyperlinkType;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

class CreateExcelLinkedSheetsTOC {

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

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

   // we need creation helber for creating the links
   CreationHelper creationHelper = workbook.getCreationHelper();

   // hyperlink cell style
   CellStyle hlink_style = workbook.createCellStyle();
   Font hlink_font = workbook.createFont();
   hlink_font.setUnderline(Font.U_SINGLE);
   hlink_font.setColor(IndexedColors.BLUE.getIndex());
   hlink_style.setFont(hlink_font);

   // create 6 sheets
   Sheet sheet = null;
   for (int i = 1; i < 7; i++) {
    sheet = workbook.createSheet("Sheet" + i);
   }
   // create sheet "Source" as the 7th sheet
   sheet = workbook.createSheet("Source");

   // create sheet "Table of Contents"
   sheet = workbook.createSheet("Table of Contents");
   // unselect first sheet
   workbook.getSheetAt(0).setSelected(false);
   // make "Table of Contents" the new first sheet
   workbook.setSheetOrder("Table of Contents", 0);
   // make "Table of Contents" the active sheet
   workbook.setActiveSheet(0);
   // create header row
   Row row = sheet.createRow(0);
   Cell cell = row.createCell(1);
   cell.setCellValue("#");
   cell = row.createCell(2);
   cell.setCellValue("Sheet Name");

   // create content rows
   String sheetName = "";
   Hyperlink link = null;
   int numberOfSheets = workbook.getNumberOfSheets();
   for (int i = 1; i < numberOfSheets; i++) {
    row = sheet.createRow(i);
    cell = row.createCell(1);
    cell.setCellValue(i);
    cell = row.createCell(2);
    sheetName = workbook.getSheetName(i);
    cell.setCellValue(sheetName);
    // create hyperlink to cell A1 in sheet with sheetName
    link = creationHelper.createHyperlink(HyperlinkType.DOCUMENT);
    link.setAddress("'" + sheetName + "'!A1");
    cell.setHyperlink(link);
    // style the link cell
    cell.setCellStyle(hlink_style);
   }

   // set AutoFilter as shown in image
   sheet.setAutoFilter(new CellRangeAddress(
    0, numberOfSheets-1, 1, 2)
   );

   // set column widths
   sheet.setColumnWidth(0, 5 * 256);
   sheet.setColumnWidth(1, 5 * 256);
   sheet.setColumnWidth(2, 15 * 256);

   workbook.write(fileout);
  }
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...