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导出excel

java poi xwpf操作word生成一个表格怎么合并单元格,求大神指导!

Java poi导出Excel,小数点后面数据缺失

急!!!java用poi导出excel文件,打开导出的文件时报错“文件错误,数据可能丢失”

java 通过Apache poi导出excel代码demo实例

关于java poi导出excel弹出下载框无法弹出的问题