`

导出Excel通用模块设计(修订版)

    博客分类:
  • java
阅读更多

/**
     * 导出Excel文件
     *
     * @param title
     *            String 导出文件的名字
     * @param t_headList
     *            List 表头信息 表头名字——
     *            fieldname,字段名字——field,对齐方式——align,值left,right;
     *            字段类型——fieldtype,值2-NUMERIC,12—VARCHAR,91—DATE,,数据参数——pattern
     *            宽度——width
     * @param dataList
     *            List 数据集合
     * **/
    public void xls(String title,List t_headList, List dataList) {
       try {
            HttpServletResponse response = getResponse();
            ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
            jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(byteOut);
            jxl.write.WritableSheet ws = wwb.createSheet(title, 0);
            //  设置冻结单元格
            ws.setRowView(0, 25);// 行高
            // putRowHead(ws, 0, t_headList);// 在第一行插入表头信息
            WritableFont font10 = new WritableFont(WritableFont.TIMES, 10,
                    WritableFont.BOLD, false);
            WritableCellFormat hwcf = new WritableCellFormat(font10);
            hwcf.setWrap(true);//自动换行
            // 水平居中
            hwcf.setAlignment(jxl.format.Alignment.CENTRE);
            // 垂直居中
            hwcf.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
            // 全边框
            hwcf.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THIN);
            for (int i = 0; t_headList!=null&&i < t_headList.size(); i++) {
                Map v = (Map) t_headList.get(i);
                String name = (String) v.get("FIELDNAME");
                java.math.BigDecimal width=(java.math.BigDecimal)v.get("WIDTH");
                Label cell = new Label(i, 0, "" + name, hwcf);
                CellFormat cf=cell.getCellFormat();
                ws.addCell(cell);
                if(width==null||"".equals(width))
                    ws.setColumnView(i, name.length() * 2 + 2); // 根据表头字数设置单元格 列, 宽
                else
                    ws.setColumnView(i, width.intValue());//根据规定的宽度设置宽度
            }

            // 9号 粗体
            WritableFont font9 = new WritableFont(WritableFont.TIMES, 9,
                    WritableFont.NO_BOLD, false);
            DecimalFormat df2 = (DecimalFormat) DecimalFormat.getInstance();// 格式化数字实例
           
            List list_wcf=new ArrayList();
            for (int k = 0; t_headList!=null&&k < t_headList.size(); k++) {
                Map map = (Map) t_headList.get(k);
                String align = (String) map.get("ALIGN");
                int fieldtype=Integer.parseInt(map.get("FIELDTYPE").toString());
                String pattern = (String) map.get("PATTERN");
                WritableCellFormat wcf =null;
                jxl.write.DateFormat df =null;
                jxl.write.NumberFormat nf =null;
                if(91 == fieldtype&&pattern!=null){
                    df=new jxl.write.DateFormat(pattern);
                    wcf=new WritableCellFormat(font9,df);
                }else if(fieldtype > 1 && fieldtype < 9 && fieldtype != 7&&pattern!=null){
                    nf=new jxl.write.NumberFormat(pattern);
                    wcf=new WritableCellFormat(font9,nf);
                }else
                    wcf=new WritableCellFormat(font9);
                wcf.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
                wcf.setWrap(true);
                // 全边框
                wcf.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THIN);
                if ("right".equals(align))
                    wcf.setAlignment(jxl.format.Alignment.RIGHT);
                else if("center".equals(align))
                    wcf.setAlignment(jxl.format.Alignment.CENTRE);
//                else if ("left".equals(align))
//                wcf.setAlignment(jxl.format.Alignment.LEFT);
               
                list_wcf.add(wcf);
            }
            for (int i = 0; i < dataList.size(); i++) {
                Map<String, Object> v = (Map) dataList.get(i);
                ws.setRowView(i + 1, 15);// 行高
                for (int k = 0; t_headList!=null&&k < t_headList.size(); k++) {
                    Map map = (Map) t_headList.get(k);
                    WritableCellFormat wcf = (WritableCellFormat)list_wcf.get(k);
                    String field = (String) map.get("FIELD");
                    int fieldtype=9;
                    if(map.get("FIELDTYPE")!=null)
                        fieldtype = Integer.parseInt(map.get("FIELDTYPE").toString());
                    String pattern = (String) map.get("PATTERN");
                    int p = field.trim().lastIndexOf(" ");
                    if (p > 0)
                        field = field.substring(p + 1, field.length());// 字段取别名
                    Object val = v.get(field);
                    if (91 == fieldtype && val != null && pattern!=null) {// 日期
                        try {
//                            System.out.println(val);
//                            val = getCurrentTime((Date) val, pattern);// 日期格式化输入样式
                            jxl.write.DateTime labelDTF = new jxl.write.DateTime(k, i + 1, (Date)val,wcf);
                            ws.addCell(labelDTF);
                        } catch (Exception e) {
                            e.printStackTrace();
                            System.out.println("日期格式化失败!");
                            Label cell = new Label(k, i + 1, "日期格式化失败", wcf);
                            ws.addCell(cell);
                        }
                    }else if (fieldtype > 1 && fieldtype < 9 && fieldtype != 7) {// 数字类型{
                        if (val ==null || "".equals(val.toString()))    val="0.0";
                            try {
                                jxl.write.Number labelNF = new jxl.write.Number(k, i + 1, Double.valueOf(val.toString()), wcf); 
                                ws.addCell(labelNF);
                            } catch (Exception e) {
                                e.printStackTrace();
                                System.out.println("数字格式化失败!");
                                Label cell = new Label(k, i + 1, "数字格式化失败", wcf);
                                ws.addCell(cell);
                            }
                    }else{
                        if (val != null) {
                            Label cell = new Label(k, i + 1, val.toString(), wcf);
                            ws.addCell(cell);
                        } else {
                            Label cell = new Label(k, i + 1, null, wcf);
                            ws.addCell(cell);
                        }
                    }
                }
            }
            wwb.write();
            wwb.close();
            // 输出文件名字编码
            String agent = getRequest().getHeader("USER-AGENT");
            if (null != agent && -1 != agent.indexOf("MSIE")) {
                title = java.net.URLEncoder.encode(title, "UTF-8").replace("+",
                        " ");
            } else if (null != agent && -1 != agent.indexOf("Firefox")) {
                title = new String(title.getBytes("UTF-8"), "iso8859-1");
            } else if (null != agent && -1 != agent.indexOf("Safari")) {
                title = java.net.URLEncoder.encode(title, "UTF-8").replace("+",
                        " ");
            }
            response.setContentType("application/xls");
            String exportname = title + "_"
                    + this.getCurrentTime(new Date(), "yyyy_MM_dd") + ".xls";
            response.addHeader("Content-Disposition", "attachment; filename=\""
                    + exportname + "\"");

            byte[] bytes = byteOut.toByteArray();
            response.setContentLength(bytes.length);
            ServletOutputStream sos = response.getOutputStream();
            sos.write(bytes, 0, bytes.length);
            sos.flush();
            sos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

配置表头数据库设计

 

URL    varchar2 (100)    请求地址        Action + '_' + method
Field    varchar2 (20)    字段代码       
FieldName    Nvarchar2(50)    字段名称    Null   
FieldType    Number(3)    字段类型    12    2-number,12- varchar2,91-Date
Align    varchar2 (10)    对齐方式    center    left,center,right
Pattern    varchar2 (10)    输出样式参数    Null    如:yyyy-mm-dd,#,###
Width    Number(3)    列宽度    Null

0
1
分享到:
评论

相关推荐

    .net导出excel通用方法

    在.NET开发中,导出Excel是一项常见的需求,特别是在Web应用程序如ASP.NET中,我们需要将数据库中的数据导出为用户友好的格式,Excel是最常见的选择。本文将深入探讨如何使用C#编程实现从数据库中读取数据并将其导出...

    Excel通用导出excel文件

    "Excel通用导出excel文件"这个主题涵盖了如何在不同情况下高效地实现这一目标,不论你是要处理小规模的数据还是大规模的数据集。下面,我们将深入探讨Excel的通用导出功能,以及如何利用它来优化你的工作流程。 ...

    DevExpress 控件导出Excel通用方法(GridControl打印多表头和图片等,并支持多个控件同时打印)

    该资源提供关于DevExpress Winform 的所有可打印控件的导出excel 的通用方法,解决GridControl自带方法不能导出图片,多表头无法导出等问题,解决PivotGridControl导出时候自动分组的问题,真正做到所见所得的导出...

    poi导出excel通用类

    标题“poi导出excel通用类”指的是使用Apache POI库创建一个可以用于导出Excel文件的Java类。Apache POI是开源项目,提供了一组API,使得开发者可以在Java应用程序中读写Microsoft Office格式的文件,包括Excel。在...

    易语言excel导出导入模块

    导出Excel文件通常涉及到以下几个关键知识点: 1. **创建工作簿**:在易语言中,我们需要先创建一个Excel工作簿对象,这是保存数据的基本单元。 2. **添加工作表**:工作簿可以包含多个工作表,每个工作表相当于...

    易语言超级列表框导出到Excel表格模块源码

    易语言超级列表框导出到Excel表格模块源码例程程序调用API函数实现超级列表框导出到Excel表格。易语言超级列表框导出到Excel表格模块源码使用HTML表格格式写出。资源作者:。资源界面:。资源下载:。

    GridControl通用导出Excel

    ### GridControl通用导出Excel知识点解析 #### 一、GridControl通用导出Excel概述 GridControl是DevExpress提供的一款用于展示和编辑数据的强大组件。在实际应用中,常常需要将GridControl中的数据导出到Excel中,...

    导出EXCEL模块源码

    8. **模块化设计**:将导出Excel的功能封装成模块,可以方便重复使用和维护,模块应该具有良好的输入/输出接口,便于其他程序调用。 9. **源码结构**:清晰的源码结构能提高代码可读性和可维护性,比如使用注释来...

    易语言高级表格导出EXCEL

    在"易语言高级表格导出EXCEL"这个主题中,我们主要关注的是如何使用易语言来操作表格数据,并将这些数据高效地导出到Microsoft Excel格式。易语言提供了丰富的库函数和组件,使得开发者可以方便地实现对表格数据的...

    poi导出根据模板导出excel和简单列表导出excel源码

    在本案例中,我们关注的是如何使用 Apache POI 库来导出 Excel 文件,特别是根据模板导出和简单列表导出。下面将详细介绍这个过程。 1. **Apache POI 概述** Apache POI 提供了 Java API 来读写 Microsoft Office ...

    使用aspose导出Excel(根据模板导出excel).zip

    在使用Aspose导出Excel时,模板通常是一个预先设计好的Excel文件,其中包含了固定的格式、样式和占位符。这些占位符将被程序中的动态数据替换。例如,你可以有一个模板包含一个表格,其中某些单元格内有"{0}"这样的...

    易语言高级表格快速导出EXCEL

    在"易语言高级表格快速导出EXCEL"这个项目中,开发者可能需要实现以下关键技术点: 1. **数据结构与表格对象**:首先,需要在易语言中创建合适的数据结构来存储表格数据,这通常涉及数组或链表等数据类型。同时,...

    易语言超级列表框一秒极速导入导出excel和数据库模块

    以往的易程序导出excel太慢了,特别是数据比较多的时候,本程序写excel模板的方法极速导入导出excel或者数据库,1万条数据不用一秒钟的时间,速度杠杠的,大家可以试试效果。本例子是用超级列表框做例子,如有需要...

    易语言导出EXCEL表格类模块

    易语言导出EXCEL表格类模块源码,导出EXCEL表格类模块,WriteBlankCell,WriteStringCell,WritePrefix,WriteSuffix,WriteCell,ExportData,导出EXCEL表格,置行数,置列数,置数据,导出,取数据,加一行,添加数据,线程_启动

    导出Excel功能,导出Excel功能,导出Excel功能

    在IT领域,导出Excel功能是一项非常常见的需求,特别是在数据分析、报表生成以及数据共享等场景中。Excel作为一款强大的电子表格软件,因其易用性、灵活性和强大的计算能力,成为了企业和个人处理数据的首选工具。...

    易语言源码易语言导出EXCEL表格类模块源码.rar

    易语言源码易语言导出EXCEL表格类模块源码.rar 易语言源码易语言导出EXCEL表格类模块源码.rar 易语言源码易语言导出EXCEL表格类模块源码.rar 易语言源码易语言导出EXCEL表格类模块源码.rar 易语言源码易语言导出...

    基于SpringBoot和POI实现单线程和多线程导出Excel.zip

    基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip...

    易语言导出EXCEL模块实例

    在易语言中,导出Excel模块是一个常见的需求,尤其是在数据处理和报表生成方面。下面将详细解释如何在易语言中实现Excel的导出功能,并探讨相关知识点。 1. 易语言基础: 易语言的核心理念是“易”,体现在其语法...

    c# 按模板导出Excel 通用类

    "c# 按模板导出Excel 通用类"就是为了解决这个问题而设计的,它允许开发者按照预先设定的模板快速、高效地生成Excel文件。 这个通用类的核心功能包括: 1. **模板支持**:它可以读取已存在的Excel模板文件,保留...

Global site tag (gtag.js) - Google Analytics