加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

使用JAVA透过JXL(JExcel)动态产生Excel档

发布时间:2020-12-15 07:51:39 所属栏目:Java 来源:网络整理
导读:使用JAVA透过JXL(JExcel)动态产生Excel档 首先,先到他的SourceForge主页面download相关的API文件。 http://sourceforge.net/projects/jexcelapi/ 或 http://www.andykhan.com/jexcelapi/download.html 当然,他也是OpenSource的组件。 下列为其Tutorial教学

使用JAVA透过JXL(JExcel)动态产生Excel档


首先,先到他的SourceForge主页面download相关的API文件。
http://sourceforge.net/projects/jexcelapi/

http://www.andykhan.com/jexcelapi/download.html
当然,他也是OpenSource的组件。

下列为其Tutorial教学:
http://www.andykhan.com/jexcelapi/tutorial.html

一切就绪后,那就准备上路了。


下载下来的压缩档解开后,可以找到jxl.jar,先将此文件加入你的Classpath中吧!

1. 先建立Workbook
也就是整份的Excel文件,可指定文件名。
Workbook workbook = Workbook.getWorkbook(new File("test.xls"));?

2. 建立Sheet
也就是每个Excel文件下面可以跳tag的sheet表。
Sheet sheet = workbook.createSheet("我的Excel表",0);
第一个参数是sheet name,第二个参数是第几张sheet,当然index是由0开始算。

3. 建立字型
WritableFont chFont11w = new WritableFont(WritableFont.TIMES,11);
chFont11w.setColour(Colour.WHITE);
先建立一个WritableFont的instance,其constructor的第一个参数是指定字型,第二个是字号。
其中字型的部分,可以使用WritableFont所提供默认的一堆static常数来指定,
也可以直接输入string,比如打"标楷体",到时产生的字型就会依照你所指定的来显示。

而setColour是指定此字型的颜色,这个部分就麻烦。
(由colour这个字来看,很显然的JExcel应是英国相关的人开发的:P? 反正总之不会是美国)

颜色为什么麻烦呢?在JExcel里面,Colour class并不提供public constructor让user自己指定RGB的颜色,
所以你只能从Colour中一堆的static常数颜色来指定,之前为了这个问题还研究了一下他的源代码,
果然是不行,他的constructor是protected的,就连继承之后虽然可以指定rgb颜色,但是仍然没有作用。

(后来我看了一下Excel,发现原来这是因为Excel的标准调色盘就那些颜色
不像Word一样可以让使用者自订颜色的关系)

查API doc就可以看到,他提供的颜色有:
static Colour AQUA?????????????
static Colour AUTOMATIC?????????????
static Colour BLACK?????????????
static Colour BLUE?????????????
static Colour BLUE_GREY?????????????
static Colour BLUE2?????????????
static Colour BRIGHT_GREEN?????????????
static Colour BROWN?????????????
static Colour CORAL?????????????
static Colour DARK_BLUE?????????????
static Colour DARK_BLUE2?????????????
static Colour DARK_GREEN?????????????
static Colour DARK_PURPLE?????????????
static Colour DARK_RED?????????????
static Colour DARK_RED2?????????????
static Colour DARK_TEAL?????????????
static Colour DARK_YELLOW?????????????
static Colour DEFAULT_BACKGROUND?????????????
static Colour DEFAULT_BACKGROUND1?????????????
static Colour GOLD?????????????
static Colour GRAY_25?????????????
static Colour GRAY_50?????????????
static Colour GRAY_80?????????????
static Colour GREEN?????????????
static Colour GREY_25_PERCENT?????????????
static Colour GREY_40_PERCENT?????????????
static Colour GREY_50_PERCENT?????????????
static Colour GREY_80_PERCENT?????????????
static Colour ICE_BLUE?????????????
static Colour INDIGO?????????????
static Colour IVORY?????????????
static Colour LAVENDER?????????????
static Colour LIGHT_BLUE?????????????
static Colour LIGHT_GREEN?????????????
static Colour LIGHT_ORANGE?????????????
static Colour LIGHT_TURQUOISE?????????????
static Colour LIGHT_TURQUOISE2?????????????
static Colour LIME?????????????
static Colour OCEAN_BLUE?????????????
static Colour OLIVE_GREEN?????????????
static Colour ORANGE?????????????
static Colour PALE_BLUE?????????????
static Colour PALETTE_BLACK?????????????
static Colour PERIWINKLE?????????????
static Colour PINK?????????????
static Colour PINK2?????????????
static Colour PLUM?????????????
static Colour PLUM2?????????????
static Colour RED?????????????
static Colour ROSE?????????????
static Colour SEA_GREEN?????????????
static Colour SKY_BLUE?????????????
static Colour TAN?????????????
static Colour TEAL?????????????
static Colour TEAL2?????????????
static Colour TURQOISE2?????????????
static Colour TURQUOISE?????????????
static Colour UNKNOWN?????????????
static Colour VERY_LIGHT_YELLOW?????????????
static Colour VIOLET?????????????
static Colour VIOLET2?????????????
static Colour WHITE?????????????
static Colour YELLOW?????????????
static Colour YELLOW2????

