首页 > 编程语言 >Java将数据导出为Excel文件

Java将数据导出为Excel文件

时间:2024-08-26 17:54:29浏览次数:6  
标签:headerRow java 导出 Excel new workbook Java import sheet

使用Apache POI生成基本Excel

Apache POI是一个强大的Java库,用来处理Microsoft Office文件。对于Excel文件(.xls和.xlsx)处理,提供有HSSF(.xls)和XSSF(.xlsx)等API。

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;

public void createExcelTemplate(HttpServletResponse response) {
    Workbook workbook = new XSSFWorkbook(); // 创建一个工作簿
    Sheet sheet = workbook.createSheet("Template"); // 创建一个工作表

    // 创建表头行
    Row headerRow = sheet.createRow(0);
    headerRow.createCell(0).setCellValue("ID");
    headerRow.createCell(1).setCellValue("Name");
    headerRow.createCell(2).setCellValue("Email");

    // 设置响应头信息
    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setHeader("Content-Disposition", "attachment; filename=ExportTemplate.xlsx");

    try (OutputStream outputStream = response.getOutputStream()) {
        workbook.write(outputStream); // 写入输出流
        workbook.close(); // 关闭工作簿
    } catch (IOException e) {
        throw new RuntimeException("Error while writing Excel file", e);
    }
}
使用Apache POI进行复杂的格式设定

随着需求的复杂化,可能需要设置单元格样式、数据格式、合并单元格等。

import org.apache.poi.ss.usermodel.*; // 引入所有需要的包
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddress;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;

public void createComplexExcelTemplate(HttpServletResponse response) {
    Workbook workbook = new XSSFWorkbook();
    Sheet sheet = workbook.createSheet("ComplexTemplate");

    // 创建样式
    CellStyle headerStyle = workbook.createCellStyle();
    headerStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
    
    Row headerRow = sheet.createRow(0);
    headerRow.createCell(0).setCellValue("No.");
    headerRow.createCell(1).setCellValue("Name");
    // 应用样式
    for (Cell cell : headerRow) {
        cell.setCellStyle(headerStyle);
    }

    // 合并单元格
    sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 1));

    // 设置响应头
    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setHeader("Content-Disposition", "attachment; filename=ComplexExportTemplate.xlsx");
    try (OutputStream outputStream = response.getOutputStream()) {
        workbook.write(outputStream);
        workbook.close();
    } catch (IOException e) {
        throw new RuntimeException("Error writing Excel file", e);
    }
}
使用EasyExcel处理大数据

对于大数据和大规模用户下载场景,Apache POI在内存消耗和效率上存在短板。这时,可以使用针对Java的高效Excel读写库EasyExcel。

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.metadata.WriteSheet;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

// 创建Excel数据模型
public static class Data {
    private String id; // User ID
    private String name; // User Name
    private String email; // Email

    // getters and setters
}

public ResponseEntity<ByteArrayResource> createExcelTemplateEasyExcel() {
    // 创建测试数据
    List<Data> data = new ArrayList<>();
    // 添加数据到list

    ByteArrayOutputStream os = new ByteArrayOutputStream();
    EasyExcel.write(os, Data.class).sheet("Template")
        .doWrite(data); // 写入数据

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    headers.setContentDispositionFormData("attachment", "DataTemplate.xlsx");

    // 这里使用ByteArrayResource是因为我们不需要流暴露在外部
    return ResponseEntity.ok().headers(headers).contentLength(os.size())
        .body(new ByteArrayResource(os.toByteArray()));
}

标签:headerRow,java,导出,Excel,new,workbook,Java,import,sheet
From: https://blog.csdn.net/weixin_42564451/article/details/141570183

相关文章

  • Java使用EasyExcel导出图片(原比例大小)到Excel中
    EasyExcel导出图片又开始写Excel导出的需求了,哈哈哈……目前的需求是将图表分析对的饼图和折线图,也就是一张完整的图片单独导出到Excel中为了方便客户在业务报告时,可以使用数据分析图片,从而更清晰准确地展示数据趋势因此关键点是将图片原比例尺寸大小导出,不能进行压缩原数......
  • java+vue计算机毕设特色农产品销售系统【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和互联网普及率的不断提高,电子商务已成为推动传统产业升级转型的重要力量。在农业领域,特色农产品的销售长期面临信息不对称、......
  • java+vue计算机毕设天津市为民律师事务所信息管理系统【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在信息化高速发展的今天,律师事务所作为法律服务的重要提供者,其内部管理与服务效率直接影响到客户体验及行业竞争力。天津市为民律师事务所作为本地区......
  • java+vue计算机毕设天润方便面厂生产管理系统【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在快速消费品行业,方便面作为便捷食品的代表,其市场需求持续旺盛。随着消费者口味的多样化及健康意识的提升,方便面生产企业面临着产品创新、成本控制及......
  • 怎样才算精通 Excel?
    最强AI视频生成:小说文案智能分镜+智能识别角色和场景+批量Ai绘图+自动配音添加音乐+一键合成视频+百万播放量https://aitools.jurilu.com/高赞回答很系统,但普通人这么学,没等精通先学废了!4年前,我为了学数据分析,先买了Excel通识课,后来又买了高阶数据分析课。从基本Excel技巧,讲......
  • 【JavaScript】String常用方法
    String的常用方法长度s.length拼接字符串s.concat('内容','可拼接多个'),或者使用+号链接符,返回一个新字符串位置查找字符串方法;返回字符​查找某位置上的字符s.charAt(下标)返回该下标位置上的字符,未找到返回空白​返回某位置上的字符s[下标](只读,不能赋值),不支......
  • JavaScript 对象访问器
    JavaScript访问器(Getter和Setter)Getter和Setter允许您定义对象访问器(被计算的属性)。<!DOCTYPEhtml><htmllang="en"><body><pid="demo"></p><script>constperson={nama:"DianDi......
  • [javascript] 使用 puppeteer 包模拟 chrome 自动化
    npmipuppeteerconstpuppeteer=require('puppeteer');functionsleep(ms){returnnewPromise(resolve=>setTimeout(resolve,ms));}asyncfunctionrun(){constbrowser=awaitpuppeteer.launch({headless:false,args:['--st......
  • JavaEE的开发环境搭建
    目录一.服务器 1)概念 2)安装二.创建web后端项目 1.在idea中创建JavaEE,设置Tomcat 2.创建简单项目 JavaEE(web后端)程序需要运行在服务器中,这样前端才能访问得到一.服务器  1)概念  解释1:服务器就是一款软件,可以向其发送请求,服务器会做出一个响应......
  • 已解决:`javax.security.auth.RefreshFailedException` 刷新失败的正确解决方法,亲测有
    在Java开发中,javax.security.auth.RefreshFailedException异常通常涉及到安全认证和授权机制。这个异常通常在尝试刷新或更新认证凭证时出现问题,可能会影响到应用的安全性和稳定性。本文将详细分析该异常的原因,并提供有效的解决方法。1.问题描述javax.security.auth.R......