使用开源项目JExcelApi在Java环境中生成MS Excel文档

转载 2008年09月29日 15:35:00
欢迎点击此处订阅本Blog Blog 订阅

<script type="text/javascript"><!-- google_ad_client = "pub-7343546549496470"; google_ad_width = 468; google_ad_height = 60; google_ad_format = "468x60_as"; google_ad_type = "image"; //2007-07-26: CSDN google_ad_channel = "6063905817"; google_color_border = "6699CC"; google_color_bg = "E6E6E6"; google_color_link = "FFFFFF"; google_color_text = "333333"; google_color_url = "AECCEB"; google_ui_features = "rc:6"; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

本文转载自:http://www.blogjava.net/supercrsky/archive/2008/05/21/201810.html

jexcelapi是一个开源项目,主要用来操作excel.
主页地址:
http://www.andykhan.com/jexcelapi/

现在做一个项目用到了它,根据不同的公司生成不同的文件夹,
在相应的文件夹下生成对应的xls. 这里只帖出生成xls部分核心代码:
 public void generateXls()
    
{
        
try
        
{
            
/** **********创建工作簿************ */
            WritableWorkbook workbook 
= Workbook.createWorkbook(new File("d:/test.xls"));
            
/** **********创建工作表************ */
            WritableSheet sheet 
= workbook.createSheet("工作表名称"0);

            
/** *********设置列宽**************** */
            sheet.setColumnView(
015); // 第1列
            sheet.setColumnView(118); // 第2列
            sheet.setColumnView(213);
            sheet.setColumnView(
313);
            sheet.setColumnView(
415);
            sheet.setColumnView(
515);
            
//设置行高
            sheet.setRowView(0600false);
            sheet.setRowView(
1400false);
            sheet.setRowView(
7400false);
            
//设置页边距
            sheet.getSettings().setRightMargin(0.5);
            
//设置页脚
            sheet.setFooter("""""测试页脚");
            
/** ************设置单元格字体************** */
            
//字体
            WritableFont NormalFont = new WritableFont(WritableFont.ARIAL, 10);
            WritableFont BoldFont 
= new WritableFont(WritableFont.ARIAL, 14,
                    WritableFont.BOLD);
            WritableFont tableFont 
= new WritableFont(WritableFont.ARIAL, 12,
                    WritableFont.NO_BOLD);
            WritableFont baodanFont 
= new WritableFont(WritableFont.ARIAL, 10,
                    WritableFont.BOLD);

            
/** ************以下设置几种格式的单元格************ */
            
// 用于标题
            WritableCellFormat wcf_title = new WritableCellFormat(BoldFont);
            wcf_title.setBorder(Border.NONE, BorderLineStyle.THIN); 
// 线条
            wcf_title.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
            wcf_title.setAlignment(Alignment.CENTRE); // 水平对齐
            wcf_title.setWrap(true); // 是否换行

            
// 用于表格标题
            WritableCellFormat wcf_tabletitle = new WritableCellFormat(
                    tableFont);
            wcf_tabletitle.setBorder(Border.NONE, BorderLineStyle.THIN); 
// 线条
            wcf_tabletitle.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
            wcf_tabletitle.setAlignment(Alignment.CENTRE); // 水平对齐
            wcf_tabletitle.setWrap(true); // 是否换行

            
// 用于正文左
            WritableCellFormat wcf_left = new WritableCellFormat(NormalFont);
            wcf_left.setBorder(Border.ALL, BorderLineStyle.THIN); 
// 线条
            wcf_left.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
            wcf_left.setAlignment(Alignment.LEFT);
            wcf_left.setWrap(
true); // 是否换行

            
// 用于正文左
            WritableCellFormat wcf_center = new WritableCellFormat(NormalFont);
            wcf_center.setBorder(Border.ALL, BorderLineStyle.THIN); 
// 线条
            wcf_center.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
            wcf_center.setAlignment(Alignment.CENTRE);
            wcf_center.setWrap(
true); // 是否换行

            
// 用于正文右
            WritableCellFormat wcf_right = new WritableCellFormat(NormalFont);
            wcf_right.setBorder(Border.ALL, BorderLineStyle.THIN); 
// 线条
            wcf_right.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
            wcf_right.setAlignment(Alignment.RIGHT);
            wcf_right.setWrap(
false); // 是否换行

            
// 用于跨行
            WritableCellFormat wcf_merge = new WritableCellFormat(NormalFont);
            wcf_merge.setBorder(Border.ALL, BorderLineStyle.THIN); 
// 线条
            wcf_merge.setVerticalAlignment(VerticalAlignment.TOP); // 垂直对齐
            wcf_merge.setAlignment(Alignment.LEFT);
            wcf_merge.setWrap(
true); // 是否换行

            WritableCellFormat wcf_table 
= new WritableCellFormat(NormalFont);
            wcf_table.setBorder(Border.ALL, BorderLineStyle.THIN); 
// 线条
            wcf_table.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
            wcf_table.setAlignment(Alignment.CENTRE);
            wcf_table.setBackground(Colour.GRAY_25);
            wcf_table.setWrap(
true); // 是否换行

            
/** ************单元格格式设置完成****************** */
            
//合并单元格,注意mergeCells(col0,row0,col1,row1) --列从0开始,col1为你要合并到第几列,行也一样
            sheet.mergeCells(0050);

            sheet.addCell(
new Label(00"这里是大标题,自定义格式",
                    wcf_title));

            sheet.mergeCells(
0111);
            sheet.mergeCells(
2151);

            sheet.addCell(
new Label(01"", wcf_center));
            sheet.addCell(
new Label(21"姓名:" + "supercrsky",
                    wcf_center));

            sheet.mergeCells(
0212);
            sheet.mergeCells(
2232);

            sheet.addCell(
new Label(02"单位:", wcf_center));
            sheet.addCell(
new Label(22"ChinaLong", wcf_center));
            sheet.addCell(
new Label(42"薪水", wcf_center));
            sheet.addCell(
new Label(52"5000", wcf_center));

            sheet.mergeCells(
0313);
            sheet.mergeCells(
2333);

            sheet.addCell(
new Label(03"性别:", wcf_center));
            sheet.addCell(
new Label(23"", wcf_center));
            sheet.addCell(
new Label(43"婚否:", wcf_center));
            sheet.addCell(
new Label(53"", wcf_center));

            sheet.mergeCells(
0414);
            sheet.mergeCells(
2434);

            sheet.addCell(
new Label(04"是否在职:", wcf_center));
            sheet.addCell(
new Label(24,"",
                    wcf_center));
            sheet.addCell(
new Label(44,"工作经验:", wcf_center));
            sheet.addCell(
new Label(54"4",wcf_center));

            sheet.mergeCells(
0515);
            sheet.mergeCells(
2535);

            sheet.addCell(
new Label(05"保险费:", wcf_center));
            sheet.addCell(
new Label(25,"50",
                    wcf_center));
            sheet.addCell(
new Label(45"保险金额:", wcf_center));
            sheet.addCell(
new Label(55"50000",
                    wcf_center));

            sheet.mergeCells(
0616);
            sheet.mergeCells(
2636);

            sheet.addCell(
new Label(06"工作地点:", wcf_center));
            sheet.addCell(
new Label(26"北京", wcf_center));
            sheet.addCell(
new Label(46"开心度:", wcf_center));
            sheet.addCell(
new Label(56"一般", wcf_center));

            
// 另起一table
            sheet.mergeCells(0757);
            sheet.addCell(
new Label(07"详细数据", wcf_tabletitle));
            
// table标题
            sheet.addCell(new Label(08"序号", wcf_table));
            sheet.addCell(
new Label(18"姓名", wcf_table));
            sheet.addCell(
new Label(28"年龄", wcf_table));
            sheet.addCell(
new Label(38"性别", wcf_table));
            sheet.addCell(
new Label(48"婚否", wcf_table));
            sheet.addCell(
new Label(58"在职", wcf_table));
            
// table内容
            
//这里用你的dao
            TestDAO dao = new TestDAO();
            List list 
= dao.findBy(user.getUserId());
            System.out.println(
"此保单拥有防疫码数量:" + list.size());
            
for (int i = 0; i < list.size(); i++)
            
{
                
//对应你的vo类
                User data = (User) list.get(i);

                sheet.addCell(
new Label(09 + i, String.valueOf(i + 1),
                        wcf_center));
                sheet.addCell(
new Label(19 + i, data.getDlEPCode(),
                        wcf_center));
                sheet
                        .addCell(
new Label(29 + i, data.getDlType(),
                                wcf_center));
                sheet.addCell(
new Label(39 + i, String.valueOf(data
                        .getDlPigAge()), wcf_center));
                sheet.addCell(
new Label(49 + i, "", wcf_center));
                sheet.addCell(
new Label(59 + i, "", wcf_center));
            }

            
/** **********以上所写的内容都是写在缓存中的,下一句将缓存的内容写到文件中******** */
            workbook.write();
            
/** *********关闭文件************* */
            workbook.close();
            System.out.println(
"导出成功");
            
// 存放url地址
        }
 catch (Exception e)
        
{
            System.out.println(
"在输出到EXCEL的过程中出现错误,错误原因:" + e.toString());
        }

    }

完整源码可以在这里下载
(源码空间由文章原作者 々上善若水々 提供)

<script type="text/javascript"><!-- google_ad_client = "pub-7343546549496470"; /* 468x60, 创建于 08-8-6 */ google_ad_slot = "7368701459"; google_ad_width = 468; google_ad_height = 60; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

<script type="text/javascript"><!-- google_ad_client = "pub-7343546549496470"; /* 468x15 横链接单元 */ google_ad_slot = "5785741422"; google_ad_width = 468; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

<script type="text/javascript" src="http://www.google.com/reader/ui/publisher.js"></script> <script type="text/javascript" src="http://www.google.com/reader/public/javascript/user/00697638153916680411/state/com.google/broadcast?n=5&callback=GRC_p(%7Bc%3A%22green%22%2Ct%3A%22%5Cu8FD9%5Cu4E9B%5Cu6587%5Cu7AE0%5Cu4E5F%5Cu503C%5Cu5F97%5Cu4E00%5Cu770B%22%2Cs%3A%22false%22%7D)%3Bnew%20GRC"></script>

全面挖掘Java Excel API 使用方法(JExcelApi)

使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易的事。在Web应用日益盛行的今天,通过Web来操作Excel文件的需求越来...
  • kevinwu629
  • kevinwu629
  • 2010年09月09日 16:38
  • 2514

Java 读写 Excel 数据 - jxl(JExcelAPI)

jxl
  • cool__wang
  • cool__wang
  • 2016年05月31日 15:18
  • 1425

JExcelAPI读写excel文件的例子。支持excel2003文件格式。

import java.io.*;import jxl.*;import jxl.write.*;import jxl.format.*;import java.util.*;import java....
  • wonder4
  • wonder4
  • 2006年07月04日 12:45
  • 10214

Java操作Excel的2种方法--Poi,jExcelApi

老师让查一些java操作excel的方法,在网上查了半天,看的也不太懂,就把有价值的总结一下。发现java操作Excel的第三方jar包比较多,有两套比较有影响的API可供使用,一个是POI,一个是j...
  • zdwzzu2006
  • zdwzzu2006
  • 2008年04月02日 22:37
  • 1695

MS Excel文件格式研究 MS Excel文件格式研究

摘要:由于XLS的文件格式内容过于庞大,本文只对BIFF8和BIFF8x版本的XLS文件的基本框架和重要结构进行介绍,XLS文件属于二进制文件,在本文中统一采用十六进制来表述,通过该文可以让大家方便的...
  • zhizaibide1987
  • zhizaibide1987
  • 2014年03月13日 00:04
  • 1754

java使用JexcelApi和POI两种方法操作excel

在java里面如何操作excel,其中有两种方法:JexcelApi和POI两种方法,参考网上别人做的,发现对于简单的操作,两种效果都不错。在其中JexcelApi操作时,对于在已有表格中添加数据,没...
  • u013766436
  • u013766436
  • 2016年03月16日 20:19
  • 3190

根据开源项目的源代码生成相应的帮助文档

现在市场上,开源的项目越来越多,但是项目虽然开源,但是很多相关的文档却需要我们花钱购买。如果不购买,我们就一定不能获取相应的帮助文档吗(PS:这里用struts2.2.1.1 作为示范的例子)?  ...
  • YSC1123
  • YSC1123
  • 2015年07月17日 09:54
  • 1332

jexcelapi学习笔记一

在实际WEB项目开发过程中,常常需要我们开发WEB报表的功能,下面我们就学习一下两种常用的处理Excel表格的开源解决方案:Apache POI和JExcelApi(Jxl)的基本应用。 首先我...
  • ghosthuo
  • ghosthuo
  • 2014年03月28日 14:22
  • 786

Excel工作表特殊类型之一:对话框用法

作者:iamlaosong 曾经看到这么一个问题: 有一个VBA应用的例子中有这么一句代码:     ThisWorkbook.DialogSheets("Start").Show 我找了整个工程都没...
  • iamlaosong
  • iamlaosong
  • 2015年02月28日 15:27
  • 4805

JExcelAPI与Apache POI两者对比

一,JExcelAPI与Apache POI两者对比  1、JExcelAPI不适合商业应用,它都是会莫名其妙的读不出来数据。  2、Apache POI是一纯Java的实现,不仅能读微软的Excel...
  • pengchua
  • pengchua
  • 2007年08月09日 13:36
  • 5981
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用开源项目JExcelApi在Java环境中生成MS Excel文档
举报原因:
原因补充:

(最多只允许输入30个字)