上面列了这么多,哪知道哪一个真正的颜色是怎么样?
除非自己边试边换才知,这太麻烦了,我写了一只程序把所有的颜色都印出来:

好了,但问题来了,上面提供的颜色如果对比较龟毛的人而言(比如我...),
一定是不足使用的,但如刚刚上述说的,Colour不提供自订颜色的功能,
后来找了老半天文档,终于找到一个可以用的方式,
就是在workbook中,提供了一个setColourRGB的method,
但这个method并不是设定新的颜色,而是可以把上述提供的颜色重新覆写其RGB设定值,
这个方法虽然不是挺好,但是终于有救了!

所以你就找个颜色来开刀,例如:
workbook.setColourRGB(Colour.DARK_GREEN,?0xDB,0xF4,0x8E);
我把DARK_GREEN的RGB改写成#DBF48E?(0x表示16进制)
(你要什么颜色而有什么16进制色码,很多方法可以取得,比如:Photoshop、Dreamweaver等)
这样一来,之后再使用Colour.DARK_GREEN,就会变成我们想要的颜色了。

4. 产生保存格Cell的格式
?WritableCellFormat cellFormat1 = new WritableCellFormat ();
?cellFormat1.setFont(chFont11w);
?cellFormat1.setBackground(Colour.DARK_GREEN);
?cellFormat1.setAlignment(Alignment.CENTRE);
?cellFormat1.setBorder(Border.ALL,BorderLineStyle.THIN,Colour.GRAY_80);
这里呢,要先产生你要的cell的格式,例如指定字型setFont,把我们刚刚产生的白色11大小的TIMES指定进去,
设定背景setBackground,把我们刚刚覆写掉的DARK_GREEN指定进去,
指定对齐方式setAlignment为置中,
以及设定此cell的上下左右(Border.ALL)的框线以及颜色。

5. 增加一个文字保存格Cell
Label label = new Label(2,3,"我是rexmen",cellFormat1);?
sheet.addCell(label);??
此constructor的第一个参数是产生的保存格的x的位置,2表示第3栏(index从0开始算)
第二个参数就是y的位置,3表示第4列。
用Excel的讲法来说,就是“C4”那一格。
而第三个就是输入的文字,而第四格就把我们刚刚产生的cell的format指定进去。

最后再把此label加入sheet中。使用addCell method。

6. 写入及结束文档
把该作的都作完后,别忘了close掉文档,
workbook.write();?
workbook.close();?
先使用write()写入后,再用colose关闭。
这样就大功告成啰!最基本的JExcel就完成了。
其他的功能啦,插入图片啦、试算的公式啦、有的没的自己有空再试了!


其他:
若是在JSP上要让User download这个动态产生的excel档,
要用Servlet RequestDispatcher的方式,
若没有设定正确表头,导过去的文件会会在browser上看到的是乱碥,
要记得设定?response.setContentType("application/vnd.ms-excel");
再导到正确的excel文件位置
RequestDispatcher view = request.getRequestDispatcher("test.xls");
view.forward(request,response);
如此以来,在网址列上不会show出 test.xls 的文件名 (会按照你在web.xml里设定的servlet对应mapping文件名),
而且可以正确的在browser里看到Excel的内容。

参考自?http://blog.yam.com/rexmen/article/2085224

原文:大专栏 ?使用JAVA透过JXL(JExcel)动态产生Excel档

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读