当前位置: 首页 > 工具软件 > ExcelUtil > 使用案例 >

excel工具类ExcelUtil

唐永春
2023-12-01

今天给大家分享的是JAVA如何导出EXCEL表格,因为最近有做这样一个功能,所以分享出来,如有不对之处,敬请指正。

 

POI简介:Jakarta POI 是一套用于访问微软格式文档的Java API。Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于操作Word的HWPF,在各种组件中目前只有用于操作Excel的HSSF相对成熟。

官方主页http://poi.apache.org/index.html

API文档http://poi.apache.org/apidocs/index.html

 

现在用的比较多的都是用POI技术来导出或者导入Excel,所以我们就用POI吧,用POI导出Excel我们首先要下载所需的jar包然后导入到我们的项目中,用maven的同学只需找到相关

依赖加入到pom.xml里面即可。

 

1. 下载jar包:

官方下载:http://poi.apache.org/download.html这里可以下载到它的最新版本和文档,目前最新版本是3.7,这里使用比较稳定的3.6版。

百度网盘下载:https://pan.baidu.com/s/1mjhoaWK  密码:pkur

 

2. 将jar包加入到项目中:

将下载好的jar包加入到WEBINFO目录下的lib文件夹中,Eclipse用户选中jar包然后右击选择Build Path选项, Idea用户选中jar包然后右击选择Add as Library选项即可。

 

如果是用maven的可自行到maven中央仓库搜索poi然后选择对应的版本即可,也可以直接将下面代码复制到pom.xml。

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.6</version>
</dependency>
小提示:用maven引入依赖jar包的可能会遇到包引用不到的bug,但是maven依赖确实已经引入了,而且没有任何报错,但是只要一引用  org.apache.poi.hssf.usermodel下面的类就会报错,报错内容为:Caused by: java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFWorkbook。

 

3. Jakarta POI HSSF API组件:

HSSF(用于操作Excel的组件)提供给用户使用的对象在rg.apache.poi.hssf.usermodel包中,主要部分包括Excel对象,样式和格式,有以下几种常用的对象:

常用组件:

HSSFWorkbook     excel的文档对象

HSSFSheet            excel的表单

HSSFRow               excel的行

HSSFCell                excel的格子单元

HSSFFont               excel字体

样式:

HSSFCellStyle         cell样式

 

4.基本操作步骤:

首先,我们应该要知道的是,一个Excel文件对应一个workbook,一个workbook中有多个sheet组成,一个sheet是由多个行(row)和列(cell)组成。那么我们用poi要导出一个Excel表格

的正确顺序应该是:

1、用HSSFWorkbook打开或者创建“Excel文件对象”

2、用HSSFWorkbook对象返回或者创建Sheet对象

3、用Sheet对象返回行对象,用行对象得到Cell对象

4、对Cell对象读写。

5、将生成的HSSFWorkbook放入HttpServletResponse中响应到前端页面

 

5. 导出Excel工具类:

package com.yung.ppapi.util;

import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;


/**
 * 导出Excel
 * @author lisheng4
 *
 * HSSFWorkbook、XSSFWorkbook、SXSSFWorkbook的区别:
 *   ◎HSSFWorkbook一般用于Excel2003版及更早版本(扩展名为.xls)的导出。
 *   ◎XSSFWorkbook一般用于Excel2007版(扩展名为.xlsx)的导出。
 *   ◎SXSSFWorkbook(POI3.8版本)一般用于大数据量的导出。
 * 注:HSSFWorkbook的Excel Sheet导出条数上限(<=2003版)是65535行、256列,
 *   XSSFWorkbook的Excel Sheet导出条数上限(>=2007版)是1048576行,16384列,
 *   如果数据量超过了此上限,那么可以使用SXSSFWorkbook来导出。实际上上万条数据, 甚至上千条数据就可以考虑使用SXSSFWorkbook了。
 *
 */
public class ExcelUtil{

	// 2003 版本 最大支持65536 行
	public  final static String  EXCEL_FILE_2003 = "2003";
	// 2007 版本以上 最大支持1048576行
	public  final static String  EXCEl_FILE_2007 = "2007";
	// 2007 版本以上 大数据量导出
	public  final static String  EXCEl_FILE_2007_SXSSF = "2007_SXSSF";
	
