SpringBoot结合poi导出excel

1.maven依赖

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

2.controller层

@ApiOperation(value = "导出商品信息", notes = "导出商品信息",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@RequiresPermissions(value = "sys:product:view")
@RequestMapping(value = "export2Excel",method = RequestMethod.POST)
public void export2Excel(ProductQuery query, HttpServletResponse response){
    try {
        productBiz.export2Excel(query,response);
    } catch (Exception e) {
        log.info("导出商品信息出现异常:", e.getMessage());
    }
}

3.biz层

package com.tufire.seller.biz.product;

import com.tufire.common.model.basic.BasicPageList;
import com.tufire.common.util.ExcelUtils;
import com.tufire.common.util.ObjectUtil;
import com.tufire.product.client.ProductClient;
import com.tufire.product.dto.ProductDto;
import com.tufire.product.vo.seller.Product2ExportVo;
import com.tufire.product.vo.seller.ProductVo;
import com.tufire.seller.query.product.ProductQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.util.List;

@Component
public class ProductBiz {
    @Autowired
    private ProductClient productClient;

    public void export2Excel(ProductQuery query, HttpServletResponse response) throws Exception {
        query.setQueryAllFlag(true);
        ProductDto productDto = ObjectUtil.source2Target(query, ProductDto.class);

        BasicPageList<Product2ExportVo> basicPageList = productClient.findList2Export(productDto);
        if (basicPageList != null && !CollectionUtils.isEmpty(basicPageList.getRecords())) {
            List<Product2ExportVo> productList = basicPageList.getRecords();
            productList.stream().forEach(v -> {
                v.setPutawayStatusDesc(v.getPutawayStatus() ? "已上架" : "已下架");
            });

            ExcelUtils.ExportSetInfo<Product2ExportVo> exportSetInfo = new ExcelUtils.ExportSetInfo();
            exportSetInfo.addTitle("商品列表");
            String[] headNames = {"商品名称", "商品编号", "商品分类","关键字","供应商","单位", "上架状态","健康指数","健康评语","创建时间"};
            String[] fieldNames = {"name", "sn", "path", "keywords","supplierName","unit","putawayStatusDesc","healthIndex","healthEvaluation","createdAt"};
            String encodedfileName = "商品列表.xls";
            exportSetInfo.addHeadName(headNames);
            exportSetInfo.addFieldName(fieldNames);
            exportSetInfo.addSheetData("商品列表", productList);
            exportSetInfo.setOut(response.getOutputStream());

            response.setHeader("Content-Disposition", "attachment; filename="+ URLEncoder.encode(encodedfileName, "UTF-8"));

            ExcelUtils.export2ExcelByPojo(exportSetInfo);
        }
    }
}

4.excel操作工具类

package com.tufire.common.util;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class ExcelUtils {
    private static XSSFWorkbook wb;

    private static CellStyle titleStyle; // 标题行样式

    private static Font titleFont; // 标题行字体

    private static CellStyle dateStyle; // 日期行样式

    private static Font dateFont; // 日期行字体

    private static CellStyle headStyle; // 表头行样式

    private static Font headFont; // 表头行字体

    private static CellStyle contentStyle; // 内容行样式

    private static Font contentFont; // 内容行字体

    /**
     * @throws IllegalAccessException
     * @throws IllegalArgumentException
     * @Description: 将Map里的集合对象数据输出Excel数据流
     */
    public static <T> void export2ExcelByPojo(ExportSetInfo<T> setInfo) throws IOException, IllegalArgumentException {
        init();
        Set<Entry<String, List<T>>> set = setInfo.getSheetDataMap().entrySet();
        String[] sheetNames = new String[setInfo.getSheetDataMap().size()];
        int sheetNameNum = 0;
        for (Entry<String, List<T>> entry : set) {
            sheetNames[sheetNameNum] = entry.getKey();
            sheetNameNum++;
        }
        XSSFSheet[] sheets = getSheets(setInfo.getSheetDataMap().size(), sheetNames);

        int sheetNum = 0;
        for (Entry<String, List<T>> entry : set) {
            int rowNum = 2;
            int seq = 1;
            // Sheet
            List<T> objs = entry.getValue();
            // 标题行
            createTableTitleRow(setInfo, sheets, sheetNum);
            // 日期行
            if (setInfo.isDateCols()) {
                rowNum = 3;
                seq = 2;
                createTableDateRow(setInfo, sheets, sheetNum);
            }
            // 表头
            creatTableHeadRow(setInfo, sheets, sheetNum);
            // 表体
            String[] fieldNames = setInfo.getFieldNames().get(sheetNum);
            for (Object obj : objs) {
                XSSFRow contentRow = sheets[sheetNum].createRow(rowNum);
                contentRow.setHeight((short)300);
                XSSFCell[] cells = getCells(contentRow, setInfo.getFieldNames().get(sheetNum).length, seq);
                int cellNum = 1; // 去掉一列序号,因此从1开始
                if (fieldNames != null) {
                    for (int num = 0; num < fieldNames.length; num++) {
                        Object value = ReflectionUtils.invokeGetterMethod(obj, fieldNames[num]);
                        cells[cellNum].setCellValue(value == null ? "" : value.toString());
                        cellNum++;
                    }
                }
                rowNum++;
            }
            adjustColumnSize(sheets, sheetNum, fieldNames); // 自动调整列宽
            sheetNum++;
        }
        wb.write(setInfo.getOut());
    }

    /**
     * @throws IllegalAccessException
     * @throws IllegalArgumentException
     * @Description: 将Map里的集合对象数据输出Excel数据流
     */
    public static void export2ExcelByMap(ExportSetInfo<Map<String, Object>> setInfo) throws IOException, IllegalArgumentException, IllegalAccessException {
        init();
        Set<Entry<String, List<Map<String, Object>>>> set = setInfo.getSheetDataMap().entrySet();
        String[] sheetNames = new String[setInfo.getSheetDataMap().size()];
        int sheetNameNum = 0;
        for (Entry<String, List<Map<String, Object>>> entry : set) {
            sheetNames[sheetNameNum] = entry.getKey();
            sheetNameNum++;
        }
        XSSFSheet[] sheets = getSheets(setInfo.getSheetDataMap().size(), sheetNames);
        int sheetNum = 0;
        for (Entry<String, List<Map<String, Object>>> entry : set) {
            int rowNum = 2;
            int seq = 1;
            // Sheet
            List<Map<String, Object>> objs = entry.getValue();
            // 标题行
            createTableTitleRow(setInfo, sheets, sheetNum);
            // 日期行
            if (setInfo.isDateCols()) {
                rowNum = 3;
                seq = 2;
                createTableDateRow(setInfo, sheets, sheetNum);
            }
            // 表头
            creatTableHeadRow(setInfo, sheets, sheetNum);
            // 表体
            String[] fieldNames = setInfo.getFieldNames().get(sheetNum);
            for (Map<String, Object> obj : objs) {
                XSSFRow contentRow = sheets[sheetNum].createRow(rowNum);
                contentRow.setHeight((short)300);
                XSSFCell[] cells = getCells(contentRow, setInfo.getFieldNames().get(sheetNum).length, seq);
                int cellNum = 1; // 去掉一列序号,因此从1开始
                if (fieldNames != null) {
                    for (int num = 0; num < fieldNames.length; num++) {
                        Object value = obj.get(fieldNames[num]);
                        cells[cellNum].setCellValue(value == null ? "" : value.toString());
                        cellNum++;
                    }
                }
                rowNum++;
            }
            adjustColumnSize(sheets, sheetNum, fieldNames); // 自动调整列宽
            sheetNum++;
        }
        wb.write(setInfo.getOut());
    }

    public static List<String[]> readExcel(String filePath) throws IOException {
        if (!filePath.toLowerCase().startsWith("http")) {
            filePath = "file:///" + filePath;
        }
        URL url = new URL(filePath);
        return readExcel(url.openStream(), filePath);
    }

    /**
     * 用POI读取Excel文件内容
     * @param stream
     * @param fileName
     * @return
     */
    public static List<String[]> readExcel(InputStream stream, String fileName) {
        List<String[]> list = Lists.newArrayList();
        Workbook wb = null;
        Row row = null;
        try {
            if (fileName.endsWith("xls")) {
                wb = new HSSFWorkbook(stream);
            } else if (fileName.endsWith("xlsx")) {
                wb = new XSSFWorkbook(stream);
            } else {
                return list;
            }
            Sheet sheet = wb.getSheetAt(0);
            for (int i = 1; i <= sheet.getLastRowNum(); i++) {// 第一行标题不读取
                row = sheet.getRow(i);
                if (null != row) {
                    int cellSize = row.getPhysicalNumberOfCells();
                    String[] str = new String[cellSize];// 创建一个数组,用来存储每一列的值
                    for (int j = 0; j < cellSize; j++) {
                        str[j] = parseExcel(row.getCell(j)).replaceAll(" ", "");
                    }
                    /* 判断数据是否全部为空 */
                    if (!checkEmpty(str)) {
                        list.add(str);
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (null != wb) {
                try {
                    wb.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != stream) {
                try {
                    stream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return list;
    }

    private static String parseExcel(Cell cell) {
        String result = "";
        if (cell != null) {
            switch (cell.getCellTypeEnum()) {
            case NUMERIC:// 数字类型
                if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
                    SimpleDateFormat sdf = null;
                    if (cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")) {
                        sdf = new SimpleDateFormat("HH:mm:ss");
                    } else {
                        sdf = new SimpleDateFormat("yyyy-MM-dd");
                    }
                    Date date = cell.getDateCellValue();
                    result = sdf.format(date);
                } else if (cell.getCellStyle().getDataFormat() == 58) {
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    double value = cell.getNumericCellValue();
                    Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value);
                    result = sdf.format(date);
                } else {
                    double value = cell.getNumericCellValue();
                    CellStyle style = cell.getCellStyle();
                    DecimalFormat format = new DecimalFormat();
                    String temp = style.getDataFormatString();
                    if (temp.equals("General")) {
                        format.applyPattern("#");
                    }
                    result = format.format(value);
                }
                break;
            case STRING:// String类型
                result = cell.getRichStringCellValue().toString();
                break;
            case BLANK:
                result = "";
            default:
                result = "";
                break;
            }
        }
        return result;
    }

    /**
     * @Description: 初始化
     */
    private static void init() {
        wb = new XSSFWorkbook();

        titleFont = wb.createFont();
        titleStyle = wb.createCellStyle();
        dateStyle = wb.createCellStyle();
        dateFont = wb.createFont();
        headStyle = wb.createCellStyle();
        headFont = wb.createFont();
        contentStyle = wb.createCellStyle();
        contentFont = wb.createFont();

        initTitleCellStyle();
        initTitleFont();
        initDateCellStyle();
        initDateFont();
        initHeadCellStyle();
        initHeadFont();
        initContentCellStyle();
        initContentFont();
    }

    /**
     * @Description: 自动调整列宽
     */
    private static void adjustColumnSize(XSSFSheet[] sheets, int sheetNum, String[] fieldNames) {
        for (int i = 0; i < fieldNames.length + 1; i++) {
            sheets[sheetNum].autoSizeColumn(i, true);
        }
    }

    /**
     * @Description: 创建标题行(需合并单元格)
     */
    private static <T> void createTableTitleRow(ExportSetInfo<T> setInfo, XSSFSheet[] sheets, int sheetNum) {
        CellRangeAddress titleRange = new CellRangeAddress(0, 0, 0, setInfo.getFieldNames().get(sheetNum).length);
        sheets[sheetNum].addMergedRegion(titleRange);
        XSSFRow titleRow = sheets[sheetNum].createRow(0);
        titleRow.setHeight((short)600);
        XSSFCell titleCell = titleRow.createCell(0);
        titleCell.setCellStyle(titleStyle);
        titleCell.setCellValue(setInfo.getTitles().get(sheetNum));
    }

    /**
     * @Description: 创建日期行(需合并单元格)
     */
    private static <T> void createTableDateRow(ExportSetInfo<T> setInfo, XSSFSheet[] sheets, int sheetNum) {
        CellRangeAddress dateRange = new CellRangeAddress(1, 1, 0, setInfo.getFieldNames().get(sheetNum).length);
        sheets[sheetNum].addMergedRegion(dateRange);
        XSSFRow dateRow = sheets[sheetNum].createRow(1);
        dateRow.setHeight((short)350);
        XSSFCell dateCell = dateRow.createCell(0);
        dateCell.setCellStyle(dateStyle);
        dateCell.setCellValue(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
    }

    /**
     * @Description: 创建表头行(需合并单元格)
     */
    private static <T> void creatTableHeadRow(ExportSetInfo<T> setInfo, XSSFSheet[] sheets, int sheetNum) {
        // 表头
        XSSFRow headRow = sheets[sheetNum].createRow(setInfo.isDateCols() ? 2 : 1);
        headRow.setHeight((short)350);
        // 序号列
        XSSFCell snCell = headRow.createCell(0);
        snCell.setCellStyle(headStyle);
        snCell.setCellValue("No.");

        // 列头名称
        for (int num = 1, len = setInfo.getHeadNames().get(sheetNum).length; num <= len; num++) {
            XSSFCell headCell = headRow.createCell(num);
            headCell.setCellStyle(headStyle);
            headCell.setCellValue(setInfo.getHeadNames().get(sheetNum)[num - 1]);
        }
    }

    /**
     * @Description: 创建所有的Sheet
     */
    private static XSSFSheet[] getSheets(int num, String[] names) {
        XSSFSheet[] sheets = new XSSFSheet[num];
        for (int i = 0; i < num; i++) {
            sheets[i] = wb.createSheet(names[i]);
        }
        return sheets;
    }

    /**
     * @Description: 创建内容行的每一列(附加一列序号)
     */
    private static XSSFCell[] getCells(XSSFRow contentRow, int num, int seq) {
        XSSFCell[] cells = new XSSFCell[num + 1];

        for (int i = 0, len = cells.length; i < len; i++) {
            cells[i] = contentRow.createCell(i);
            cells[i].setCellStyle(contentStyle);
        }
        // 设置序号列值,因为出去标题行和日期行,所有-2
        cells[0].setCellValue(contentRow.getRowNum() - seq);

        return cells;
    }

    /**
     * @Description: 初始化标题行样式
     */
    private static void initTitleCellStyle() {
        titleStyle.setAlignment(HorizontalAlignment.CENTER);
        titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        titleStyle.setFont(titleFont);
        titleStyle.setFillBackgroundColor(IndexedColors.BLACK.index);
    }

    /**
     * @Description: 初始化日期行样式
     */
    private static void initDateCellStyle() {
        dateStyle.setAlignment(HorizontalAlignment.LEFT);
        dateStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        dateStyle.setFont(dateFont);
        dateStyle.setFillBackgroundColor(IndexedColors.BLACK.index);
    }

    /**
     * @Description: 初始化表头行样式
     */
    private static void initHeadCellStyle() {
        headStyle.setAlignment(HorizontalAlignment.CENTER);
        headStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        headStyle.setFont(headFont);
        headStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        headStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
        setCrllStyle(headStyle);
    }

    /**
     * @Description: 初始化内容行样式
     */
    private static void initContentCellStyle() {
        contentStyle.setAlignment(HorizontalAlignment.CENTER);
        contentStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        contentStyle.setFont(contentFont);
        setCrllStyle(contentStyle);
        contentStyle.setWrapText(true); // 字段换行
    }

    private static void setCrllStyle(CellStyle cellSyle) {
        cellSyle.setBorderTop(BorderStyle.THIN);
        cellSyle.setBorderBottom(BorderStyle.THIN);
        cellSyle.setBorderLeft(BorderStyle.THIN);
        cellSyle.setBorderRight(BorderStyle.THIN);
        cellSyle.setTopBorderColor(IndexedColors.BLACK.index);
        cellSyle.setBottomBorderColor(IndexedColors.BLACK.index);
        cellSyle.setLeftBorderColor(IndexedColors.BLACK.index);
        cellSyle.setRightBorderColor(IndexedColors.BLACK.index);
    }

    /**
     * @Description: 初始化标题行字体
     */
    private static void initTitleFont() {
        titleFont.setFontName("华文楷体");
        titleFont.setFontHeightInPoints((short)16);
        titleFont.setBold(true);
        titleFont.setCharSet(Font.DEFAULT_CHARSET);
        titleFont.setColor(IndexedColors.BLACK.index);
    }

    /**
     * @Description: 初始化日期行字体
     */
    private static void initDateFont() {
        dateFont.setFontName("隶书");
        dateFont.setFontHeightInPoints((short)10);
        dateFont.setBold(true);
        dateFont.setCharSet(Font.DEFAULT_CHARSET);
        dateFont.setColor(IndexedColors.BLACK.index);
    }

    /**
     * @Description: 初始化表头行字体
     */
    private static void initHeadFont() {
        headFont.setFontName("宋体");
        headFont.setFontHeightInPoints((short)10);
        headFont.setBold(true);
        headFont.setCharSet(Font.DEFAULT_CHARSET);
        headFont.setColor(IndexedColors.BLACK.index);
    }

    /**
     * @Description: 初始化内容行字体
     */
    private static void initContentFont() {
        contentFont.setFontName("宋体");
        contentFont.setFontHeightInPoints((short)10);
        contentFont.setBold(false);
        contentFont.setCharSet(Font.DEFAULT_CHARSET);
        contentFont.setColor(IndexedColors.BLACK.index);
    }

    private static boolean checkEmpty(String[] datas) {
        boolean result = true;
        for (String data : datas) {
            result = result && StringUtils.isEmpty(data);
            if (!result) {
                break;
            }
        }
        return result;
    }

    public static class ExportSetInfo<T> {

        private Map<String, List<T>> sheetDataMap = Maps.newLinkedHashMap();

        private List<String> titles = Lists.newArrayList();

        private List<String[]> headNames = Lists.newArrayList();

        private List<String[]> fieldNames = Lists.newArrayList();

        private boolean dateCols = false;

        private OutputStream out;

        /**
         * @param title 对应每个sheet里的标题,即顶部大字
         */
        public void addTitle(String title) {
            this.titles.add(title);
        }

        /**
         * 对应每个页签的表头的每一列的名称
         * @param headName
         */
        public void addHeadName(String[] headName) {
            this.headNames.add(headName);
        }

        /**
         * @param fieldName 对应每个sheet里的每行数据的对象的属性名称
         */
        public void addFieldName(String[] fieldName) {
            this.fieldNames.add(fieldName);
        }

        /**
         * @param sheetName sheet名称
         * @param objs 导出数据泛型 String : 代表sheet名称 List : 代表单个sheet里的所有行数据
         */
        public void addSheetData(String sheetName, List<T> objs) {
            this.sheetDataMap.put(sheetName, objs);
        }

        public List<String> getTitles() {
            return titles;
        }

        public List<String[]> getHeadNames() {
            return headNames;
        }

        public List<String[]> getFieldNames() {
            return fieldNames;
        }

        public Map<String, List<T>> getSheetDataMap() {
            return sheetDataMap;
        }

        public boolean isDateCols() {
            return dateCols;
        }

        public void setDateCols(boolean dateCols) {
            this.dateCols = dateCols;
        }

        public OutputStream getOut() {
            return out;
        }

        public void setSheetDataMap(Map<String, List<T>> sheetDataMap) {
            this.sheetDataMap.putAll(sheetDataMap);
        }

        public void setTitles(List<String> titles) {
            this.titles.addAll(titles);
        }

        public void setHeadNames(List<String[]> headNames) {
            this.headNames.addAll(headNames);
        }

        public void setFieldNames(List<String[]> fieldNames) {
            this.fieldNames.addAll(fieldNames);
        }

        /**
         * @param out Excel数据将输出到该输出流
         */
        public void setOut(OutputStream out) {
            this.out = out;
        }
    }
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Boot使用POI导出Excel可以分为以下几个步骤: 1. 添加POI依赖 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 2. 创建Excel文件 使用POI创建Excel文件,可以参考以下代码: ``` Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); Row row = sheet.createRow(); Cell cell = row.createCell(); cell.setCellValue("Hello World"); ``` 3. 导出Excel文件 使用Java IO流将Excel文件导出,可以参考以下代码: ``` response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment;filename=test.xlsx"); workbook.write(response.getOutputStream()); ``` 其中,response是HttpServletResponse对象,用于设置响应头信息。 完整的代码示例可以参考以下链接: https://www.cnblogs.com/zhengbin/p/11210297.html ### 回答2: Springboot是一个非常流行的框架,它提供了很多便利的功能来帮助开发人员快速开发应用程序。其中一个功能是使用POI库来导出Excel文件。POI是一个Java库,提供了读写Microsoft Office格式文件的功能,包括Excel和Word。在本文中,我们将学习如何使用SpringbootPOI库来导出Excel文件。 首先,我们需要在pom.xml文件中添加POI和其他必要的依赖项。以下是一个简单的pom.xml文件中的依赖项列表: ``` <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>5.0.0</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.0.0</version> </dependency> </dependencies> ``` 接下来,我们需要创建一个Controller类来处理Excel文件的导出请求。以下是一个示例Controller类: ``` @RestController public class ExcelController { @GetMapping("/export-excel") public void exportExcel(HttpServletResponse response) throws IOException { response.setContentType("application/vnd.ms-excel"); response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"example.xlsx\""); Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Example Sheet"); Row header = sheet.createRow(0); header.createCell(0).setCellValue("Column 1"); header.createCell(1).setCellValue("Column 2"); Row data = sheet.createRow(1); data.createCell(0).setCellValue("Data 1"); data.createCell(1).setCellValue("Data 2"); workbook.write(response.getOutputStream()); } } ``` 上面的代码中,我们创建了一个GET请求处理程序来导出Excel文件。首先,我们设置响应内容类型为“application/vnd.ms-excel”,该类型用于Excel文件。然后,我们设置响应头,指定文件的名称和类型,以便浏览器可以显示一个下载对话框。 接下来,我们创建一个Workbook对象和一个Sheet对象。在示例中,我们使用XSSFWorkbook和Sheet.createSheet方法创建一个名为“Example Sheet”的工作表。然后,我们创建一个标题行并设置两个列:“Column 1”和“Column 2”文件。接下来,我们创建一个数据行,并使用setCellValue方法在两个单元格中设置值,“Data 1”和“Data 2”。最后,我们将Workbook对象写入response的输出流,从而将Excel文件发送给用户。 总的来说,使用SpringbootPOI导出Excel文件非常简单。我们只需要创建一个Controller类来处理请求和Workbook对象并将其写入响应输出流即可。此外,我们可以更改工作表的样式和内容,以便输出所需的格式。 ### 回答3: SpringBoot作为一款非常流行的Java Web框架,提供了非常多的便捷工具和模块,其中就包括了POI库,让我们可以非常方便地进行Excel文件的导入和导出。下面我将介绍如何使用SpringBootPOI库进行Excel文件的导出。 首先,在pom.xml文件中,我们需要导入POI库的依赖,如下所示: ``` <!-- poi 依赖 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <!-- poi-ooxml 依赖 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 这样我们就可以使用POI库提供的工具类进行Excel文件的读写操作了。 接下来,我们需要编写一个Controller来处理Excel文件的导出请求。在Controller中,我们需要使用POI库创建一个Workbook对象,然后在Workbook中添加数据,最后通过Response将Excel文件输出给客户端。下面是一个示例代码。 ``` @RestController public class ExcelController { @GetMapping("/export") public void exportExcel(HttpServletResponse response) { try { // 创建工作簿 Workbook workbook = new XSSFWorkbook(); // 创建表格 Sheet sheet = workbook.createSheet("测试表"); // 添加表头 Row header = sheet.createRow(0); header.createCell(0).setCellValue("姓名"); header.createCell(1).setCellValue("年龄"); // 添加数据 Row row = sheet.createRow(1); row.createCell(0).setCellValue("张三"); row.createCell(1).setCellValue(20); // 输出Excel文件 response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment;filename=test.xlsx"); workbook.write(response.getOutputStream()); workbook.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在上述代码中,我们创建了一个名为"测试表"的表格,在表格中添加了表头和数据。最后,我们将Excel文件输出给客户端,通过设置response的ContentType和Content-Disposition实现自动下载。 总之,SpringBootPOI库提供了非常便捷的Excel文件导出功能,我们可以在Controller中轻松地创建Workbook对象、添加数据并输出给客户端。这样就可以很方便地实现数据报表的导出功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值