最近做了一个导出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导出的更多相关文章

  1. 转:POI操作Excel导出

    package com.rd.lh.util.excel; import java.beans.PropertyDescriptor; import java.io.FileOutputStream; ...

  2. Apache POI实现excel导出

    链接:http://poi.apache.org/ Excel数据导出步骤: 使用poi 完成账户数据的导出功能 导入poi  jar包并添加到classpath中 1.查询数据 2.定义导出头 St ...

  3. POI之Excel导出

    1,在maven的pom文件中添加依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId& ...

  4. poi excel导出,下载

    poi.jar包 public void downExcel(HttpServletResponse response,Page<ShopApply> page) throws Excep ...

  5. 使用POI实现数据导出Excel表格

    package cn.sh.bzt.kwj.action; import java.io.IOException; import java.io.OutputStream; import java.t ...

  6. Java中使用poi导入、导出Excel

    一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...

  7. Java使用POI实现数据导出excel报表

    Java使用POI实现数据导出excel报表 在上篇文章中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅 ...

  8. POI通过模板导出EXCEL文件

    一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出. 这次在项目中需要用到模板,导出的内容包括(1.模板中 ...

  9. 纳税服务系统【用户模块之使用POI导入excel、导出excel】

    前言 再次回到我们的用户模块上,我们发现还有两个功能没有完成: 对于将网页中的数据导入或导出到excel文件中,我们是完全没有学习过的.但是呢,在Java中操作excel是相对常用的,因此也有组件供我 ...

随机推荐

  1. DotNET知识点总结五(笔记整合)

    1.委托:通常指的是 多播委托 通常的说,委托就是一个存放方法指针的容器,是一个安全的函数指针,供程序员安全调用.委托的本质就是一个类,继承于MulticastDelegate——>Delega ...

  2. MemCache内存缓存系统

    memcached是一种缓存技术, 他可以把你的数据放入内存,从而通过内存访问提速,因为内存最快的, memcached技术的主要目的提速, 默认情况下占用的端口号为:11211. 在memachec ...

  3. AdHoc发布时出现重复Provisioning Profile的解决方案

    当在developer.apple.com更新Provisioning Profile(添加新机器)后,下载到本地,双击载入xcode,运行时没问题.但如果用adhoc发布,可能会发现重复的provi ...

  4. Altium Designer summer 9 布线 - 差分对布线

    差分信号系统是采用双绞线进行信号传输的,双绞线中的一条信号线传送原信号,另一条传送的是与原信号反相的信号.差分信号是为了解决信号源和负载之间没有良好的参考地连接而采用的方法,它对电子产品的干扰起到固有 ...

  5. c++ string类型转换为char *类型

    string 是c++标准库里面其中一个,封装了对字符串的操作 把string转换为char* 有3中方法: 1.data 如: string str="abc"; char *p ...

  6. 【转】java读写二进制文件的解决方法

    原文网址:http://www.jb51.net/article/36940.htm 接口:Writerable 复制代码代码如下: package com.geoway.pad.common; im ...

  7. vs2010 sp1 创建silverlight 时,提示我 “在创建silverlight项目之前,您需要安装最新的silverlight Developer运行时

    ---恢复内容开始--- Silverlight 5 Developer Rumtime (32bit): http://go.microsoft.com/fwlink/?LinkId=229323 ...

  8. linux下的java远程调试jpda+tomcat

    项目放到linux服务器了,服务器的环境或者数据可能和我们本地不一样,这个时候我们可能需要远程的断点进行调试,来查看请求过程中的各个变量的值.这里我们的应用服务器用的tomcat5.5.17 这个时候 ...

  9. Storm拓扑的并行度(parallelism)介绍

    Storm拓扑的并行度(parallelism)介绍 1.Storm分为3个主要实体,用于在Storm集群中运行拓扑        工作进程:Worker Process,也称为Worker      ...

  10. Objective-C priority queue

    http://stackoverflow.com/questions/17684170/objective-c-priority-queue PriorityQueue.h // // Priorit ...