	/**
	 * <p>
	 * 导出无头部标题行Excel <br>
	 * 时间格式默认:yyyy-MM-dd hh:mm:ss <br>
	 * </p>
	 * 
	 * @param title 表格标题
	 * @param headersField 表格字段集合
	 * @param dataList 数据集合
	 * @param out 输出流
	 * @param version 2003 或者 2007,不传时默认生成2003版本
	 * @throws IOException 
	 */
	public static void exportExcel(String title, String[] headersField, List<Map<String, Object>> dataList, OutputStream out,
			String version) throws IOException {
		if (StringUtils.isEmpty(version) || EXCEL_FILE_2003.equals(version.trim())) {
			exportExcel2003(title, null, headersField, dataList, out, "yyyy-MM-dd HH:mm:ss");
		} else if(EXCEl_FILE_2007_SXSSF.equals(version.trim())) {
			exportExcel2007WithSXSSF(title, null, headersField, dataList, out, "yyyy-MM-dd HH:mm:ss");
		} else {
			exportExcel2007(title, null, headersField, dataList, out, "yyyy-MM-dd HH:mm:ss");
		}
	}
 
	/**
	 * <p>
	 * 导出带有头部标题行的Excel <br>
	 * 时间格式默认:yyyy-MM-dd hh:mm:ss <br>
	 * </p>
	 * 
	 * @param title 表格标题
	 * @param headers 头部标题集合
	 * @param headersField 表格头部标题对应的字段集合
	 * @param dataList 数据集合
	 * @param out 输出流
	 * @param version 2003 或者 2007,不传时默认生成2003版本
	 * @throws IOException 
	 */
	public static void exportExcel(String title, String[] headers, String[] headersField, List<Map<String, Object>> dataList,
			OutputStream out, String version) throws IOException {
		if (StringUtils.isBlank(version) || EXCEL_FILE_2003.equals(version.trim())) {
			exportExcel2003(title, headers, headersField, dataList, out, "yyyy-MM-dd HH:mm:ss");
		} else if(EXCEl_FILE_2007_SXSSF.equals(version.trim())) {
			exportExcel2007WithSXSSF(title, headers, headersField, dataList, out, "yyyy-MM-dd HH:mm:ss");
		} else {
			exportExcel2007(title, headers, headersField, dataList, out, "yyyy-MM-dd HH:mm:ss");
		}
	}

