Java POI 导出EXCEL经典实现
发布日期:2021-05-19 16:42:52 浏览次数:18 分类:精选文章

本文共 5988 字,大约阅读时间需要 19 分钟。

在Web开发中,数据的导入和导出是经常需要完成的任务。特别是在需要生成报表或进行文件运输出的时候,导出功能尤为重要。数据导出的格式通常包括EXCEL和PDF等,这里我们将重点介绍如何利用开源组件Apache POI实现数据的动态导出。以下将详细介绍如何将Java对象动态转换为EXCEL文件,并为用户提供一套完整的解决方案。

导出EXCEL文件的实现

基本准备

首先,我们需要选择一个适合Excel文件操作的开源组件。在这里,我们选择了Apache POI(Palo Alto InvestigaTion)作为工具。POI是一个功能强大的组件,支持多种文件格式的处理,包括EXCEL。为了使用POI,需要下载对应的jar包,建议使用版本3.0.2。将相关jar包放在Java项目的类路径中。

代码结构

为了实现通用的Excel导出功能,我们可以创建一个简单的Java类ExportExcel,这个类能够接受任意符合JavaBean风格的对象,并将其导出为Excel文件。以下是该类的大致结构:

import java.util.ArrayList;
import java.util.Date;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFComment;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Method;
import java.lang.reflect.Field;
public class ExportExcel {
public void exportExcel(String title, String[] headers, ArrayList
dataset, OutputStream out) {
try {
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet(title);
sheet.setDefaultColumnWidth((short) 15);
// 添加样式设置
HSSFCellStyle style = workbook.createCellStyle();
style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 添加字体设置
HSSFFont font = workbook.createFont();
font.setColor(HSSFColor.VIOLET.index);
font.setFontHeightInPoints((short) 12);
font.set Boldweight(HSSFFont.BOLDWEIGHT_BOLD);
style.setFont(font);
// 遍历集合数据
Iterator it = dataset.iterator();
int index = 0;
while (it.hasNext()) {
index++;
Row row = sheet.createRow(index);
Object t = it.next();
// 获取JavaBean的属性值
Field[] fields = t.getClass().getDeclaredFields();
for (short i = 0; i < fields.length; i++) {
Cell cell = row.createCell(i);
cell.setCellStyle(style);
Field field = fields[i];
String methodName = "get" + (field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1));
try {
Method method = t.getClass().getMethod(methodName, (Class[]) null);
Object value = method.invoke(t);
String textValue = null;
if (value instanceof Boolean) {
if ((Boolean) value) {
textValue = "男";
} else {
textValue = "女";
}
} else if (value instanceof Date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
textValue = sdf.format((Date) value);
} else if (value instanceof byte[]) {
byte[] bsValue = (byte[]) value;
row.setHeightInPoints(60);
sheet.setColumnWidth(i, (short) 35.7 * 80);
Picture pict = workbook.createDrawingPatriarch().createPicture(
new HSSFClientAnchor(0, 0, 0, (short) 4, index, (short) 6, index),
workbook.addPicture(bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG)
);
cell.setCellComment(new HSSFComment(pict));
} else {
textValue = value.toString();
}
cell.setCellValue(textValue);
} catch (Exception e) {
e.printStackTrace();
}
}
}
workbook.write(out);
} catch (IOException e) {
e.printStackTrace();
}
}
}

