使用JXL组件操作Excel和导出文件

 

使用JXL组件操作Excel和导出文件

   

  原文链接:http://tianweili.github.io/blog/2015/01/29/use-jxl-produce-excel/

  前言:这段时间参与的项目要求做几张Excel报表,由于项目框架使用了jxl组件,所以把jxl组件的详细用法归纳总结一下。

1、简介

  jxl是一个韩国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI。其中jExcelAPI功能相对POI比较弱一点。但jExcelAPI对中文支持非常好,API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。

2、搭建环境

  网上下载jxl.jar包,然后导入工程项目lib中,即可使用。

3、基本操作

  1、创建文件

  以下实例是生成一个名为“test.xls”的Excel文件,其中第一个工作表被命名为“第一页”。编译执行后,会产生一个Excel文件。

// 生成Excel的类 
import java.io.File;import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;public class CreateExcel {public static void main(String args[]) {try {// 打开文件WritableWorkbook book = Workbook.createWorkbook(new File("c:/test.xls"));// 生成名为“第一页”的工作表,参数0表示这是第一页WritableSheet sheet = book.createSheet(" 第一页 ", 0);// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)// 以及单元格内容为testLabel label = new Label(0, 0, " test ");// 将定义好的单元格添加到工作表中
            sheet.addCell(label);// 生成一个保存数字的单元格,必须使用Number的完整包路径,否则有语法歧义。//单元格位置是第二列,第一行,值为123.456jxl.write.Number number = new jxl.write.Number(1, 0, 123.456);sheet.addCell(number);// 写入数据并关闭文件
            book.write();book.close();} catch (Exception e) {System.out.println(e);}}
}

  2、单元格操作

  Excel中很重要的一部分是对单元格的操作,比如行高、列宽、单元格合并等,所幸jExcelAPI提供了这些支持。这些操作相对比较简单,下面只介绍一下相关的API。

  合并单元格

  合并既可以是横向的,也可以是纵向的。合并后的单元格不能再次进行合并,否则会触发异常。

// 方法作用是从(m,n)到(p,q)的单元格全部合并
WritableSheet.mergeCells( int m, int n, int p, int q);// 合并第1列第1行到第3列第4行的所有单元格
sheet.mergeCells(0, 0, 2, 3);// 先合并单元格,再添加内容。并且定义的列行方位在合并的单元格第一个列行方位,否则添加不上内容,如下所示:
Label label = new Label(0, 0, " 测试 ");
sheet.addCell(label);

  行高和列宽

// 作用是指定第i+1行的高度
WritableSheet.setRowView( int i, int height);// 将第一行的高度设为200
sheet.setRowView(0, 200);// 作用是指定第i+1列的宽度
WritableSheet.setColumnView( int i, int width);// 将第一列的宽度设为30
sheet.setColumnView(0, 30);

  3、数据格式化

  字串格式化

  字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主要由WritableFont和WritableCellFormat类来负责。

  WritableFont有非常丰富的构造子方法,供不同情况下使用,jExcelAPI的java-doc中有详细列表,这里不再列出。

  WritableCellFormat类非常重要,通过它可以指定单元格的各种属性,后面的单元格格式化中会有更多描述。

//字体样式:宋体;11号;粗体
WritableFont font1 = new WritableFont(WritableFont.createFont("宋体"), 11, WritableFont.BOLD);
WritableCellFormat format1 = new  WritableCellFormat(font1);
Label label = new  Label( 0 , 0 , "test", format1);

  对齐方式

  在WritableCellFormat类中,还有一个很重要的方法是指定数据的对齐方式,比如针对我们上面的实例,可以指定:

// 把水平对齐方式指定为居中 
format1.setAlignment(jxl.format.Alignment.CENTRE);
// 把垂直对齐方式指定为居中 
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);

  4、读取文件

// 读取Excel的类 
import java.io.File;import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;public class ReadExcel {public static void main(String args[]) {try {Workbook book = Workbook.getWorkbook(new File("c:/test.xls"));// 获得第一个工作表对象Sheet sheet = book.getSheet(0);// 得到第一列第一行的单元格Cell cell = sheet.getCell(0, 0);String contents = cell.getContents();//得到单元格内容
            System.out.println(contents);book.close();} catch (Exception e) {System.out.println(e);}}
}

  程序的输出结果是:test。

  Cell接口的方法还可以获取单元格行、列位置,单元格是否隐藏等属性。具体的参考jxl的API。

  5、修改文件

  修改Excel文件除了打开文件的方式不同之外,其他与创建Excel是一样的。

