java excel导出下载

您所在的位置:网站首页 Java使用poi导出excel文件名乱码 java excel导出下载

java excel导出下载

2023-03-20 08:58| 来源: 网络整理| 查看: 265

大家好,我是你的好朋友思创斯。今天说一说java excel导出下载_Java导出excel并下载功能[亲测有效],希望您对编程的造诣更进一步.

我们使用的导出并下载功能是利用一个插件叫POI的插件提供的导出功能,很实用;首先先导入Jar包:

812e91d6b1bafb2824f049eda1dadfbe.png

Action代码:

public void exportToExcel(List data) throws Exception

{

this.setEnableAccessRequest(true);

this.setEnableAccessResponse(true);

HttpServletRequest request = this.getRequest();

HttpServletResponse response = this.getResponse();

String randomNumber = request.getParameter(“randomNumber”);// session名称

try {

session = request.getSession();

session.setAttribute(randomNumber, new Double(1));

// 导出的EXCEL文件名

String exportFileName = “addressBook.xlsx”;

response.reset();

response.setContentType(“octets/stream”);

// response.setHeader(“Content-Disposition”,”attachment;filename=”+exportFileName);

response.setHeader(“Content-Disposition”, “attachment;filename=\”” + new String(exportFileName.getBytes(“UTF-8”), “iso8859-1”) + “\””);

// 导出的EXCEL列属性

List columnListName = new ArrayList();

columnListName.add(“userName&姓名”);

columnListName.add(“mobile&手机”);

columnListName.add(“shopTel&分店电话”);

columnListName.add(“postName&职位”);

columnListName.add(“email&邮箱”);

columnListName.add(“shopAddress&分店地址”);

Bean2ExcelConversionUtils.beans2excelFile07(columnListName, data, response.getOutputStream());

session.setAttribute(randomNumber, new Double(100));

} catch (Exception e) {

e.printStackTrace();

session.setAttribute(randomNumber, new Double(100));

} catch (Throwable e) {

e.printStackTrace();

session.setAttribute(randomNumber, new Double(100));

}

}

JSP代码:

