21xrx.com
2024-09-17 04:43:08 Tuesday
登录
文章检索 我的文章 写文章
Java实现Excel导出工具类,附带代码案例
2023-06-13 18:45:20 深夜i     --     --
Java Excel 工具类

Excel作为一种常用的电子表格软件,被广泛应用于数据统计、报表分析等领域。而在Java中,我们通常需要将数据以Excel表格的形式导出,以方便查看和使用。于是,开发一款Excel导出工具类就显得尤为重要。

下面,我们将使用Java语言开发一款Excel导出工具类,并提供代码案例供大家参考。

首先,我们需要准备好以下工具类:

apache POI库:Java编写的操作Office文档的开源库,包括对Excel、Word和PowerPoint等文档的读写操作。

jxl库:Java编写的操作Excel表格的库,支持Excel的读写、格式设置、图表操作等。

接下来,我们将以apache POI库为例,编写一个Excel导出工具类的代码。具体实现过程如下:


package com.example.util;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.List;

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

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

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

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

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

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

import org.apache.poi.xssf.usermodel.XSSFCellStyle;

import org.apache.poi.xssf.usermodel.XSSFColor;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelExportUtil {

  /**

   * 导出Excel文件

   *

   * @param headers

   *      Excel文件的表头

   * @param dataList

   *      Excel文件的内容

   * @param filePath

   *      需要导出的Excel文件路径

   */

  public static void exportExcel(String[] headers, List dataList, String filePath) {

    try (Workbook workbook = new XSSFWorkbook(); FileOutputStream fos = new FileOutputStream(filePath)) {

      // 创建一个工作表

      Sheet sheet = workbook.createSheet();

      workbook.setSheetName(0, "Sheet1");

      // 设置表头样式

      CellStyle headerStyle = getHeaderStyle(workbook);

      // 创建表头行

      Row headerRow = sheet.createRow(0);

      for (int i = 0; i < headers.length; i++) {

        Cell cell = headerRow.createCell(i, CellType.STRING);

        cell.setCellValue(headers[i]);

        cell.setCellStyle(headerStyle);

      }

      // 设置数据样式

      CellStyle dataStyle = getDataStyle(workbook);

      // 添加数据行

      for (int i = 0; i < dataList.size(); i++) {

        Object[] rowObject = dataList.get(i);

        Row row = sheet.createRow(i + 1);

        for (int j = 0; j < rowObject.length; j++) {

          Cell cell = row.createCell(j, CellType.STRING);

          cell.setCellValue(rowObject[j] == null ? "" : rowObject[j].toString());

          cell.setCellStyle(dataStyle);

        }

      }

      // 自适应列宽

      for (int i = 0; i < headers.length; i++) {

        sheet.autoSizeColumn(i);

      }

      // 写入文件

      workbook.write(fos);

    } catch (IOException e) {

      throw new RuntimeException("导出Excel文件出错", e);

    }

  }

  /**

   * 设置表头样式

   *

   * @param workbook

   *      Excel工作薄

   * @return 表头样式

   */

  private static CellStyle getHeaderStyle(Workbook workbook) {

    Font font = workbook.createFont();

    font.setFontName("微软雅黑");

    font.setBold(true);

    font.setColor(IndexedColors.BLACK.getIndex());

    font.setFontHeightInPoints((short) 16);

    XSSFCellStyle style = (XSSFCellStyle) workbook.createCellStyle();

    style.setBorderBottom(BorderStyle.THIN);

    style.setBorderLeft(BorderStyle.THIN);

    style.setBorderRight(BorderStyle.THIN);

    style.setBorderTop(BorderStyle.THIN);

    style.setAlignment(HorizontalAlignment.CENTER);

    style.setVerticalAlignment(VerticalAlignment.CENTER);

    style.setFillForegroundColor(new XSSFColor(new byte[] { (byte) 216, (byte) 216, (byte) 216 }, null));

    style.setFillPattern(FillPatternType.SOLID_FOREGROUND);

    style.setFont(font);

    return style;

  }

  /**

   * 设置数据样式

   *

   * @param workbook

   *      Excel工作薄

   * @return 数据样式

   */

  private static CellStyle getDataStyle(Workbook workbook) {

    Font font = workbook.createFont();

    font.setFontName("微软雅黑");

    font.setColor(IndexedColors.BLACK.getIndex());

    font.setFontHeightInPoints((short) 14);

    XSSFCellStyle style = (XSSFCellStyle) workbook.createCellStyle();

    style.setBorderBottom(BorderStyle.THIN);

    style.setBorderLeft(BorderStyle.THIN);

    style.setBorderRight(BorderStyle.THIN);

    style.setBorderTop(BorderStyle.THIN);

    style.setAlignment(HorizontalAlignment.CENTER);

    style.setVerticalAlignment(VerticalAlignment.CENTER);

    style.setWrapText(true);

    style.setFont(font);

    return style;

  }

}

在上述代码中,我们使用了apache POI库提供的Workbook类创建了一个Excel工作薄,然后通过工作薄创建一个工作表Sheet,最后设置表头样式和数据样式,并将数据写入到工作表中。其中,数据行数由传入的数据列表决定,在写入数据的时候,我们使用了传入的数据行数动态创建行,根据数据列表的列数动态创建单元格。

现在,我们就可以根据自己的需要,调用ExcelExportUtil类中的exportExcel方法,将数据导出到Excel文件中。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复