在ssh项目中导出excel

一、在这里主要贴出struts中的配置及Action的写法,至于持久层和业务层就不再贴出。

二、使用的是poi-3.2.jar实现Excel数据导出

三、struts.xml配置文件中的配置
        <action name="chapterAction_*" class="chapterAction" method="{1}">
            <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>
            <result name="error">/WEB-INF/page/academic/error.jsp</result>
        </action>

四、导出数据封装的类

public class ExpChapter {
        //章节名称
        private String chapterName;
        //课程名称
        private String courseName;

//Excel表头
        private String[] columnNames = new String[] { "章节名称","课程名称" };
        //方法名称数组
        private String[] columnMethods = new String[] { "getChapterName","getCourseName" };

//省略get 和 set 方法

}

五、Action中具体代码实现

//id数组

private String[] chapterIds;

private InputStream excelStream;
    private String fileName;
    @Resource(name = ChapterService.BEAN_NAME)
    private ChapterService chapterService;

//省略get 和 set 方法

public String exp() throws Exception{
        if (null != chapterIds) {
            //从数据库查询出需要的数据
            List<Chapter> chapters = chapterService.find(chapterIds);
            //导出数据集合
            List<ExpChapter> ecs = new ArrayList<ExpChapter>();
            for (Chapter chapter : chapters) {
                ExpChapter ec = new ExpChapter();
                ec.setChapterName(chapter.getChapterTitle());
                ec.setCourseName(chapter.getCourse().getCourseName());
                ecs.add(ec);
            }
            //创建Excel
            HSSFWorkbook workbook = getWorkbook(ecs);
            if (workbook != null) {
                try {
                    Calendar c = Calendar.getInstance();
                    int year = c.get(Calendar.YEAR);
                    int month = c.get(Calendar.MONTH) + 1;
                    String month_ = new String("" + month);
                    if (month < 10) {
                        month_ = "0" + month;
                    }
                    int day = c.get(Calendar.DAY_OF_MONTH);
                    String day_ = new String("" + day);
                    if (day < 10) {
                        day_ = "0" + day;
                    }
                    // 第四步:将工作簿写入最上面定义的InputStream流——名称为excelStream,这个名字对应struts.xml中配置的inputName参数
                    this.workbook2InputStream(workbook, year + "-" + month_
                            + "-" + day_ + "");
                    return SUCCESS;
                } catch (IOException e) {
                    e.printStackTrace();
                    request.setAttribute("message", "创建Excel失败");
                    return ERROR;
                }
            } else {
                System.out.println("创建失败");
                return ERROR;
            }
        }
        return ERROR;
    }

/*
      * 将Workbook写入到InputStream
      */
     private void workbook2InputStream(HSSFWorkbook workbook,String fileName) throws Exception{
            this.fileName = fileName; //设置fileName
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            workbook.write(baos);
            baos.flush();
            byte[] aa = baos.toByteArray();
            excelStream = new ByteArrayInputStream(aa, 0, aa.length);
            baos.close();
     }

/*
     * 将list转换为Excel工作表
     */
    private HSSFWorkbook getWorkbook(List<ExpChapter> expChapters)
            throws SecurityException, NoSuchMethodException,
            IllegalArgumentException, IllegalAccessException,
            InvocationTargetException {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("sheet1");
        String[] columnNames;
        String[] columnMethods;

ExpChapter c = expChapters.get(0);
        columnNames = c.getColumnNames();
        columnMethods = c.getColumnMethods();

HSSFRow row = sheet.createRow(0);
        HSSFCell cell;
        for (int i = 0; i < columnNames.length; i++) {
            cell = row.createCell(i); // 创建第i列
            cell.setCellValue(new HSSFRichTextString(columnNames[i]));
        }
        // 下面是输出各行的数据
        for (int i = 0; i < expChapters.size(); i++) {
            c = expChapters.get(i);
            row = sheet.createRow(i + 1);// 创建第i+1行
            for (int j = 0; j < columnMethods.length; j++) {
                cell = row.createCell(j);// 创建第j列
                Method method;
                method = c.getClass().getMethod(columnMethods[j]); // 这里用到了反射机制,通过方法名来取得对应方法返回的结果对象
                Object obj = method.invoke(c);
                cell.setCellValue(obj.toString());
            }
        }
        return workbook;
    }

