最近做了一个导出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. Nginx源码研究三:Epoll在NGINX中的使用

    Web服务器在面对高并发的情况下,网络的IO一般选择IO复用,像apache选择的Select/poll.Nginx在linux 2.6后选择Epoll做网路IO,提高了WEB服务的并发能力. 在本章 ...

  2. easyui 1.3.3 中combotree post传参问题

    重写Tree的loader,增加queryParams属性支持,并且增加setQueryParams方法 //重写tree的loader $.extend($.fn.tree.defaults, { ...

  3. webserver and application server

    http://www.diffen.com/difference/Application_Server_vs_Web_Server http://www.differencebetween.com/d ...

  4. 用 O(1) 时间检测整数 n 是否是 2 的幂次。

    位操作 2的幂次数 2  10 4 100 8 1000 16 10000 ... 1 class Solution { 2 /* 3 * @param n: An integer 4 * @retu ...

  5. POJ-魔兽世界之一:备战

    描述 魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部.两个司令部之间是依次排列的若干城市. 红司令部,City 1,City 2,……,City n,蓝司令部 两军的司令部都会制造武士.武士一共 ...

  6. Beanstalkd介绍

    特征 优先级:任务 (job) 可以有 0~2^32 个优先级, 0 代表最高优先级,beanstalkd 采用最大最小堆 (Min-max heap) 处理任务优先级排序, 任何时刻调用 reser ...

  7. Ajax解析

    1.Ajax Asynchronous(异步的) javascript and xml 技术组成: CSS + xml +JavaScript +DOM Ajax核心对象: XmlHttpReques ...

  8. 转义字符和ASCII

    一.字符(char)   数字(int)   屏幕显示 '\n'                      10                   换行 '\0'                   ...

  9. 【蓝桥杯】PREV-5 错误票据

    题目链接:gpid=T28">http://lx.lanqiao.org/problem.page? gpid=T28   历届试题 错误票据   时间限制:1.0s   内存限制:2 ...

  10. i++与++i的区别,使用实例说明

    /** * 类名:TEST.java<br> * <p> * 功能:i++与++i的区别,使用实例说明 * </p> * * @Author:<a href= ...