java操作导出Excel(jxl导出WritableWorkbook)jxl合并单元格,单元格的设置,单元格居中、字体、大小、换行、合并行,列宽、自动换行撑起高度、指定特定字符串样式等

new WritableCellFormat().setWrap(true);//通过调整宽度和高度自动换行

1.1     需求描述
MS的电子表格(Excel)是Office的重要成员,是保存统计数据的一种常用格式。作为办公文档,势必要涉及到的电子文档的交换,Excel是一种在企业中非常通用的文件格式,打印和管理也比较方便。在一个Java应用中,将一部分数据生成Excel格式,是与其他系统无缝连接的重要手段。

1.2     Excel开发常用开源工具
在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI。

1.3     比较开源工具的优缺点
1.3.1  Jxl优缺点
   Jxl特征有如下描述:        

 ●   支持Excel   95-2000的所有版本     

生成Excel   2000标准格式     
支持字体、数字、日期操作     
能够修饰单元格属性     
支持图像和图表        
应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。

1.3.2  Poi优缺点
Jakarta 的 POI Project 与 Java Excel API 在开源世界中可以说是并驾齐驱,但是也各有优劣,poi在某些细节有些小Bug并且不支持写入图片(poi其实可以写入图片,不过没有jxl来的方便,比较麻烦),其他方面都挺不错的;而JXL提供了对图片的支持(但是仅仅支持png格式的图片),问题就是对公式支持不是很好,但还是提供了简单的公式读取支持。因此你的项目中要选用什么样的第三方插件为完全由你的应用来决定。如果你的软件是跟财务有相当的关系的话,建议采用 POI Project,就我所在目前的项目来说由于用不到计算公式,而且很可能需要导出图片,因此,我的选择是 JXL 。

1.4     性能比较以及最终选择
1.4.1  内存消耗:(来自网络)
谈下JVM虚拟机内存消耗的情况.
数据量3000条数据,每条60列.JVM虚拟机内存大小64M.
使用POI:运行到2800条左右就报内存溢出.
使用JXL:3000条全部出来,并且内存还有21M的空间.
可想而知,在对内存的消耗方面差距还是挺大的.
也许是由于JXL在对资源回收利用方面做的还挺不错的。

1.4.2  速度效率(读取excel数据)(来自网络)
文件              POI加载耗时   POI总耗时     JXL加载耗时   Jxl总耗时  

文件大小57KB      1172 ms       1172 ms       1265 ms        2250 ms

文件大小652KB     2297 ms       2313 ms       4406 ms        9750 ms

文件大小2.24M      3109ms       3140ms        16313ms       37453ms

1.4.3  写excel速度效率
    jxl插入数据比poi速度要快

1.4.4  功能对比
相比提供的功能的话,JXL相对弱了点.所以如果要实现的功能比较复杂的情况下可以考虑使用POI,但如果只想生成一些大数据量可以考虑使用JXL,或者CSV也是一个不错的选择,不过CSV并不是真正的excel,然而jxl插入数据比poi速度要快。

writablesheet_jxl加边框,jxl合并单元格,单元格的设置,单元格居中、字体、大小、换行、合并行,列宽、指定特定字符串样式等

public void export() throws Exception
    {
        String title = "test.xls";
        String time = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
        String xlsfile =  "test_" + time + ".xls";
        try
        {
            
            // 构造临时文件全路径
            String fullFileName = System.getProperty("java.io.tmpdir") + "/" + xlsfile;
            // 创建Excel文件
            java.io.OutputStream os = new FileOutputStream(fullFileName);
            //创建一个可写入的excel文件对象
            WritableWorkbook workbook = Workbook.createWorkbook(os);
            //使用第一张工作表,将其命名为“title”
            WritableSheet sheet = workbook.createSheet(title, 0);
            
            //将第一行的高度设为14
            sheet.setRowView(0, 300);
            sheet.setRowView(1, 300);
            //将第一列的宽度设为28
            sheet.setColumnView(0, 28);
            
            //设置字体样式
            // 第一个参数表示所选字体
            // 第二个参数表示字体大小
            // 第三个参数表示粗体样式,有BOLD和NORMAL两种样式
            // 第四个参数表示是否斜体,此处true表示为斜体
            // 第五个参数表示下划线样式
            // 第六个参数表示颜色样式
            WritableFont bold = new WritableFont(WritableFont.createFont("宋体"), 11, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.WHITE);
            WritableCellFormat wcfFormat = new WritableCellFormat(bold);
            //自定义单元格的背景颜色"#2f75b5"
            Color color = Color.decode("#2f75b5");
            workbook.setColourRGB(Colour.ORANGE, color.getRed(), color.getGreen(), color.getBlue());
            Colour backgroundColour = Colour.ORANGE;
            wcfFormat.setBackground(backgroundColour);
            
            wcfFormat.setBorder(Border.ALL, BorderLineStyle.THIN,jxl.format.Colour.WHITE);//设置边框样式和颜色
            wcfFormat.setAlignment(jxl.format.Alignment.CENTRE);//单元格中的内容水平方向居中
            wcfFormat.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);//单元格中的内容垂直居中
            //单元格是字符串格式!第一个是代表列数,第二是代表行数,第三个代表要写入的内容,第四个代表字体格式  (0代表excel的第一行或者第一列)  
//            Label label = new Label(0, 0, "负载设备", wcfFormat); //这里的(0,0)表示第一行第一列的表格
//            sheet.addCell(label);
            
            //合并单元格,合并既可以是横向的,也可以是纵向的
            //这里的第一个数据代表第二列,第二个数据代表第一行,第三个数据代表第四列,第四个数据代表第二行
            //sheet.mergeCells(1, 0, 3, 1);
            sheet.mergeCells(0, 0, 0, 1);
            Label label = new Label(0, 0, "负载设备", wcfFormat);
            sheet.addCell(label);

            //关闭对象,释放资源
            workbook.write();
            workbook.close();
            os.close();
        }
        catch (Exception e)
        {
            PContext.printStackTrace(e);
        }
        
        
        xlsfile = java.net.URLEncoder.encode(xlsfile, "utf-8");
        HttpServletRequest request = HttpContext.getRequest();
        HttpServletResponse response = HttpContext.getResponse();
        response.sendRedirect(request.getContextPath()
                + "/servlet/HttpExporter?filename=" + xlsfile);
    }

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值