使用方法

  • 导入依赖jar包

    确保在项目中添加以下POI相关的jar包:

    • poi.jar
    • poi-hssf.jar
    • poi-ooxml.jar
    • poi-xml.jar
  • 创建Excel文件

    使用ExportExcel类来生成Excel文件。以下是一个简单的使用示例:

  • List
    dataset = new ArrayList<>();
    Student student = new Student(10000001, "张三", 20, true, new Date());
    dataset.add(student);
    Book book = new Book(1, "jsp", "leno", 300.33f, "1234567", "清华出版社", someImageBytes);
    dataset.add(book);
    ByteArrayOutputStream bos = new ByteArrayInputStream();
    ExportExcel ex = new ExportExcel();
    ex.exportExcel("测试POI导出EXCEL文档", new String[] {"学号", "姓名", "年龄", "性别", "出生日期"}, dataset, new FileOutputStream("E://a.xls"));
    1. 处理特殊数据类型

      由于Java的反射机制,ExportExcel类能够自动处理各个数据类型,包括字符串、数字、日期、布尔值以及图片数据。对于布尔值,可以通过特定的逻辑转换为"男"或"女"的字符串显示。

    2. 集成到Web应用

      如果需要将导出功能集成到Web应用中,可以创建一个ExcelServlet类,继承自HttpServlet。在dobGet方法中调用ExportExcel的相关方法,将数据写入输出流。

    3. public class ExcelServlet extends HttpServlet {
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      ExportExcel ex = new ExportExcel();
      ex.exportExcel("测试POI导出EXCEL文档", new String[] {"学号", "姓名", "年龄", "性别", "出生日期"}, dataset, response.getOutputStream());
      }
      }

      上述代码需要在web.xml中进行注册,确保Servlet能够正确运行。同时,确保Excel文件中的图片在/WEB-INF目录的根目录下提供,以便正确获取。

      注意事项

      • 文件路径:确保所有文件操作涉及到的路径都是正确的。对于Web应用,文件路径通常是基于ServletContext的。
      • 图片处理:对于包含图片的Excel文件,需要将图片数据正确传输,并确保客户端工具能够打开图片。
      • 处理异常:在实际应用中,需要在catch块中处理各种异常,比如文件路径错误、IO异常等。

      总结

      通过利用Apache POI组件,我们可以根据需求对数据进行动态转换和导出,生成标准化的Excel文件。这种方法具有高度的通用性和灵活性,适用于处理各种数据类型和复杂的数据结构。通过合理配置和扩展,可以将导出功能集成到多种不同的应用场景中,确保数据的安全性和完整性。

    上一篇:SpringBoot项目在IntelliJ IDEA中实现热部署
    下一篇:springboot+dubbo+redis+RabbitMQ 项目整合实例

    发表评论

    最新留言

    路过,博主的博客真漂亮。。
    [***.116.15.85]2025年04月22日 15时34分42秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章

    2024 最新 Kali Linux 定制化魔改,完整版,添加常见60渗透工具,零基础入门到精通,收藏这篇就够了 2025-03-29
    2024大模型行业应用十大典范案例集(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
    00后才是内卷之王,被卷的头皮发麻.... 2025-03-29
    2024届秋招让我(985本硕)直接破防,感觉书读了这么久结果毫无意义,读书就只为了读书,我该怎么办? 2025-03-29
    2024年专业介绍||现代通信技术,从零基础到精通,收藏这篇就够了! 2025-03-29
    2024年为什么越来越多的人选择转行网络安全?零基础入门到精通,收藏这篇就够了 2025-03-29
    2024年从零学习AI和深度学习Transformer的路线图(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
    006从零开始学Python—自定义函数 2025-03-29
    2024年全球顶尖杀毒软件,从零基础到精通,收藏这篇就够了! 2025-03-29
    2024年度“金智奖”揭晓:绿盟科技获双项大奖,创新驱动网络安全新高度。从零基础到精通,收藏这篇就够了! 2025-03-29
    2024年最流行的十大开源渗透测试工具 2025-03-29
    005从零开始学Python—字符串处理 2025-03-29
    2024年网络安全八大前沿趋势,零基础入门到精通,收藏这篇就够了 2025-03-29
    2024年薪酬最高的五个网络安全职位,零基础入门到精通,收藏这一篇就够 2025-03-29
    2024年非科班的人合适转行做程序员吗? 2025-03-29
    2024数字安全创新性案例报告,从零基础到精通,收藏这篇就够了! 2025-03-29
    2024最新最全CTF入门指南(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
    2024最新科普什么是大模型?零基础入门到精通,收藏这篇就够了 2025-03-29
    2024最新程序员接活儿搞钱平台盘点 2025-03-29
    2024最火专业解读:信息安全(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29