六、页面内容省略

七、说明:代码不能直接运行,只是贴出主要部分。

时间: 2024-07-28 14:39:03

在ssh项目中导出excel的相关文章

ASP.net中导出Excel的简单方法介绍

下面介绍一种ASP.net中导出Excel的简单方法 先上代码:前台代码如下(这是自己项目里面写的一点代码先贴出来吧) <div id="export" runat="server" style="width: 700px; margin-left: auto; margin-right: auto;"> <!--startprint--> <table width="100%" border=&

Asp.net中导出Excel文档(Gridview)

主要思路,通过GridView来导出文档. 新建一个Aspx页面,页面创建GridView控件,后台绑定好数据源.然后load中直接打印即可导出 前台的GridView <asp:GridView ID="GridView1" BorderColor="Black" runat="server" AutoGenerateColumns="False" Font-Size="12px" Width=&q

公司项目笔记-导出excel

一.asp.net中导出Excel的方法:在asp.net中导出Excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出流写给浏览器.在Response输出时,t分隔的数据,导出Excel时,等价于分列,n等价于换行. 1.将整个html全部输出Excel此法将html中所有的内容,如按钮,表格,图片等全部输出到Excel中. Response.Clear();        Response.Buffer=   true;  

SpringMVC中导出Excel文件,关于弹出一个选择框,选择导出Excel文件的路径项目细节

最近项目上需要写一个导出excel功能,在开始的时候用ajax发送请求,不弹出导出路径选择框,后来在网上搜了一些资料,找到了问题所在,做一下总结: 前端页面:thymeleaf 后端语言:java 导出Excel:POI模式 1.ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的.文件的下载是以二进制形式进行的,ajax没法解析后台返回的文件流,所以无法处理二进制流response输出来下载文件.将ajax请求改为loaction.href的形式发送请求,浏览器是可以识别二进制的

从数据库中导出excel报表

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

Java中导出Excel数据,封装Bean

在Java中封装导出Excel数据的总体思路为: 1.导出,根据查询得到的数据(一般我们页面上用的是查询条件带分页的),我们需要把查询条件带到后台重新查询,并且是查询全部数据,不带分页 2.不能用ajax异步提交.应该用location.href=""的方式,把处理的流交给浏览器来处理,JS无法处理流计算. 3.封装统一的Bean实体,主要输入导出的列名,excel名,数据集即可导出. 用到的Maven地址: <!-- poi --> <dependency>

在SSH项目中实现分页效果

在实现分页的时候,我使用的是数据库下面的User表,实现的效果是通过分页查询 能够将表中的数据分页显示,点击相关的按钮实现:首页.上一页.下一页.末页的显示 1新建一个dynamic web project项目 ,导入SSH项目所需要的jar antlr-2.7.7.jar c3p0-0.9.5.2.jar classmate-1.3.0.jar com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.apache.comm

C#项目中操作Excel文件——使用NPOI库

转载自:http://blog.csdn.net/dcrmg/article/details/52356236# 感谢-牧野- 实际C#项目中经常会涉及到需要对本地Excel文件进行操作,特别是一些包含数据记录.分析.汇总功能模块的项目.常用的操作Excel文件的方法主要有三个: 1. OleDb: 这种方式是把整个Excel文件当做一个数据源来进行数据的读取操作. 优点:实现方式简单,读取速度快: 缺点:读取Excel数据的过程不太灵活,对内存的占用比较高,当数据量变的很大时,容易由于内存空间

java 中导出Excel

[java] view plaincopy package oa.common.utils; import java.io.OutputStream; import java.util.List; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import java.lang.reflect.Field; import jxl.Workbook; imp