// 修改Excel的类 
import java.io.File;import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;public class UpdateExcel {public static void main(String args[]) {try {// 获得Excel文件Workbook wb = Workbook.getWorkbook(new File("c:/test.xls"));// 打开一个文件的副本,并且指定数据写回到原文件WritableWorkbook book = Workbook.createWorkbook(new File("c:/test.xls"), wb);//修改原工作表数据WritableSheet sheet1 = book.getSheet(0);sheet1.addCell(new Label(0, 0, "覆盖原来的test"));// 添加一个新工作表WritableSheet sheet2 = book.createSheet(" 第二页 ", 1);sheet2.addCell(new Label(0, 0, " 第二页的测试数据 "));book.write();book.close();} catch (Exception e) {System.out.println(e);}}
}

4、导出文件

  附上一个导出文件例子。

  JS代码

$( function() {/** 报表导出按钮 */$( '#exportBtn' ).click( function() {if( !$( '#frm' ).validationEngine( 'validate' ) )return false;$( '#frm' )[ 0 ].action = '${ctx }/exportAction.do?m=exportExcel';$( '#frm' )[ 0 ].submit();$( this ).attr( 'disabled', true );window.setTimeout( function() {document.getElementById( 'exportBtn' ).disabled = false;}, 5000 );} );
} );

  JAVA代码

/** 根据浏览器类型,转换为当前浏览器支持的中文*/
String fileName = "Excel工作表";/** header 浏览器key */
String userAgent = request.getHeader("USER-AGENT").toUpperCase();
if (userAgent != null && userAgent.length() != 0 && fileName != null && fileName.length() != 0) {/** header IE */if ( -1 != userAgent.indexOf("MSIE") )fileName = URLEncoder.encode(fileName, "UTF-8");/** header Mozilla */else if ( -1 != userAgent.indexOf("MOZILLA") )fileName = new String(fileName.getBytes(), "ISO8859-1");/** header Safari */else if ( -1 != userAgent.indexOf("SAFARI") )fileName = new String( fileName.getBytes(), "ISO8859-1");/** header Opera */else if ( -1 != userAgent.indexOf("OPERA") )fileName = new String( fileName.getBytes(), "ISO8859-1");/** header 其它内核浏览器 */elsefileName = new String( fileName.getBytes(), "ISO8859-1");
}response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", new StringBuffer("attachment").append( ";filename=" ).append( fileName ).append(".xls").toString() );WritableWorkbook book = Workbook.createWorkbook(response.getOutputStream());
WritableSheet sheet = book.createSheet("Excel工作表", 0);//...

book.write();
book.close();

 原文链接:http://tianweili.github.io/blog/2015/01/29/use-jxl-produce-excel/

转载于:https://www.cnblogs.com/hellojava/archive/2013/01/06/2843710.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/274395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

facebook有哪些信息_关于Facebook表情表情符号的所有信息

facebook有哪些信息Ever since worldwide lockdown and restriction on travel have been imposed, platforms like #Facebook, #Instagram, #Zoom, #GoogleDuo, & #Whatsapp have become more important than ever to connect with your loved ones (apart from the sourc…

M2总结报告

团队成员 李嘉良 http://home.cnblogs.com/u/daisuke/ 王熹 http://home.cnblogs.com/u/vvnx/ 王冬 http://home.cnblogs.com/u/darewin/ 王泓洋 http://home.cnblogs.com/u/fiverice/ 刘明 http://home.cnblogs.com/u/liumingbuaa/ 由之望 http://www.cnbl…

react动画库_React 2020动画库

react动画库Animations are important in instances like page transitions, scroll events, entering and exiting components, and events that the user should be alerted to.动画在诸如页面过渡,滚动事件,进入和退出组件以及应提醒用户的事件之类的…

Weather

public class WeatherModel { #region 定义成员变量 private string _temperature ""; private string _weather ""; private string _wind ""; private string _city ""; private …

线框模型_进行计划之前:线框和模型

线框模型Before we start developing something, we need a plan about what we’re doing and what is the expected result from the project. Same as developing a website, we need to create a mockup before we start developing (coding) because it will cost so much…

撰写论文时word使用技巧(转)

------------------------------------- 1. Word2007 的表格自定义格式额度功能是很实用的,比如论文中需要经常插入表格的话, 可以在“表格设计”那里“修改表格样式”一次性把默认的表格样式设置为三线表,这样, 你以后每次插入的…

工作经验教训_在设计工作五年后获得的经验教训

工作经验教训This June it has been five years since I graduated from college. Since then I’ve been working as a UX designer for a lot of different companies, including a start-up, an application developer, and two consultancy firms.我从大学毕业已经五年了&a…

Wayland 源码解析之代码结构

来源:http://blog.csdn.net/basilc/article/details/8074895 获取、编译 Wayland 及其依赖库可参考 Wayland 官方网站的 Build 指南:http://wayland.freedesktop.org/building.html。 Wayland 实现的代码组成可以分成以下四部分: 1. Wayland…

中文排版规则_非设计师的5条排版规则

中文排版规则01仅以一种字体开始 (01 Start with only one font) The first tip for non-designers dealing with typography is simple and will make your life much easier: Stop combining different fonts you like individually and try using only one font in your fut…

基本响应性的Web设计测试工具

在重新设计页面的过程中。要使页面完全响应的设计(这意味着它会重新调整大小根据浏览器的尺寸和方向)。如iPhone和iPad的移动电话和平板电脑我碰到了一些非常方便的响应设计工具,帮我测试网站在不同的屏幕响应。下面的这些响应的网页设计工具…

ux设计_声音建议:设计UX声音的快速指南

ux设计Mating calls, warning grunts, and supportive coos are some of the sounds heard throughout the animal kingdom. All species use finely-tuned noises to communicate to one another and inform others of an action or behavior. We humans aren’t all that dif…

css3高级和低级样式属性先后顺序

写css hack 时,由于hack主要针对的是个别浏览器,hack的书写顺序应当是从一般到特殊的写法。 如: .box { width:200px; height:200px; position:fixed; left:0; top:0; _position:absolute; } 如果颠倒顺序,从特殊到一般&#xff0…

sans serif_Sans和Serif相遇可爱

sans serifI first noticed it in this tweet. Exciting upcoming product and snazzy motion work aside, “What a fascinating logotype!”, I exclaimed!我在此推文中首先注意到了它。 我惊呼即将推出的激动人心的产品和令人眼花,乱的动作,“多么迷人…

[ckeditor系列]ckeditor 自己写的一个简单的image上传js 运用iframe的ajax上传

ckeditor最近修改一个上传的,原来的Image的上传插件功能很多,但是自己用,没有必要,就进行了修改,后来就改成了目前的样子,根据_samples/api_dialog.html 进行了修改,把页面里面的调用都进行了修…

sql 避免除0错误_设计简历时避免这3个常见的UX错误

sql 避免除0错误重点 (Top highlight)Having a great looking resume on hand is very important when you’re looking for a job. It is your ticket to land the interview that will get you one step closer to that one job you’ve been dreaming of.在找工作时&#xf…

一个网站自动化测试程序的设计与实现

CSDN博客不再经常更新,更多优质文章请来 粉丝联盟网 FansUnion.cn! (FansUnion) 代码 下载地址:http://download.csdn.net/detail/fansunion/5018357(免积分) 代码亮点:可读性很好,注释详尽 背景 工作中,在维护一…

如何编写数据库可视化界面_编写用于数据可视化的替代文本

如何编写数据库可视化界面什么是替代文字 (What is Alt Text) Alt text (sometimes called Alt tags or alternative text) are written descriptions added to images that convey the meaning of the visual. Good alt text helps more people understand the content. Assis…

(转)swc与swf的区别

在Flash Builder中用Actionscript写的类可以打包成swc或swf, 在Flash CS中制作的元件也可以打包成swc或swf文件, 一个swc或swf文件中可以包含多个类或元件, 每个元件会映射成一个类, 因此,在Flash Builder中的类和在Fl…

js 验证各种格式类型的正则表达式

<script src"scripts/jquery-1.4.1.js" type"text/javascript"></script> <script language"javascript" type"text/javascript"> /** * 定义验证各种格式类型的正则表达式对象 */ var Regexs { email: …

reloaddata 跳动_纸跳动像素

reloaddata 跳动I would like to open with a problem.我想开一个问题。 Why are so many designer going straight to pixels?为什么这么多设计师直接使用像素&#xff1f; Over the past few years i’ve witnessed this in my team, my clients and others throughout th…