java poi 导出excel
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java poi 导出excel相关的知识,希望对你有一定的参考价值。
很多时候,一个软件应用程序需要生成Microsoft Excel文件格式的报告。有时,一个应用程序甚至希望将Excel文件作为输入数据。例如,一个公司开发的应用程序将财务部门需要所有输出生成自己的Excel。
任何Java程序员愿意将MS Office文件的输出,可以使用预定义和只读API来做到。
什么是Apache POI?
Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件。这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库。它包含类和方法对用户输入数据或文件到MS Office文档进行解码。
Apache POI组件
Apache POI包含类和方法,来将MS Office所有OLE 2文档复合。此API组件的列表如下。
-
POIFS (较差混淆技术实现文件系统) : 此组件是所有其他POI元件的基本因素。它被用来明确地读取不同的文件。
-
HSSF (可怕的电子表格格式) : 它被用来读取和写入MS-Excel文件的xls格式。
-
XSSF (XML格式) : 它是用于MS-Excel中XLSX文件格式。
-
HPSF (可怕的属性设置格式) : 它用来提取MS-Office文件属性设置。
-
HWPF (可怕的字处理器格式) : 它是用来读取和写入MS-Word的文档扩展名的文件。
-
XWPF (XML字处理器格式) : 它是用来读取和写入MS-Word的docx扩展名的文件。
-
HSLF (可怕的幻灯片版式格式) : 它是用于读取,创建和编辑PowerPoint演示文稿。
-
HDGF (可怕的图表格式) : 它包含类和方法为MS-Visio的二进制文件。
-
HPBF (可怕的出版商格式) : 它被用来读取和写入MS-Publisher文件。
本人做的事使用java poi导出excel文件。因此,仅限于HSSF组件。
ExportUtil工具类:
package net.dagongsoft.framework.util.poi; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.lang.StringUtils; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; /** * @description 利用Java poi导出excel公用类 * @author ldp * @time 2017年6月8日 下午2:17:08 * */ public class ExportUtil { /** * 导出Excel 97(.xls)格式 ,少量数据 * * @param title * sheet名 * @param headString * 列名 * @param jsonArray * 数据集 */ public static HSSFWorkbook exportExcel(String title, String headString, JSONArray jsonArray) { // 声明一个工作薄 HSSFWorkbook workbook = new HSSFWorkbook(); // 表头样式 // HSSFCellStyle titleStyle = workbook.createCellStyle(); // titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // HSSFFont titleFont = workbook.createFont(); // titleFont.setFontHeightInPoints((short) 20); // titleFont.setBoldweight((short) 700); // titleStyle.setFont(titleFont); // 列头样式 HSSFCellStyle headerStyle = workbook.createCellStyle(); // headerStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); // headerStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // headerStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // headerStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // headerStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // HSSFFont headerFont = workbook.createFont(); // headerFont.setFontHeightInPoints((short) 12); // headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // headerStyle.setFont(headerFont); // 单元格样式 HSSFCellStyle cellStyle = workbook.createCellStyle(); // cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); // cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // HSSFFont cellFont = workbook.createFont(); // cellFont.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); // cellStyle.setFont(cellFont); // 生成一个表格 HSSFSheet sheet = null; if (StringUtils.isNotBlank(title)) { sheet = workbook.createSheet(title); } else { sheet = workbook.createSheet(); } String[] headers = headString.split(","); // 遍历集合数据,产生数据行 int rowIndex = 0; int count = 0; if (jsonArray != null) { for (int n = 0; n < jsonArray.size(); n++) { if (rowIndex == 65535 || rowIndex == 0) { if (rowIndex != 0) { count++; // 如果数据超过了,则在第二页显示 if (StringUtils.isNotBlank(title)) { sheet = workbook.createSheet(title + count); } else { sheet = workbook.createSheet(); } } HSSFRow headerRow = sheet.createRow(0); // 列头 rowIndex =0 for (int i = 0; i < headers.length; i++) { headerRow.createCell(i).setCellValue(headers[i]); headerRow.getCell(i).setCellStyle(headerStyle); } rowIndex = 1;// 数据内容从 rowIndex=1开始 } JSONObject jo = jsonArray.getJSONObject(n); HSSFRow dataRow = sheet.createRow(rowIndex); for (int i = 0; i < headers.length; i++) { HSSFCell newCell = dataRow.createCell(i); Object o = jo.get(headers[i]); String cellValue = ""; if (o == null) { cellValue = ""; } else if (o instanceof Date) { cellValue = new SimpleDateFormat("yyyy/MM/dd 00:00:00").format(o); } else { cellValue = o.toString(); } newCell.setCellValue(cellValue); newCell.setCellStyle(cellStyle); } rowIndex++; } } // 自动调整宽度 for (int i = 0; i < headers.length; i++) { sheet.autoSizeColumn(i); } return workbook; } }
控制类:
package net.dagongsoft.platform.poi.controller; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.alibaba.fastjson.JSONArray; import net.dagongsoft.platform.poi.entity.Student; import net.dagongsoft.platform.poi.service.StudentExportService; import net.dagongsoft.platform.poi.util.ExportUtilTest; @Controller @RequestMapping("/studentExportController") public class StudentExportController { @Autowired private StudentExportService studentExportService; @RequestMapping("/export.form") public void exportExcel(HttpServletRequest request, HttpServletResponse response) throws Exception { List<Student> list = new ArrayList<Student>(); list.add(new Student(1000, "zhangsan", "20")); list.add(new Student(1001, "lisi", "23")); list.add(new Student(1002, "wangwu", "25")); HSSFWorkbook wb = studentExportService.export(list); response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "attachment;filename=student.xls"); OutputStream ouputStream = response.getOutputStream(); wb.write(ouputStream); ouputStream.flush(); ouputStream.close(); } }
serivice接口声明:
package net.dagongsoft.platform.poi.service; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import net.dagongsoft.platform.poi.entity.Student; public interface StudentExportService { HSSFWorkbook export(List<Student> list); }
service实现类:
package net.dagongsoft.platform.poi.service.impl; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.springframework.stereotype.Service; import net.dagongsoft.platform.poi.entity.Student; import net.dagongsoft.platform.poi.service.StudentExportService; @Service public class StudentExportServiceImpl implements StudentExportService { String[] excelHeader = { "Id", "Name", "Age" }; @Override public HSSFWorkbook export(List<Student> list) { HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("Student"); HSSFRow row = sheet.createRow((int) 0); HSSFCellStyle style = wb.createCellStyle(); for (int i = 0; i < excelHeader.length; i++) { HSSFCell cell = row.createCell(i); cell.setCellValue(excelHeader[i]); cell.setCellStyle(style); sheet.autoSizeColumn(i); // sheet.SetColumnWidth(i, 100 * 256); } for (int i = 0; i < list.size(); i++) { row = sheet.createRow(i + 1); Student student = list.get(i); row.createCell(0).setCellValue(student.getId()); row.createCell(1).setCellValue(student.getName()); row.createCell(2).setCellValue(student.getAge()); } return wb; } }
以上是关于java poi 导出excel的主要内容,如果未能解决你的问题,请参考以下文章
java poi xwpf操作word生成一个表格怎么合并单元格,求大神指导!
急!!!java用poi导出excel文件,打开导出的文件时报错“文件错误,数据可能丢失”