[Java] Verwenden Sie POI, um Excel entsprechend dem Vorlagenstil zu exportieren

1. Szene

Basierend auf dem Vorlagenstil nach Excel exportieren.

2. Erkenntnis

Zunächst benötigen Sie natürlich eine Excel-Vorlage, und der Excel-Stil wird mit WPS usw. festgelegt.
Dann folgt die Implementierung des Codes. Stellen Sie zunächst die Abhängigkeiten von POI vor:

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
        </dependency>

Dann gibt es noch den Code in der Implementierungsmethode. Definieren Sie zunächst die Antwortinformationen:

		HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
		// 设置响应类型
		response.setContentType("application/vnd.ms-excel");
		// 设置字符编码
		response.setCharacterEncoding("utf-8");
		// 设置响应头信息
		response.setHeader("Content-Disposition", "attachment; filename="文件名.xlsx", "utf-8"));

Konvertieren Sie dann die Excel-Vorlage in einen Eingabestream. Es gibt viele Möglichkeiten, diesen Schritt umzusetzen. Die konkrete Auswahl ist von Person zu Person unterschiedlich. Ich gebe hier ein Beispiel:

		org.springframework.core.io.Resource resource = new ClassPathResource("templates/文件名.xlsx");
		@Cleanup InputStream inputStream = resource.getInputStream();
		ServletOutputStream outputStream = response.getOutputStream();

Dann holen Sie sich die Excel-Vorlagendaten:

		XSSFWorkbook workbook = new XSSFWorkbook(inputStream); // 传入上一步转换的输入流
		Sheet sheet = workbook.getSheetAt(0); // 拿到excel模板的sheet页

Nachdem wir die Excel-Vorlagendaten erhalten haben, dürfen wir sie nicht so exportieren, wie sie sind, sonst können wir sie einfach direkt über io ausgeben. Der nächste Schritt besteht darin, die Excel-Vorlagendaten zu bearbeiten und sie in das Excel zu konstruieren, das wir exportieren möchten. Ich kombiniere hier nur einige allgemeine Vorgänge. Die spezifischen Vorgänge können entsprechend den persönlichen Umständen kombiniert werden:

	/**
	 * 修改某单元格的值,先获取y行再获取y行的x列,然后修改值
	 *
	 * x(列,从0开始计数)
	 * y(行,从0开始计数)
	 * value(修改值)
	 */
	sheet.getRow(y).getCell(x).setCellValue(value);

	/**
	 * 插入n行,首先用shiftRows方法将插入位置后面的数据都向下移动n行
	 * 然后循环用createRow方法构造当前行,并用setHeightInPoints方法设置行高
	 * 最后循环用createCell方法构造当前行的列
	 *
	 * startRow(插入位置的下一行,从0开始计数)
	 * endRow(excel表末尾行,从0开始计数)
	 * startColumn(插入行的开始列,从0开始计数)
	 * endColumn(插入行的结束列,从0开始计数)
	 * rowNum(插入行数)
	 * rowHeight(插入行高)
	 */
	sheet.shiftRows(startRow, endRow, rowNum, true, false);
	for (int i = 0; i < rowNum; i++) {
		Row itemRow = sheet.createRow(startRow + i);
		itemRow.setHeightInPoints(rowHeight);
		for (int j = startColumn; j < endColumn + 1; j++) {
			itemRow.createCell(j);
		}
	}

	/**
	 * 得到某单元格的样式,先获取y行再获取y行的x列,然后得到样式
	 *
	 * x(列,从0开始计数)
	 * y(行,从0开始计数)
	 */
	 CellStyle style = sheet.getRow(y).getCell(x).getCellStyle();

	/**
	 * 修改某单元格的样式,先获取y行再获取y行的x列,然后修改样式
	 *
	 * x(列,从0开始计数)
	 * y(行,从0开始计数)
	 * style(修改样式)
	 */
	 sheet.getRow(y).getCell(x).setCellStyle(style);

	/**
	 * 合并单元格
	 *
	 * startRow(开始行,从0开始计数)
	 * endRow(结束行,从0开始计数)
	 * startColumn(开始列,从0开始计数)
	 * endColumn(结束列,从0开始计数)
	 */
	 sheet.addMergedRegion(new CellRangeAddress(startRow, endRow, startColumn, endColumn));

Endlich Ausgabe von Excel:

	 workbook.write(outputStream);

3. Zusammenfassung

  1. Die Zusammenfassung der Excel-Tabelle in ein Koordinatendiagramm mit der xy-Achse erleichtert das Verständnis der Funktionsweise von POI. Die y-Achse entspricht den Zeilen, die x-Achse entspricht den Spalten und jede Zelle hat eine xy-Koordinate.
  2. Die Zelle ist das eigentliche bedienbare Objekt und die Zeilen und Spalten werden nur zur Lokalisierung der Zellenposition verwendet. Daher müssen Sie nach dem Hinzufügen von Zeilen eine Schleife entsprechend der Anzahl der Spalten durchführen, um Zellen hinzuzufügen.
  3. Die neu hinzugefügten Zellen haben keine Stile. Sie können die Stile anderer Zellen abrufen und ihnen zuweisen.
  4. Wenn es nicht darum geht, der Vorlage neue Zeilen oder Spalten hinzuzufügen, reicht es aus, den Zellenwert zu ändern. Schließlich kann der Zellenstil zunächst in WPS festgelegt werden.

Guess you like

Origin blog.csdn.net/qq_45050480/article/details/128579776