poi实现Excel导出
最近做了一个导出Excel的小功能,以前没接触过,现在分享下自己的代码,想让各位帮忙看看有啥地方可以优化,也方便自己以后查阅...
首先是excelAction的代码:
/**
* excelAction
* @author zhaoxz
*
*/
@Controller("excelAction")
@Scope("prototype")
public class ExcelAction extends BaseAction {
/**
*
*/
private static final long serialVersionUID = -4596726723629076906L;
private static final Logger logger = Logger.getLogger(ExcelAction.class);
@Resource
private CkdjService ckdjSrv;
private ExportExcel ex = new ExportExcel();
private Ckdj ckdj;
private String exportBatch;
private String fileName;
private InputStream excelStream; public String execute() throws Exception {
return SUCCESS;
} /**
* 将workbook转换为InputStream
* @param workbook
* @param fileName
*/
private void workbookInputStream(HSSFWorkbook workbook, String fileName) {
try {
this.setFileName(URLEncoder.encode(fileName, "UTF-8"));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
workbook.write(baos);
baos.flush();
byte[] aa = baos.toByteArray();
this.excelStream = new ByteArrayInputStream(aa, 0, aa.length);
baos.close();
} catch (Exception e) {
logger.error("转换失败!", e);
}
} /**************************** get set **************************************/ /**
* 获取文件流
* @return
*/
public InputStream getExcelStream() {
try {
String[] headers =
{ "序号", "名称", "规格", "序列号", "数量", "单位", "出库人"};
ckdj = ckdjSrv.findById(ckdj);
System.out.println(getExportBatch());
HSSFWorkbook workbook = ex.exportExcel("出库列表", headers, ckdj ,exportBatch);
this.workbookInputStream(workbook, fileName);
} catch (Exception e) {
logger.error("获取文件流失败!", e);
}
return excelStream;
} public void setExcelStream(InputStream excelStream) {
this.excelStream = excelStream;
} public Ckdj getCkdj() {
return ckdj;
} public void setCkdj(Ckdj ckdj) {
this.ckdj = ckdj;
} public String getFileName() {
return fileName;
} public void setFileName(String fileName) {
this.fileName = fileName;
} public void setCkdjSrv(CkdjService ckdjSrv) {
this.ckdjSrv = ckdjSrv;
} public String getExportBatch() {
return exportBatch;
} public void setExportBatch(String exportBatch) {
this.exportBatch = exportBatch;
} }
接着是struts2.xml文件
<action name="exportExcel" class="excelAction">
<result name="success" type="stream">
<param name="contentType">application/vnd.ms-excel</param>
<param name="inputName">excelStream</param>
<param name="contentDisposition">attachment;filename="${fileName}.xls"</param>
<param name="bufferSize">1024</param>
</result>
</action>
然后是ExportExcel.java类的代码:
/**
* 导出Excel文档
* @author zhaoxz
*
*/
@SuppressWarnings("unchecked")
public class ExportExcel { /**
* 创建workbook
* @param title
* @param headers
* @param ckdj
*/
public HSSFWorkbook exportExcel(String title,String[] headers,Ckdj ckdj,String exportBatch){ //声明一个工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
//生成一个表格
HSSFSheet sheet = workbook.createSheet(title);
//设置表格默认列宽为15个字节
sheet.setDefaultColumnWidth(15);
//生成一个样式
HSSFCellStyle style = workbook.createCellStyle();
//设置样式
style.setFillForegroundColor(HSSFColor.WHITE.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.BLACK.index);
font.setFontHeightInPoints((short)14);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
//把字体应用到当前样式
style.setFont(font); // 生成并设置另一个样式
HSSFCellStyle style2 = workbook.createCellStyle();
style2.setFillForegroundColor(HSSFColor.WHITE.index);
style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style2.setBorderRight(HSSFCellStyle.BORDER_THIN);
style2.setBorderTop(HSSFCellStyle.BORDER_THIN);
style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 生成另一个字体
HSSFFont font2 = workbook.createFont();
font2.setFontHeightInPoints((short)12);
font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 把字体应用到当前的样式
style2.setFont(font2); // 生成并设置另一个样式
HSSFCellStyle style3 = workbook.createCellStyle();
style3.setFillForegroundColor(HSSFColor.WHITE.index);
style3.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style3.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style3.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style3.setBorderRight(HSSFCellStyle.BORDER_THIN);
style3.setBorderTop(HSSFCellStyle.BORDER_THIN);
style3.setAlignment(HSSFCellStyle.ALIGN_LEFT);
style3.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 生成另一个字体
HSSFFont font3 = workbook.createFont();
font3.setFontHeightInPoints((short)12);
font3.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 把字体应用到当前的样式
style3.setFont(font3); // 生成并设置另一个样式 样式4
HSSFCellStyle style4 = workbook.createCellStyle();
style4.setFillForegroundColor(HSSFColor.WHITE.index);
style4.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style4.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style4.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style4.setBorderRight(HSSFCellStyle.BORDER_THIN);
style4.setBorderTop(HSSFCellStyle.BORDER_THIN);
style4.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style4.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 生成另一个字体
HSSFFont font4 = workbook.createFont();
font4.setFontHeightInPoints((short)11);
// 把字体应用到当前的样式
style4.setFont(font4); //产生表格标题行
HSSFRow row = sheet.createRow(0);
HSSFCell cel = row.createCell(0);
cel.setCellStyle(style);
cel.setCellValue("天维讯达无线电设备检测(北京)有限责任公司");
HSSFCell c2 = row.createCell(1);
c2.setCellStyle(style);
HSSFCell c3 = row.createCell(2);
c3.setCellStyle(style);
HSSFCell c4 = row.createCell(3);
c4.setCellStyle(style);
HSSFCell c5 = row.createCell(4);
c5.setCellStyle(style);
HSSFCell c6 = row.createCell(5);
c6.setCellStyle(style);
HSSFCell c7 = row.createCell(6);
c7.setCellStyle(style);
//合并单元格
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 6)); //2行
HSSFRow row2 = sheet.createRow(1);
HSSFCell cel2l = row2.createCell(0);
cel2l.setCellStyle(style2);
if(exportBatch.equals("0")){
cel2l.setCellValue("出库单");
}else{
cel2l.setCellValue("出库单(第"+ckdj.getBatch()+"批)");
}
HSSFCell rc2 = row2.createCell(1);
rc2.setCellStyle(style);
HSSFCell rc3 = row2.createCell(2);
rc3.setCellStyle(style);
HSSFCell rc4 = row2.createCell(3);
rc4.setCellStyle(style);
HSSFCell rc5 = row2.createCell(4);
rc5.setCellStyle(style);
HSSFCell rc6 = row2.createCell(5);
rc6.setCellStyle(style);
HSSFCell rc7 = row2.createCell(6);
rc7.setCellStyle(style);
sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 6)); //合并单元格 //3行
HSSFRow rowhead = sheet.createRow(2);
sheet.addMergedRegion(new CellRangeAddress(2, 2, 0, 4)); //合并单元格
//3行左
HSSFCell cel3l = rowhead.createCell(0);
cel3l.setCellStyle(style3);
cel3l.setCellValue("所属项目:"+ckdj.getProjectNumber());
//3行右
HSSFCell cel3r = rowhead.createCell(5);
cel3r.setCellStyle(style2);
cel3r.setCellValue("出库单号:"+ckdj.getReleasingNumber());
HSSFCell cel27 = rowhead.createCell(6);
cel27.setCellStyle(style2);
sheet.addMergedRegion(new CellRangeAddress(2, 2, 5, 6)); HSSFRow rowbody = sheet.createRow(3);
for (int i = 0; i < headers.length; i++) {
HSSFCell cell = rowbody.createCell(i);
cell.setCellStyle(style2);
HSSFRichTextString text = new HSSFRichTextString(headers[i]);
cell.setCellValue(text);
} //遍历集合数据,产生数据行
Iterator it = ckdj.getGoods().iterator();
int index = 3;
while (it.hasNext()) {
index++;
row = sheet.createRow(index);
CkdjDetailed t = (CkdjDetailed)it.next(); //创建单元格
HSSFCell cell0 = row.createCell(0);
cell0.setCellStyle(style4);
cell0.setCellValue(t.getNum()); HSSFCell cell1 = row.createCell(1);
cell1.setCellStyle(style4);
cell1.setCellValue(t.getEqName()); HSSFCell cell2 = row.createCell(2);
cell2.setCellStyle(style4);
cell2.setCellValue(t.getEqStandard()); HSSFCell cell3 = row.createCell(3);
cell3.setCellStyle(style4);
cell3.setCellValue(t.getEqSernumber()); HSSFCell cell4 = row.createCell(4);
cell4.setCellStyle(style4);
cell4.setCellValue(t.getEqNums()); HSSFCell cell5 = row.createCell(5);
cell5.setCellStyle(style4);
cell5.setCellValue(t.getEqUnits()); HSSFCell cell6 = row.createCell(6);
cell6.setCellStyle(style4);
cell6.setCellValue("");
}
HSSFRow last1 = sheet.createRow(index+3);
HSSFCell lcel1 = last1.createCell(4);
lcel1.setCellValue("送货人:");
HSSFRow last2 = sheet.createRow(index+4);
HSSFCell lcel2 = last2.createCell(4);
lcel2.setCellValue("送货时间:");
HSSFRow last3 = sheet.createRow(index+5);
HSSFCell lcel3 = last3.createCell(4);
lcel3.setCellValue("收货人:");
HSSFRow last4 = sheet.createRow(index+6);
HSSFCell lcel4 = last4.createCell(4);
lcel4.setCellValue("收货时间:");
return workbook;
} /**
* 创建仓库workbook
* @param title
* @param headers
* @param rkdjs
* @return
*/
public HSSFWorkbook exportWareExcel(String title,String[] headers,List<Rkdj> rkdjs){ //声明一个工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
//生成一个表格
HSSFSheet sheet = workbook.createSheet(title);
//设置表格默认列宽为15个字节
sheet.setDefaultColumnWidth(15);
//生成一个样式
HSSFCellStyle style = workbook.createCellStyle();
//设置样式
style.setFillForegroundColor(HSSFColor.WHITE.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.BLACK.index);
font.setFontHeightInPoints((short)14);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
//把字体应用到当前样式
style.setFont(font); // 生成并设置另一个样式
HSSFCellStyle style2 = workbook.createCellStyle();
style2.setFillForegroundColor(HSSFColor.WHITE.index);
style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style2.setBorderRight(HSSFCellStyle.BORDER_THIN);
style2.setBorderTop(HSSFCellStyle.BORDER_THIN);
style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 生成另一个字体
HSSFFont font2 = workbook.createFont();
font2.setFontHeightInPoints((short)12);
font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 把字体应用到当前的样式
style2.setFont(font2); // 生成并设置另一个样式
HSSFCellStyle style3 = workbook.createCellStyle();
style3.setFillForegroundColor(HSSFColor.WHITE.index);
style3.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style3.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style3.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style3.setBorderRight(HSSFCellStyle.BORDER_THIN);
style3.setBorderTop(HSSFCellStyle.BORDER_THIN);
style3.setAlignment(HSSFCellStyle.ALIGN_LEFT);
style3.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 生成另一个字体
HSSFFont font3 = workbook.createFont();
font3.setFontHeightInPoints((short)12);
font3.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 把字体应用到当前的样式
style3.setFont(font3); // 生成并设置另一个样式 样式4
HSSFCellStyle style4 = workbook.createCellStyle();
style4.setFillForegroundColor(HSSFColor.WHITE.index);
style4.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style4.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style4.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style4.setBorderRight(HSSFCellStyle.BORDER_THIN);
style4.setBorderTop(HSSFCellStyle.BORDER_THIN);
style4.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style4.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 生成另一个字体
HSSFFont font4 = workbook.createFont();
font4.setFontHeightInPoints((short)11);
// 把字体应用到当前的样式
style4.setFont(font4); //列头
HSSFRow rowbody = sheet.createRow(0);
for (int i = 0; i < headers.length; i++) {
HSSFCell cell = rowbody.createCell(i);
cell.setCellStyle(style2);
HSSFRichTextString text = new HSSFRichTextString(headers[i]);
cell.setCellValue(text);
} //遍历集合数据,产生数据行
int index = 0;
Iterator it = rkdjs.iterator();
while (it.hasNext()) {
index++;
HSSFRow row = sheet.createRow(index);
Rkdj t = (Rkdj) it.next();
//创建单元格
HSSFCell cell0 = row.createCell(0);
cell0.setCellStyle(style4);
cell0.setCellValue(t.getJoinTime()); HSSFCell cell1 = row.createCell(1);
cell1.setCellStyle(style4);
cell1.setCellValue(t.getJoinNumbers()); HSSFCell cell2 = row.createCell(2);
cell2.setCellStyle(style4);
cell2.setCellValue(t.getEquipmentName()); HSSFCell cell3 = row.createCell(3);
cell3.setCellStyle(style4);
cell3.setCellValue(t.getStandard()); HSSFCell cell4 = row.createCell(4);
cell4.setCellStyle(style4);
cell4.setCellValue(t.getSeriesNumber()); HSSFCell cell5 = row.createCell(5);
cell5.setCellStyle(style4);
cell5.setCellValue(t.getLocation()); HSSFCell cell6 = row.createCell(6);
cell6.setCellStyle(style4);
cell6.setCellValue(t.getAmount()); HSSFCell cell7 = row.createCell(7);
cell7.setCellStyle(style4);
cell7.setCellValue(t.getStock()); HSSFCell cell8 = row.createCell(8);
cell8.setCellStyle(style4);
cell8.setCellValue(t.getComments());
}
return workbook;
}
}
这样基本就没什么问题了,本人小白,希望能得到更多的指导!在此多谢了....
poi实现Excel导出的更多相关文章
- 转:POI操作Excel导出
package com.rd.lh.util.excel; import java.beans.PropertyDescriptor; import java.io.FileOutputStream; ...
- Apache POI实现excel导出
链接:http://poi.apache.org/ Excel数据导出步骤: 使用poi 完成账户数据的导出功能 导入poi jar包并添加到classpath中 1.查询数据 2.定义导出头 St ...
- POI之Excel导出
1,在maven的pom文件中添加依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId& ...
- poi excel导出,下载
poi.jar包 public void downExcel(HttpServletResponse response,Page<ShopApply> page) throws Excep ...
- 使用POI实现数据导出Excel表格
package cn.sh.bzt.kwj.action; import java.io.IOException; import java.io.OutputStream; import java.t ...
- Java中使用poi导入、导出Excel
一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...
- Java使用POI实现数据导出excel报表
Java使用POI实现数据导出excel报表 在上篇文章中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅 ...
- POI通过模板导出EXCEL文件
一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出. 这次在项目中需要用到模板,导出的内容包括(1.模板中 ...
- 纳税服务系统【用户模块之使用POI导入excel、导出excel】
前言 再次回到我们的用户模块上,我们发现还有两个功能没有完成: 对于将网页中的数据导入或导出到excel文件中,我们是完全没有学习过的.但是呢,在Java中操作excel是相对常用的,因此也有组件供我 ...
随机推荐
- python3中文字符编码问题
最近在进行网络爬虫时,被中文的编码问题搞得很头疼,特别是在windows环境下. 1.爬取到的中文网页内容,在解析时出现解析错误 一般情况下,我们都是用urllib中的相关函数,进行web页面的爬取, ...
- 开发H5小游戏
Egret白鹭H5小游戏开发入门(一) 前言: 好久没更新博客了,以前很多都不会,所以常常写博客总结,倒是现在有点点经验了就懒了.在过去的几个月里,在canvas游戏框架方面,撸过了CreateJ ...
- rsyslog 同步丢失问题
<pre name="code" class="html">[root@dr-mysql01 zjzc_log]# wc -l localhost_ ...
- sql Sever 修改表中的列名
EXEC SP_RENAME 'LeInterface.iYear','iLeYear','COLUMN' EXEC SP_RENAME 'LeInterface.imonth','iLemonth' ...
- 如何在Excel中启用宏?
OFFICE2003版本中启用宏的方法: 1.首先打开EXCEL应用程序. 2.点击上方的"工具"--"宏"--"安全性" 3.在" ...
- C plus plus primer plus
1,运算符,操作数; 使用相同的符号(基本运算符,+ - * / %),进行多种操作(指使用一个运算符符号,对不用类型的变量进行操作,int ,float,double),此概念将运算符的重载(op ...
- 查看MySQL数据库的默认编码
查看MySQL数据库的默认编码 1.使用status命令能够显示数据库的相关系信息,示例如下: mysql> status;————–mysql Ver 14.12 Distrib 5.0.77 ...
- 关于XMLEncoder和XMLDecoder
我们用XMLEncoder和XMLDecoder来序列化和反序列化一个类. 我觉得需要注意的是,我们在new一个对象的时候,XMLEncoder本身默认的是类中无参的构造函数,我今儿在实现的时候,老是 ...
- zookeeper[2] zookeeper原理(转)
转自:http://cailin.iteye.com/blog/2014486 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现 ...
- SQL VS NoSQL
(关系型与非关系型)数据库的区别: 关系型和非关系型数据库的主要差异是数据存储的方式 1.1 数据表 VS 数据集 关系型数据天然就是表格式的,因此存储在数据表的行和列中.数据表可以彼此关联协作存储, ...