function exportToExcel() {

var randomNumber=new Date().getTime();

top.$.jBox.tip(“正在导出…”, ‘loading’);

var exportDate = “${ctx}/xxxAction.do?method=export&randomNumber=”+randomNumber;

$(“#exportForm”).attr(“action”, exportDate);

$(“#exportForm”).attr(“method”,”post”);

$(“#exportForm”).submit();

}

因为是使用的插件,所以需要引入一个工具类(下面的工具类直接复制到新建的类文件里面即可)

import java.beans.Introspector;

import java.beans.PropertyDescriptor;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;

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.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.CellStyle;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

import org.apache.poi.xssf.streaming.SXSSFSheet;

import org.apache.poi.xssf.streaming.SXSSFWorkbook;

/**

* @author Tan Jiangyong

* @date 2013-9-3 下午3:36:43

* @version V1.0

*/

@SuppressWarnings(“all”)

public class Bean2ExcelConversionUtils {

private static final String PATTERN=”yyyy-MM-dd HH:mm:ss”; //excel日期格式,默认配置

private static final String DATE_PATTERN=”yyyy-MM-dd”; //excel日期格式

private static final String DATE_HH_PATTERN=”HH:mm:ss”; //excel时间格式

private static final int TOTAL_SIZE=40000; //每个excel写入多少数据(默认配置)

private static final int MAX_SHEET_SIZE=10000; //每一个sheet的大小(默认配置)

private static final int COLUMN_WIDTH_WORD=25; //列宽,默认汉字个数为25个

private static final int FLUSH_ROWS=100; //每生成excel行数,内存中缓存记录数清空(目的,避免零时文件过大)

/**

* 07、10办公版EXCEL导出(数据直接写到服务器的EXCEL里,以下载的形式,下载导出的数据)

* @param listName 列表头名称

* @param beans 实体集合

* @param result 数字字典Map集

* @param filePath 服务器存放文件路径

* @param fileName 文件名称

* @param totalSize EXCEL条数量

* @param maxSheetSize sheet页条数量

* @return 文件集合

* @throws Exception

*/

public static List beans2excelFile07(List listName,List beans,HashMap> result,String filePath,String fileName,Integer totalSize,Integer maxSheetSize) throws Exception{

if(totalSize==null || totalSize

if ((listName == null) || (listName.size() == 0)) {

throw new Exception(“listName is null when create excel document”);

}

if (outputStream == null) {

throw new Exception(“outputStream is null when create excel document”);

}

Workbook wb =new SXSSFWorkbook();

beans2excelFile07(listName, beans, null, null, MAX_SHEET_SIZE, outputStream);

try {

wb.write(outputStream);

outputStream.close();

} catch (IOException e) {

throw new Exception(e);

}

}

/**

* 07、10办公版EXCEL导出(直接以流的方式,写到客户端,导出的EXCEL文件只有一个)

* @param listName 列表头名称

* @param beans 实体集合

* @param maxSheetSize SHEET页的条数

* @param outputStream 客户端输出流

* @throws Exception

*/

public static void beans2excelFile07(List listName,List beans,HashMap> result,String sheetName,Integer maxSheetSize, OutputStream outputStream) throws Exception{

if ((listName == null) || (listName.size() == 0)) {

throw new Exception(“listName is null when create excel document”);

}

if (outputStream == null) {

throw new Exception(“outputStream is null when create excel document”);

}

if(maxSheetSize==null || maxSheetSize rows_max) {

rows_max = zh_name.split(“_”).length;

}

if(str.length>2){

String flag=str[2];

flagList.add(i,flag);

if(!flagListExists)

flagListExists=true;

}

if(str.length>3){

widthList.add(str[3]);

}

if(str.length>4){

dateMap.put(en_name, str[4]);

}

}

PropertyDescriptor[] props = null;

int size=beans==null?0:beans.size();

Sheet sheet=null;

//如果没有数据,导出表头

if(size==0){

sheet=ExcelHeadUtils.getExcelHead2007(wb, header, sheetName);

sheet.setDefaultRowHeight((short)350);//高度

setColumnWidth2007(widthList, sheet,beanAttrNames.size());

return ;

}

for (int i = 0; i < size ; i++) {

int remainder=i%maxSheetSize;

if(size==0 || i==0 || remainder==0){

sheet=ExcelHeadUtils.getExcelHead2007(wb, header,sheetName+(i/maxSheetSize));

sheet.createFreezePane( 1, rows_max, 1, rows_max);

sheet.setDefaultRowHeight((short)350);//高度

setColumnWidth2007(widthList, sheet,beanAttrNames.size());

}

if(props==null)

props=Introspector.getBeanInfo(beans.get(0).getClass()).getPropertyDescriptors();

Object bean = beans.get(i);

Row row = sheet.createRow(remainder+rows_max);

for (int j = 0; j < beanAttrNames.size(); j++) {

String beanAttrName = (String)beanAttrNames.get(j);

String flag=””;

if(flagListExists)

flag=(String)flagList.get(j);

for (int k = 0; k < props.length; k++) {

String propName = props[k].getName();

if (propName.equals(beanAttrName))

{

String pattern=dateMap.get(beanAttrName);

Cell cell = row.createCell((short)j);

Object cellValue = callGetter(bean, props[k],pattern);

if(“true”.equalsIgnoreCase(flag)){

if(result!=null){

HashMap hash=result.get(beanAttrName);

if(hash!=null)

cellValue=hash.get(cellValue);

}

}

if (cellValue == null) {

cellValue = “”;

}

setExcelCellText2007(cell, cellValue.toString(),cellStyle);

}

}

}

//每当行数达到设置的值就刷新数据到硬盘,以清理内存

if(i%FLUSH_ROWS==0){

((SXSSFSheet)sheet).flushRows();

}

}

} catch (Exception e) {

throw new Exception(e);

}

}

/**

* 07、10办公版EXCEL导出(直接以流的方式,写到客户端,导出的EXCEL文件只有一个)

* @param listName 列表头名称

* @param beans 实体集合

* @param maxSheetSize SHEET页的条数

* @param outputStream 客户端输出流

* @throws Exception

*/

public static void beans2excelFile07List(List> listColumnName,List list2beans,HashMap>> result,List listSheetName, OutputStream outputStream) throws Exception{

if ((listColumnName == null) || (listColumnName.size() == 0)) {

throw new Exception(“listColumnName is null when create excel document”);

}

if (list2beans.size() != listColumnName.size()) {

throw new Exception(“list2beans and listColumnName size Unequal”);

}

if (outputStream == null) {

throw new Exception(“outputStream is null when create excel document”);

}

Workbook wb =new SXSSFWorkbook();

buildExcelDocument2007List(wb, listColumnName, list2beans, result, listSheetName);

try {

wb.write(outputStream);

outputStream.close();

} catch (IOException e) {

throw new Exception(e);

}

}

/**

* 07、10办公版EXCEL导出,EXCEL写入数据

* @param wb EXCEL工作薄

* @param listName 列表头名称

* @param beans 实体集合

* @param maxSheetSize SHEET页的条数

* @throws Exception

*/

private static void buildExcelDocument2007List(Workbook wb, List> listColumnName,List list2beans,HashMap>> resultMap,List listSheetName) throws Exception

{

try

{

int sheets=listColumnName.size();

boolean sheetNameIsNullFlag=false;

if(listSheetName==null || listSheetName.size()!=sheets){

sheetNameIsNullFlag=true;

}

for (int s = 0; s < sheets; s++) {

String sheetName=”Sheet”+s;

if(!sheetNameIsNullFlag){

sheetName=listSheetName.get(s);

}

List listName=listColumnName.get(s);

CellStyle cellStyle=POIUtils.getCellStyleFont(wb,null);

List titles = new ArrayList();

List beanAttrNames = new ArrayList();

List widthList = new ArrayList();

HashMap dateMap=new HashMap();

String[] header = new String[listName.size()];

int rows_max = 0;//标题占多少列

List flagList=new ArrayList();

boolean flagListExists=false;

for (int i=0;i

{

String[] str=listName.get(i).split(“&”);

String en_name=str[0];

String zh_name=str[1];

beanAttrNames.add(i,en_name);

titles.add(i, zh_name);

header[i]=zh_name;

if (zh_name.split(“_”).length > rows_max) {

rows_max = zh_name.split(“_”).length;

}

if(str.length>2){

String flag=str[2];

flagList.add(i,flag);

if(!flagListExists)

flagListExists=true;

}

if(str.length>3){

widthList.add(str[3]);

}

if(str.length>4){

dateMap.put(en_name, str[4]);

}

}

PropertyDescriptor[] props = null;

ArrayList beans=(ArrayList)list2beans.get(s);

int size=beans==null?0:beans.size();

Sheet sheet=null;

//如果没有数据,导出表头

if(size==0){

sheet=ExcelHeadUtils.getExcelHead2007(wb, header, sheetName);

sheet.setDefaultRowHeight((short)350);//高度

setColumnWidth2007(widthList, sheet,beanAttrNames.size());

return ;

}

HashMap> result=null;

if(resultMap!=null){

result=resultMap.get(sheetName);

}

sheet=ExcelHeadUtils.getExcelHead2007(wb, header,sheetName);

sheet.createFreezePane( 1, rows_max, 1, rows_max);

sheet.setDefaultRowHeight((short)350);//高度

setColumnWidth2007(widthList, sheet,beanAttrNames.size());

for (int i = 0; i < size ; i++) {

if(props==null)

props=Introspector.getBeanInfo(beans.get(0).getClass()).getPropertyDescriptors();

Object bean = beans.get(i);

Row row = sheet.createRow(rows_max+i);

for (int j = 0; j < beanAttrNames.size(); j++) {

String beanAttrName = (String)beanAttrNames.get(j);

String flag=””;

if(flagListExists)

flag=(String)flagList.get(j);

for (int k = 0; k < props.length; k++) {

String propName = props[k].getName();

if (propName.equals(beanAttrName))

{

String pattern=dateMap.get(beanAttrName);

Cell cell = row.createCell((short)j);

Object cellValue = callGetter(bean, props[k],pattern);

if(“true”.equalsIgnoreCase(flag)){

if(result!=null){

HashMap hash=result.get(beanAttrName);

if(hash!=null)

cellValue=hash.get(cellValue);

}

}

if (cellValue == null) {

cellValue = “”;

}

setExcelCellText2007(cell, cellValue.toString(),cellStyle);

}

}

}

//每当行数达到设置的值就刷新数据到硬盘,以清理内存

if(i%FLUSH_ROWS==0){

((SXSSFSheet)sheet).flushRows();

}

}

}

} catch (Exception e) {

throw new Exception(e);

}

}

/**

* 07、10办公版EXCEL导出,单元格设置

* @param cell 单元格对象

* @param text 单元格文本内容

* @param cellStyle 单元格格式

*/

private static void setExcelCellText2007(Cell cell, Object text,CellStyle cellStyle)

{

cell.setCellValue(text.toString());

cell.setCellType(1);//单元格类型

cell.setCellStyle(cellStyle);

}

/**

* 07、10办公版EXCEL导出,单元格宽度设置

* @param widthList 列宽集合

* @param sheet sheet对象

* @param allSize 总列数

*/

private static void setColumnWidth2007(List widthList,Sheet sheet,int allSize){

if(widthList!=null && widthList.size()>0){

int size=widthList.size();

for (int i = 0; i < size; i++) {

try {

Integer width=Integer.parseInt((String) widthList.get(i));

sheet.setColumnWidth((short) i,width*256);

} catch (NumberFormatException e) {

continue;

}

}

}else{

for (int i = 0; i < allSize; i++) {

try {

sheet.setColumnWidth((short) i,COLUMN_WIDTH_WORD*256);

} catch (NumberFormatException e) {

continue;

}

}

}

}

/**

* 03、WPS:EXCEL导出(数据直接写到服务器的EXCEL里,以下载的形式,下载导出的数据)

* @param listName 列表头名称

* @param beans 实体集合

* @param result 数字字典Map集

* @param filePath 服务器存放文件路径

* @param fileName 文件名称

* @param totalSize EXCEL条数量

* @param maxSheetSize sheet页条数量

* @return List 文件集合

* @throws Exception

*/

public static List beans2excelFile03(List listName,List beans,HashMap> result,String filePath,String fileName,Integer totalSize,Integer maxSheetSize) throws Exception{

if(totalSize==null || totalSize

if ((listName == null) || (listName.size() == 0)) {

throw new Exception(“listName is null when create excel document”);

}

if(maxSheetSize==null || maxSheetSize rows_max) {

rows_max = zh_name.split(“_”).length;

}

if(str.length>2){

String flag=str[2];

flagList.add(i,flag);

if(!flagListExists)

flagListExists=true;

}

if(str.length>3){

widthList.add(str[3]);

}

if(str.length>4){

dateMap.put(en_name, str[4]);

}

}

PropertyDescriptor[] props =null;

int size=beans==null?0:beans.size();

HSSFSheet sheet=null;

//如果没有数据,导出表头

if(size==0){

sheet=ExcelHeadUtils.getExcelHead2003(wb, header, sheetName);

setColumnWidth2003(widthList, sheet,beanAttrNames.size());

sheet.setDefaultRowHeight((short)350);//高度

return ;

}

for (int i = 0; i < size ; i++) {

int remainder=i%maxSheetSize;

if(size==0 || i==0 || remainder==0){

sheet=ExcelHeadUtils.getExcelHead2003(wb, header, sheetName+(i/maxSheetSize));

sheet.createFreezePane( 1, rows_max, 1, rows_max);

setColumnWidth2003(widthList, sheet,beanAttrNames.size());

sheet.setDefaultRowHeight((short)350);//高度

}

if(props==null)

props= Introspector.getBeanInfo(beans.get(0).getClass()).getPropertyDescriptors();

Object bean = beans.get(i);

HSSFRow row = sheet.createRow(remainder+rows_max);

for (int j = 0; j < beanAttrNames.size(); j++) {

String beanAttrName = (String)beanAttrNames.get(j);

String flag=null;

if(flagListExists)

flag=(String)flagList.get(j);

for (int k = 0; k < props.length; k++) {

String propName = props[k].getName();

if (propName.equals(beanAttrName))

{

String pattern=dateMap.get(beanAttrName);

HSSFCell cell = row.createCell((short)j);

Object cellValue = callGetter(bean, props[k],pattern);

if(“true”.equalsIgnoreCase(flag)){

if(result!=null){

HashMap hash=result.get(beanAttrName);

if(hash!=null)

cellValue=hash.get(cellValue);

}

}

if (cellValue == null) {

cellValue = “”;

}

setExcelCellText2003(cell, cellValue.toString(),cellStyle);

}

}

}

}

} catch (Exception e) {

throw new Exception(e);

}

}

/**

* 03,WPS:EXCEL导出,单元格设置

* @param cell 单元格对象

* @param text 单元格文本内容

* @param cellStyle 单元格格式

*/

private static void setExcelCellText2003(HSSFCell cell, Object text,CellStyle cellStyle)

{

cell.setCellValue(text.toString());

cell.setCellType(1);//单元格类型

cell.setCellStyle(cellStyle);

}

/**

* 03,WPS:EXCEL导出,单元格宽度设置

* @param widthList 列宽集合

* @param sheet sheet对象

* @param allSize 总列数

*/

private static void setColumnWidth2003(List widthList,HSSFSheet sheet,int allSize){

if(widthList!=null && widthList.size()>0){

int size=widthList.size();

for (int i = 0; i < size; i++) {

try {

Integer width=Integer.parseInt((String) widthList.get(i));

sheet.setColumnWidth((short) i,width*256);

} catch (NumberFormatException e) {

continue;

}

}

}else{

for (int i = 0; i < allSize; i++) {

try {

sheet.setColumnWidth((short) i,COLUMN_WIDTH_WORD*256);

} catch (NumberFormatException e) {

continue;

}

}

}

}

/**

* 根据反射,获取实体属性的值

* @param target 实体属性

* @param prop 反射调用类

* @param pattern 日期格式

* @return

*/

private static Object callGetter(Object target, PropertyDescriptor prop,String pattern) {

Object o = null;

if (prop.getReadMethod() != null) {

try {

o = prop.getReadMethod().invoke(target, null);

if (Date.class.equals(prop.getPropertyType())) {

if(pattern!=null && !””.equals(pattern)){

try {

o = new SimpleDateFormat(pattern).format(o);

} catch (Exception e) {

o = new SimpleDateFormat(PATTERN).format(o);

}

}else{

o = formatDate(o);

}

}

} catch (Exception e) {

o = null;

}

}

return o;

}

/**

* 日期转换

* @param date

* @return 字符串的日期

*/

private static String formatDate(Object date) {

if(date==null)

return “”;

String dateStr = new SimpleDateFormat(DATE_HH_PATTERN).format(date);

if(“00:00:00”.equals(dateStr)){

return new SimpleDateFormat(DATE_PATTERN).format(date);

}

return new SimpleDateFormat(PATTERN).format(date);

}

}

然后看看效果吧:

91da5eb4f838113f2366468e1fd67255.png

[转载]Java导出Excel

一.需求介绍 当前B/S模式已成为应用开发的主流,而在开发企业办公系统的过程中,常常有客户这样子要求:把系统数据库中的数据导出到Excel,用户查看报表时直接用Excel打开.或者是:用户已经习惯用E …

java导出excel报错:getOutputStream() has already been called for this response

对于java导出excel报错的问题,查了很多都说是在使用完输出流以后调用以下两行代码即可 out.clear(); out = pageContext.pushBody(); 但这也许是页面上输出时 …

java导出excel报表

1.java导出excel报表: package cn.jcenterhome.util; import java.io.OutputStream;import java.util.List;impo …

Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 …

java导出excel表格

java导出excel表格: 1.导入jar包 org.apache.poi

Java导出Excel和CSV(简单Demo)

Java导出Excel和CSV的简单实现,分别使用POI和JavaCSV. JavaBean public class ReportInfo { int id; String date; int nu …

java导出excel模板数据

Java导出excel数据模板,这里直接贴代码开发,流程性的走下去就是步骤: String[] colName=new String[]{“期间”,”科目代码” …

java导出excel工具类

java导出excel须要使用HSSFWorkbook这个类,须要导入poi-3.6-20091214.jar 工具类调用例如以下: package com.qlwb.business.util; i …

JAVA 导出 Excel, 将Excel下载到本地

昨天说了如何将数据导出成 excel 的两种方式,今天完善一下将 java 导出(文件在服务器)并下载到本地 1. 触发导出 ajax 代码 $.ajax({ type: “POST&quo …

随机推荐

PHP文件大小格式化函数合集

比如碰到一个很大的文件有49957289167B,大家一看这么一长串的数字后面单位是字节B,还是不知道这个文件的大小是一个什么概念,我们把它转换成GB为单位,就是46.53GB.用下面这些函数就可以完 …

通用PE工具箱 4.0精简优化版

通用PE工具箱 4.0精简优化版 经用过不少 WinPE 系统,都不是很满意,普遍存在篡改主页.添加广告链接至收藏夹.未经允许安装推广软件等流氓行为,还集成了诸多不常用的工具,令人头疼不已.那么今天给 …

C#中timer类的用法

C#中timer类的用法 关于C#中timer类  在C#里关于定时器类就有3个   1.定义在System.Windows.Forms里   2.定义在System.Threading.Timer类 …

如何用linux命令查看nginx是否在正常运行

有时想知道nigix是否在正常运行,需要用linux命令查看nginx运行情况. 执行命令: ps -A | grep nginx  如果返回结果的话,说明有nginx在运行,服务已经启动. 如果 …

JavaScript—-遇到的问题

存在 …

vector内存分配

vector,map 这些容器还是在堆上分配的内存,在析构时是释放空间 vector在提高性能可以先reserve在push_back() reserve:决定capacity,但没有真正的分配内存, …

Listview加载更多是,恢复到原来的位置,如果不加特殊处理,总是跳转第一条

1.记录listView滚动到的位置的坐标,然后利用listView.scrollTo精确的进行恢复 listView.setOnScrollListener(new OnScrollListener …

自然语言.例如:求n!。

(1).定义3个变量i.n及mul,并为i和mul均赋初值为1. (2).从键盘中输入一个数赋给n. (3).将mul乘以i的结果赋给mul. (4)i的值加1,判断i的值是否大于n.如果大于n,则执 …

[APIO2010]

A.特别行动队 n



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3