用jxl导出excel报表

1.在项目中加入jxl.jar包

2.页面是一个from表单,也可以是一个a标签...,示例如下

 1 <s:form action="claimVoucherStatistics_createDetailExcel.action" name="queryForm">
 2       <label for="time">年份:</label>
 3       <s:property value="year"/>
 4       <label for="end-time">月份:</label>
 5       <s:property value="selectMonth"/>
 6      <s:hidden name="year" value="%{year}"/>
 7      <s:hidden name="selectMonth" value="%{selectMonth}"/>
 8      <s:hidden name="departmentId" value="%{departmentId}"/>
 9      <input type="submit" class="submit_01" value="导出报表"/>
10 </s:form>

3.后台代码,示例如下

 1     /**
 2      *
 3      */
 4     private static final long serialVersionUID = 1L;
 5
 6     //claimVoucherStatistics_getDeptStatisticsByMonth.action
 7     private PageInfo pageInfo;
 8     private BizClaimVoucherStatisticsService voucherStatisticsService;
 9     private Short year;//年
10     private Short startMonth;//开始月份
11     private Short endMonth;//结束月份
12     private Integer pageIndex;//当前页码
13
14     private Short selectMonth ;//选择查询的月份
15     private Long departmentId;//选择查询的部门编号
16     private List<Detail> detailList;//详情集合
17     private Double detailCount=0.0;
18
19     private JFreeChart chart;//图形工具
20     private String fileName; //导出报表时显示的文件名
21     /**
22      * 导出报表
23      * @return
24      * @throws Exception
25      */
26     public String createDetailExcel() throws Exception {
27         //fileName=year+"年"+selectMonth+"月"+detailList.get(0).getDeptName()+"月度报销统计表";
28         return "detailExcel";
29     }
30     public InputStream getInputStream() {
31         //查询到的list集合数据
32         detailList=voucherStatisticsService.getDeptVoucherDetailByMonth(year,selectMonth,departmentId);
33         Object[][] objectArray=new Object[detailList.size()][];
34
35         //把集合循环在次封装到一个二维数组
36         for(int i=0;i<detailList.size();i++){
37             Object ob[]={detailList.get(i).getName(),detailList.get(i).getTotalAccount(),detailList.get(i).getYear()
38                     ,detailList.get(i).getMonth(),detailList.get(i).getDeptName()};
39             objectArray[i]=ob;
40             ob=null;
41         }
42         String headTitle=year+"年"+selectMonth+"月"+detailList.get(0).getDeptName()+"月度报销统计表";
43         fileName=headTitle;
44         String []titles={"报销人","报销总额","年份","月份","部门"};
45         ByteArrayOutputStream out = new ByteArrayOutputStream();
46         //调用工具类
47         new ToExcelUtil().printToExcel(objectArray, out, headTitle, titles);
48         return new ByteArrayInputStream(out.toByteArray());
49     }
50
51     public String getFileName() throws Exception {
52         //return fileName;
53         /**
54          * 解决中文乱码
55          */
56         return java.net.URLEncoder.encode(fileName, "UTF-8");//??????????????????
57     }
58
59
60     public void setFileName(String fileName) {
61         this.fileName = fileName;
62     }

4.工具类,示例如下

 1 package cn.bd.jboa.util;
 2
 3 import java.io.OutputStream;
 4 import jxl.Workbook;
 5 import jxl.write.Label;
 6 import jxl.write.WritableCellFormat;
 7 import jxl.write.WritableSheet;
 8 import jxl.write.WritableWorkbook;
 9
10
11 public class ToExcelUtil {
12
13     /**
14      *
15      * @param objectArray 二维数组
16      * @param os 输出流
17      * @param headTitle 头部标题
18      * @param titles 标题
19      */
20
21     // 输出集合信息到Excel中
22         public void printToExcel(Object[][] objectArray,OutputStream os,String headTitle,String[] titles) {
23             try {
24                 // 打开Excel文件
25                 WritableWorkbook workBook = Workbook.createWorkbook(os);
26                 // 生成名为“图书信息汇总”的工作表,参数0表示这是第一页
27                 //WritableSheet sheet = workBook.createSheet("图书信息借阅汇总",0);
28                 WritableSheet sheet = workBook.createSheet(headTitle,0);
29                 /*String[] titles = { "图书编号", "图书分类", "图书名称", "作者", "出版社", "借阅状态","" };*/
30                 // 填充标题信息
31
32
33                 //*******************************合并单元格 **********************************//
34                 //sheet.mergeCells(int m,int n,int p,int q);
35                 //作用是从 (m,n)到(p,q)的单元格全部合并,比如:
36
37                 //合并第一列第一行到第五列第一行的所有单元格
38                 sheet.mergeCells(0,0,4,0);
39                 //给合并后(第0列第0行)的单元格赋值
40                 Label label3 = new Label(0, 0, headTitle);
41                 //单元格居中
42                 WritableCellFormat cellFormat = new WritableCellFormat();
43                 cellFormat.setAlignment(jxl.format.Alignment.CENTRE);
44                 label3.setCellFormat(cellFormat);
45                 //将定义好的单元格添加到工作表中
46                 sheet.addCell(label3);
47                 //合并既可以是横向的,也可以是纵向的。合并后的单元格不能再次进行合并,否则会触发异常。
48                 //**************************** 合并单元格 ********************************//
49
50
51
52
53                 for (int i = 0; i < titles.length; i++) {
54                     // 在Label对象的构造子中指名单元格位置是第i列第0行(i,1),单元格内容为titles[i]
55                     Label label = new Label(i, 1, titles[i]);
56                     // 将定义好的单元格添加到工作表中
57                     sheet.addCell(label);
58                 }
59                 //准备填充单元格的数据源
60                 for (int j = 0; j < objectArray.length; j++) {
61                     Object[] cellContents = objectArray[j];
62
63                     //将数据填充到单元中
64                     for (int i = 0; i < cellContents.length; i++) {
65                         Object content = cellContents[i];
66                             // 在Label对象的构造子中指名单元格位置是第i列第0行(i,0),单元格内容为titles[i]
67                             Label label = new Label(i, j + 2, cellContents[i].toString());///
68                             // 将定义好的单元格添加到工作表中
69                             sheet.addCell(label);
70                     }
71                 }
72                 // 写入数据并关闭文件
73                 workBook.write();
74                 workBook.close();
75
76             } catch (Exception e) {
77                 e.printStackTrace();
78                 System.out.println(e);
79             }
80         }
81 }