	/**
	 * <p>
	 * 通用Excel导出方法,利用反射机制遍历对象的所有字段,将数据写入Excel文件中 <br>
	 * 此版本生成2007以上版本的文件 (文件后缀:xlsx)
	 * </p>
	 *
	 * @param title
	 *            表格标题名
	 * @param headers
	 *            表格头部标题集合
	 * @param headersField
	 *            表格头部标题对应的字段集合
	 * @param dataList
	 *            需要显示的数据集合,集合中一定要放置符合JavaBean风格的类的对象。此方法支持的
	 *            JavaBean属性的数据类型有基本数据类型及String,Date
	 * @param out
	 *            与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
	 * @param pattern
	 *            如果有时间数据,设定输出格式。默认为"yyyy-MM-dd hh:mm:ss"
	 * @throws IOException
	 */
	public static void exportExcel2007WithSXSSF(String title, String[] headers, String[] headersField,
			List<Map<String, Object>> dataList, OutputStream out, String pattern) throws IOException {

		SXSSFWorkbook workbook = null;
		try {
			// 声明一个工作薄
			workbook = new SXSSFWorkbook();
			// 生成一个表格
			Sheet sheet = workbook.createSheet(title);
			sheet.setDefaultColumnWidth(20);
			// 生成一个样式
			CellStyle headerStyle = workbook.createCellStyle();
			headerStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
			headerStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);
			headerStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);
			headerStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);
			headerStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);
			headerStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
			headerStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
			// 生成一个字体
			Font font = workbook.createFont();
			font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
			font.setFontName("宋体");
			font.setFontHeightInPoints((short) 11);
			headerStyle.setFont(font);

			// 生成并设置另一个样式
			CellStyle dataStyle = workbook.createCellStyle();
			dataStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
			dataStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);
			dataStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);
			dataStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);
			dataStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);
			dataStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
			dataStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
			// 生成另一个字体
			Font font2 = workbook.createFont();
			font2.setBoldweight(XSSFFont.BOLDWEIGHT_NORMAL);
			dataStyle.setFont(font2);

			// 产生表格标题行
			Row row = sheet.createRow(0);
			Cell cellHeader;
			for (int i = 0; i < headers.length; i++) {
				cellHeader = row.createCell(i);
				cellHeader.setCellStyle(dataStyle);
				cellHeader.setCellValue(headers[i]);
			}

			// 遍历集合数据,产生数据行
			Iterator<Map<String, Object>> it = dataList.iterator();
			Map<String, Object> map;
			int index = 0;
			Object value;
			String textValue;
			Cell cell;
			Matcher matcher;
			Pattern p = Pattern.compile("^//d+(//.//d+)?$");
			SimpleDateFormat sdf = new SimpleDateFormat(pattern);
			while (it.hasNext()) {
				index++;
				row = sheet.createRow(index);
				map = (Map<String,Object>) it.next();
				for (int n = 0; n < headersField.length; n++) {
					cell = row.createCell(n);
					cell.setCellStyle(dataStyle);
					value = map.get(headersField[n]);
					// 判断值的类型后进行强制类型转换
					textValue = null;
					if (value instanceof Integer) {
						cell.setCellValue((Integer) value);
					} else if (value instanceof Float) {
						textValue = String.valueOf((Float) value);
						cell.setCellValue(textValue);
					} else if (value instanceof Double) {
						textValue = String.valueOf((Double) value);
						cell.setCellValue(textValue);
					} else if (value instanceof Long) {
						cell.setCellValue((Long) value);
					}
					if (value instanceof Boolean) {
						textValue = "是";
						if (!(Boolean) value) {
							textValue = "否";
						}
					} else if (value instanceof Date) {
						textValue = sdf.format((Date) value);
					} else {
						// 其它数据类型都当作字符串简单处理
						if (value != null) {
							textValue = value.toString();
						}
					}
					if (textValue != null) {
						matcher = p.matcher(textValue);
						if (matcher.matches()) {
							// 是数字当作double处理
							cell.setCellValue(Double.parseDouble(textValue));
						} else {
							cell.setCellValue(textValue);
						}
					}
				}
			}

			workbook.write(out);
			out.flush();
		} catch (IOException e) {
			e.printStackTrace();
			throw e;
		}finally {
			if(workbook != null) {
				try {
					workbook.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

	/**
	 * <p>
	 * 通用Excel导出方法,利用反射机制遍历对象的所有字段,将数据写入Excel文件中 <br>
	 * 此版本生成2007以上版本的文件 (文件后缀:xlsx)
	 * </p>
	 * 
	 * @param title
	 *            表格标题名
	 * @param headers
	 *            表格头部标题集合
	 * @param headersField
	 *            表格头部标题对应的字段集合
	 * @param dataList
	 *            需要显示的数据集合,集合中一定要放置符合JavaBean风格的类的对象。此方法支持的
	 *            JavaBean属性的数据类型有基本数据类型及String,Date
	 * @param out
	 *            与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
	 * @param pattern
	 *            如果有时间数据,设定输出格式。默认为"yyyy-MM-dd hh:mm:ss"
	 * @throws IOException 
	 */
	public static void exportExcel2007(String title, String[] headers, String[] headersField,
			List<Map<String, Object>> dataList, OutputStream out, String pattern) throws IOException {
		
		XSSFWorkbook workbook = null;
		try {
			// 声明一个工作薄
			workbook = new XSSFWorkbook();
			// 生成一个表格
			XSSFSheet sheet = workbook.createSheet(title);
			// 设置表格默认列宽度为20个字节
			sheet.setDefaultColumnWidth(20);
			// 生成一个样式
			XSSFCellStyle headerStyle = workbook.createCellStyle();
			// 设置这些样式
			headerStyle.setFillForegroundColor(new XSSFColor(java.awt.Color.gray));
			headerStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
			headerStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);
			headerStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);
			headerStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);
			headerStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);
			headerStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
			// 生成一个字体
			XSSFFont font = workbook.createFont();
			font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
			font.setFontName("宋体"); 
			font.setColor(new XSSFColor(java.awt.Color.BLACK));
			font.setFontHeightInPoints((short) 11);
			// 把字体应用到当前的样式
			headerStyle.setFont(font);

			// 生成并设置另一个样式
			XSSFCellStyle dataStyle = workbook.createCellStyle();
			dataStyle.setFillForegroundColor(new XSSFColor(java.awt.Color.WHITE));
			dataStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
			dataStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);
			dataStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);
			dataStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);
			dataStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);
			dataStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
			dataStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
			// 生成另一个字体
			XSSFFont font2 = workbook.createFont();
			font2.setBoldweight(XSSFFont.BOLDWEIGHT_NORMAL);
			// 把字体应用到当前的样式
			dataStyle.setFont(font2);
	 
			// 产生表格标题行
			XSSFRow row = sheet.createRow(0);
			XSSFCell cellHeader;
			for (int i = 0; i < headers.length; i++) {
				cellHeader = row.createCell(i);
				cellHeader.setCellStyle(headerStyle);
				cellHeader.setCellValue(new XSSFRichTextString(headers[i]));
			}
	 
			// 遍历集合数据,产生数据行
			Iterator<Map<String, Object>> it = dataList.iterator();
			Map<String, Object> map;
			int index = 0;
			Object value;
			String textValue;
			XSSFCell cell;
			XSSFRichTextString richString;
			Matcher matcher;
			Pattern p = Pattern.compile("^//d+(//.//d+)?$");
			SimpleDateFormat sdf = new SimpleDateFormat(pattern);
			while (it.hasNext()) {
				index++;
				row = sheet.createRow(index);
				map = (Map<String,Object>) it.next();
				for (int n = 0; n < headersField.length; n++) {
					cell = row.createCell(n);
					cell.setCellStyle(dataStyle);
					value = map.get(headersField[n]);
					// 判断值的类型后进行强制类型转换
					textValue = null;
					if (value instanceof Integer) {
						cell.setCellValue((Integer) value);
					} else if (value instanceof Float) {
						textValue = String.valueOf((Float) value);
						cell.setCellValue(textValue);
					} else if (value instanceof Double) {
						textValue = String.valueOf((Double) value);
						cell.setCellValue(textValue);
					} else if (value instanceof Long) {
						cell.setCellValue((Long) value);
					}
					if (value instanceof Boolean) {
						textValue = "是";
						if (!(Boolean) value) {
							textValue = "否";
						}
					} else if (value instanceof Date) {
						textValue = sdf.format((Date) value);
					} else {
						// 其它数据类型都当作字符串简单处理
						if (value != null) {
							textValue = value.toString();
						}
					}
					if (textValue != null) {
						matcher = p.matcher(textValue);
						if (matcher.matches()) {
							// 是数字当作double处理
							cell.setCellValue(Double.parseDouble(textValue));
						} else {
							richString = new XSSFRichTextString(textValue);
							cell.setCellValue(richString);
						}
					}
				}
			}
			
			workbook.write(out);
			out.flush();
		} catch (IOException e) {
			e.printStackTrace();
			throw e;
		}finally {
			if(workbook != null) {
				try {
					workbook.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

	/**
	 * <p>
	 * 通用Excel导出方法,利用反射机制遍历对象的所有字段,将数据写入Excel文件中 <br>
	 * 此方法生成2003版本的excel,文件名后缀:xls <br>
	 * </p>
	 * 
	 * @param title
	 *            表格标题名
	 * @param headers
	 *            表格头部标题集合
	 * @param headersField
	 *            表格头部标题对应的字段集合
	 * @param dataList
	 *            需要显示的数据集合,集合中一定要放置符合JavaBean风格的类的对象。此方法支持的
	 *            JavaBean属性的数据类型有基本数据类型及String,Date
	 * @param out
	 *            与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
	 * @param pattern
	 *            如果有时间数据,设定输出格式。默认为"yyyy-MM-dd hh:mm:ss"
	 * @throws IOException 
	 */
	public static void exportExcel2003(String title, String[] headers, String[] headersField,
			List<Map<String, Object>> dataList, OutputStream out, String pattern) throws IOException {
		
		HSSFWorkbook workbook = null;
		try {
			// 声明一个工作薄
			workbook = new HSSFWorkbook();
			// 生成一个表格
			HSSFSheet sheet = workbook.createSheet(title);
			// 设置表格默认列宽度为20个字节
			sheet.setDefaultColumnWidth(20);
			// 生成一个样式
			HSSFCellStyle headerStyle = workbook.createCellStyle();
			// 设置这些样式
			headerStyle.setFillForegroundColor(HSSFColor.GREY_50_PERCENT.index);
			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 font = workbook.createFont();
			font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
			font.setFontName("宋体"); 
			font.setColor(HSSFColor.WHITE.index);
			font.setFontHeightInPoints((short) 11);
			// 把字体应用到当前的样式
			headerStyle.setFont(font);

			// 生成并设置另一个样式
			HSSFCellStyle dataStyle = workbook.createCellStyle();
			dataStyle.setFillForegroundColor(HSSFColor.WHITE.index);
			dataStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
			dataStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
			dataStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
			dataStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
			dataStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
			dataStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
			dataStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
			// 生成另一个字体
			HSSFFont font2 = workbook.createFont();
			font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
			// 把字体应用到当前的样式
			dataStyle.setFont(font2);
	 
			// 产生表格标题行
			HSSFRow row = sheet.createRow(0);
			HSSFCell cellHeader;
			for (int i = 0; i < headers.length; i++) {
				cellHeader = row.createCell(i);
				cellHeader.setCellStyle(headerStyle);
				cellHeader.setCellValue(new HSSFRichTextString(headers[i]));
			}
	 
			// 遍历集合数据,产生数据行
			Iterator<Map<String,Object>> it = dataList.iterator();
			Map<String,Object> map;
			int index = 0;
			Object value;
			String textValue;
			HSSFCell cell;
			HSSFRichTextString richString;
			Matcher matcher;
			Pattern p = Pattern.compile("^//d+(//.//d+)?$");
			SimpleDateFormat sdf = new SimpleDateFormat(pattern);
			while (it.hasNext()) {
				index++;
				row = sheet.createRow(index);
				map = (Map<String,Object>) it.next();
				for (int n = 0; n < headersField.length; n++) {
					cell = row.createCell(n);
					cell.setCellStyle(dataStyle);
					value = map.get(headersField[n]);
					// 判断值的类型后进行强制类型转换
					textValue = null;
					if (value instanceof Integer) {
						cell.setCellValue((Integer) value);
					} else if (value instanceof Float) {
						textValue = String.valueOf((Float) value);
						cell.setCellValue(textValue);
					} else if (value instanceof Double) {
						textValue = String.valueOf((Double) value);
						cell.setCellValue(textValue);
					} else if (value instanceof Long) {
						cell.setCellValue((Long) value);
					}
					if (value instanceof Boolean) {
						textValue = "是";
						if (!(Boolean) value) {
							textValue = "否";
						}
					} else if (value instanceof Date) {
						textValue = sdf.format((Date) value);
					} else {
						// 其它数据类型都当作字符串简单处理
						if (value != null) {
							textValue = value.toString();
						}
					}
					if (textValue != null) {
						matcher = p.matcher(textValue);
						if (matcher.matches()) {
							// 是数字当作double处理
							cell.setCellValue(Double.parseDouble(textValue));
						} else {
							richString = new HSSFRichTextString(textValue);
							cell.setCellValue(richString);
						}
					}
				}
			}
			
			workbook.write(out);
			out.flush();
		} catch (IOException e) {
			e.printStackTrace();
			throw e;
		}finally {
			if(workbook != null) {
				try {
					workbook.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

 

6、输出前端页面时,流的创建

		//将文件存到浏览器设置的下载位置
		OutputStream out = response.getOutputStream();//获得输出流		
		response.reset();// 清空输出流
		response.setContentType("application/msexcel");// 定义输出类型
 
		String filename = sheetName + ".xls";
		
		try {
			response.setContentType("application/ms-excel;charset=UTF-8");// 定义输出类型  ;charset=UTF-8
			response.addHeader("Content-Disposition", "attachment;filename="+
					 new String(filename.getBytes(“utf-8”), "iso-8859-1"));// 设定输出文件头  new String(filename.getBytes())
			
			workbook.write(out);// 将数据写出去
			String str = "导出" + sheetName + "成功!";
			System.out.println(str);
		} catch (Exception e) {
			e.printStackTrace();
			String str1 = "导出" + sheetName + "失败!";
			System.out.println(str1);
		} finally {
			out.close();
		}

 

参考文章:https://www.cnblogs.com/gudongcheng/p/8268909.html

 

 

楼主这么辛苦,请使用楼主的推荐码领取支付宝红包吧,记得一定要消费掉哦。双赢^_^。

1、打开支付宝首页搜索“8282987” 立即领红包。

 

 类似资料: