首页 > Java教程 > 正文

开源社区已经创造了许多开源Java项目,从制表软件到游戏框架到文字处理。在这篇文章中,我介绍一个可以读写微软Excel电子表格的开源类库项目JExcelAPI,是Andrew Kahn开发的,并且在GNU 通用公共许可协议下发布。它是一个成熟的、以Java为基础的可以让你实现读写和更改Excel电子表格功能的开源类库。这里有一些它的特点:

◆可以从Excel 95, 97, 2000, XP, 和2003工作簿读取数据

◆可以读写公式(只支持Excel 97和之后的版本)

◆可以以Excel 2000的格式生成电子表格

◆支持字体,数字,和日期的格式化

◆支持单元格拆分,单元格合并,和单元格着色

◆更改存在的工作表

◆支持复制图表

◆支持向电子表格插入或者复制图片

下载JExcelAPI类库

1.使用浏览器打开jexcelapi的主页下载或者本地下载(密码:xIxp)。

2.点击 “jexcelapi” 这个链接。

3.在结果页,点击任意一个文件夹链接。例如,我点击了 2.6.12 这个链接。

4.在结果页,点击分发文档文件名。例如,我点击了 jexcelapi_2_6_12.zip 这个链接。

5.稍微等待一下之后,你的浏览器会弹出对话框提醒你去保存这个文件。继续点击去保存这个文件即可。

下载完成后,解压这个文件。你会发现一个 jexcelapi 主目录在jexcelapi_2_6_12 目录下面。

使用 JExcelAPI 类库

JExcelAPI 的 jexcelapi 主目录包含一个叫 jxl.jar 的文件,这个文件包含一些读写和复制电子表格的例子程序。这个读取的例子读取的是一个已经存在的电子表格,并且通过 -csv 或者 -xml 命令行选项转换它为逗号分隔值(CSV)或者XML格式的文档。参考一下下面的例子:

java -jar jxl.jar -csv budget.xls
java -jar jxl.jar -xml budget.xls

这些例子读取 budget.xls 文件而且以CSV和XML格式输出它的内容到标准输出流。当 -csv 和 -xml 都没有被指定的时候,默认使用 -csv。

这个写入的例子创建一个包含公式,边界,图片,和更多其他元素的电子表格样本。这个电子表格通过指定 -write 命令行参数生成,就像下面使用的那样:

java -jar jxl.jar -write sample.xls

下图展现了 sample.xls 电子表格文件部分结果。

使用 LibreOffice Calc 去打开 sample.xls 电子表格

这个复制的例子复制了和 jxl.jar 存储在同一目录下的样本 jxlrwtest.xls 电子表格成为一个新的电子表格。在这个复制完成后的电子表格中,第一个工作薄(原始的)没有改变然而第二个工作薄(改变了的)包含了改变后的内容。

这个例子通过指定 -rw 命令行参数后面加上 jxlrwtest.xls 和输出电子表格的名称而产生。参考下面的命令行:

java -jar jxl.jar -rw jxlrwtest.xls copy.xls

这个命令行复制 jxlrwtest.xls 为 copy.xls。下图展现了第二部分(修改了的)工作簿在 LibreOffice Calc 下面。

点击原始和修改的标签去观察原始和修改后的工作簿

编译执行引入JExcelAPI

当编译源代码和运行一个应用的时候引入 JExcelAPI ,做下面的其中一件事情:

◆添加 jexcelapi 主目录里面的 jxl.jar 文件到你的 CLASSPATH 环境变量中。

◆通过 javac 和 java 命令的 -cp 选项引入 jxl.jar。

JExcelAPI 编程

jexcelapi 主目录包含一个 tutorial.html 文件,它里面有对JExcelAPI编程的基本指导。这个手册告诉你如何读,写,和复制电子表格。这个手册也谈论了格式化。

jexcelapi 也包括一个 docs 子目录,它提供了查看更多的API文档的通道。使用你的浏览器访问这个目录下的index.html 文件你就可以查看到这个类库下的四个已经建立好文档的包:

◆jxl: 主要包的文档

◆jxl.demo: 各种demo的文档

◆jxl.format: 与格式化相关的文档

◆jxl.write: 与写电子表格相关的文档

注意一下这个列表不是详尽的。附加的包比如 jxl.read 是出现的但是没有建立好文档。想去了解附件的包,运行 jar tvf jxl.jar 然后再在生成的jar列表里面检查包的信息。

为了帮助你使用JExcelAPI,我已经创建了一个简单的JExcelAPIDemo应用,它示范创建一个保存到output.xls的新的电子表格然后再读取并且输出这个电子表格的内容。查看下面“写和读取一个简单的电子表格”:

import java.io.File;
import java.io.IOException;
 
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
 
import jxl.read.biff.BiffException;
 
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
 
public class JExcelAPIDemo
{
   public static void main(String[] args)
      throws BiffException, IOException, WriteException
   {
      WritableWorkbook wworkbook;
      wworkbook = Workbook.createWorkbook(new File("output.xls"));
      WritableSheet wsheet = wworkbook.createSheet("First Sheet", 0);
      Label label = new Label(0, 2, "A label record");
      wsheet.addCell(label);
      Number number = new Number(3, 4, 3.1459);
      wsheet.addCell(number);
      wworkbook.write();
      wworkbook.close();
 
      Workbook workbook = Workbook.getWorkbook(new File("output.xls"));
      Sheet sheet = workbook.getSheet(0);
      Cell cell1 = sheet.getCell(0, 2);
      System.out.println(cell1.getContents());
      Cell cell2 = sheet.getCell(3, 4);
      System.out.println(cell2.getContents());
      workbook.close();
    }
}

代码通过调用Workbook 的工厂方法首先创建了一个可写的工作簿。然后这个工作簿的一个可写单元被随后创建,然后一个标签名和一个数字被加入到工作簿中作为这个工作薄的两个单元的值。这个工作博随后被创建完成然后关闭。

代码继续关联output.xls文件工作簿然后读取它的内容。这个getSheet()方法连接电子表格的第一个工作簿。它的getCell()方法被调用去连接这两个单元,然后它的内容被读出。

假设jxl.jar 文件放在当前目录中,运行下面的命令去编译上面的代码:

javac -cp jxl.jar JExcelAPIDemo.java

如果成功之后,运行下面的命令启动JExcelAPIDemo:

java -cp jxl.jar;. JExcelAPIDemo

你会发现下面的输出:

A label record
3.146

下图展示 LibreOffice 打开的 output.xls的内容。

 独立的工作簿显示两个单元格的值

代码下载

你可以在这里下载(密码:rKWa)这篇文章的代码。代码是在win 7 + jdk 7u6 环境下开发测试的。

原文链接: javaworld

以上内容来自于网络,如有侵权联系即删除。

猜你喜欢
发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论信息