5.struts.xml的配置文件

 1         <!-- 月度报销单 -->
 2         <action name="claimVoucherStatistics_*" class="VoucherStatisticsAction" method="{1}">
13             <result name="detailExcel" type="stream">
14                 <param name="contentType">
15                     application/vnd.ms-excel
16                 </param>
17                 <param name="inputStream">inputStream</param>
18                 <param name="contentDisposition">
19                     filename="${fileName}.xls"
20                 </param>
21                 <param name="bufferSize">1024</param>
22             </result>
26         </action>

6.导出的excel文件如图

时间: 2024-11-15 02:03:52

用jxl导出excel报表的相关文章

java导出excel报表

1.java导出excel报表: package cn.jcenterhome.util; import java.io.OutputStream;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletResponse;import jxl.Workbook;import jxl.format.Alignment;import jxl.format.Border;import jxl.for

从数据库中导出excel报表

通常需要将后台数据库中的数据集或者是其他列表等导出excel 报表,这里主要引用了Apose.cells dll 类库, (1)直接上主要代码: protected void txtExport_Click(object sender, EventArgs e)         { try             { // 获取测试商品报表 IList<ProductEntity> pList = ProductBLL.getProductList(); // 导出到Excel中 Workbo

Atitit.导出excel报表的设计与实现java&#160;.net&#160;php&#160;总结

Atitit.导出excel报表的设计与实现java .net php 总结 1. 导出报表 表格的设计要素1 1.1. 支持通用list<Map>转换1 1.2. 对于空列是否输出1 1.3. 支持http web直接输出1 2. Api2 2.1. private static void toExcel(String titles, String filds,List<Map> list,OutputStream outStrm)2 2.2. Response版 toExcel

poi导出Excel报表多表头双层表头、合并单元格

效果图: controller层方法: /**     *      * 导出Excel报表     * @param request     * @return     *      */    @RequestMapping("/export")    @ResponseBody    public void export(HttpServletRequest request,            HttpServletResponse response, String year

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

在上篇文章中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅仅简单的读取office中的数据.尤其是在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作.而数据导出的格式一般是EXCEL或者PDF .所以今天我们来简单看一下利用Apache  POI实现数据库中数据导出excel报表.在java中有很多实现数据导出excel报表的第三方jar包.但在比较了一下感觉还是POI相对来

jxl导出Excel中需要跳过的的坑

正如上篇文章(JXL封装不能使用static关键字问题)所说,在jxl导出Excel时候如果频繁使用到WritableCellFormat去设置单元格的样式,这个时候经常会出现两种情况: 1.报警告:Warning:  Maximum number of format records exceeded.  Using default format.虽然说程序员一般不看警告,but这个警告讨厌了,他会把你超过限制的格式恢复成默认格式.所以必须解决. 2.报异常:java.lang.ArrayInd

用jxl导出Excel

断断续续,终于把这个简单的功能实现了. 本身花的有效时间也不多,但是陆续出现好多蛋疼的问题,归根结底是自己程序功底不深厚,尤其对Java流理解不透彻. 还好今天时间充足,磨得我背疼不已的时候,终于把它整完了. 这里首先介绍下背景:SSM框架(前端easyui).POI因为乱码问题被pass掉.五一假期又没有花时间,不得不赶紧换个API把他整出来. 功能大致是这样的: 点击按钮导出所有的(不经分页的)数据到Excel中. busiAccept.jsp 1 <%@ page language="

zk实现导出Excel报表

package com.bailin.framework.util.excel; import java.util.ArrayList; import java.util.List; /**  * 行  *  * @author cj  *  */ public class Row { private List<Column> columnList = new ArrayList<Column>();  private String columnName; public List&

java中使用jxl导出Excel表格详细通用步骤

该方法一般接收两个参数,response和要导出的表格内容的list. 一般我们将数据库的数据查询出来在页面进行展示,根据用户需求,可能需要对页面数据进行导出. 此时只要将展示之前查询所得的数据放入session中备份一份,在调用导出方法时,从session中获取即可, 如果为后台直接导出,直接查询数据库后将结果传入即可,当然也可以在导出Excel方法中查询. 查询方法: // 获取查询结果存入session中        Object resultList = request.getAttr