锁定老帖子 主题:使用jxl读写Excel文件
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-02-27
最后修改:2009-07-11
前几天潜水时看到一篇关于介绍使用Java语言实现读写Excel文件的文章,感觉不太通俗易懂,终于按耐不住,决定自己动手简单讲解使用操作Excel的常用第三方工具包jxl来实现对Excel文件的读写。 我们先看一下读的操作: /** * 读 * @param file 欲读取的Excel文件的路径 * @return * @throws Exception */ public static String read(File file) throws Exception { StringBuffer sb = new StringBuffer(); Workbook wb = null; try { // 获取工作簿对象 wb = Workbook.getWorkbook(file); if (wb != null) { // 获取工作簿对象就可以获取工作簿内的工作表对象 Sheet[] sheets = wb.getSheets(); if (sheets != null && sheets.length != 0) { // 遍历工作簿内所有工作表 for (int i=0;i<sheets.length;i++) { // 获取该工作表内的行数 int rows = sheets[i].getRows(); // 遍历行 for (int j=0;j<rows;j++) { // 获取当前行的所有单元格 Cell[] cells = sheets[i].getRow(j); if (cells != null && cells.length != 0) { // 遍历单元格 for (int k=0;k<cells.length;k++) { // 获取当前单元格的值 String cell = cells[k].getContents(); // 缩进 sb.append(cell + "\t"); } sb.append("\t\n"); } } sb.append("\t\n"); } } System.out.println("成功读取了:" + file + "\n"); } } catch (Exception e) { System.out.println(e.getMessage()); } finally { wb.close(); } return sb.toString(); } 方法的返回类型是一个String,我定义了一个StringBuffer对象,大家知道StringBuffer上的主要操作是 接下来我们看写的操作: /** * 写 * @param fileName 被写入的Excel文件的路径 * @param sheetName 被写入的Excel文件的工作表 * @param location 被写入的Excel文件的工作表位于工作簿的位置 * @throws Exception */ public static void write(String fileName, String sheetName, int location) throws Exception { WritableWorkbook wwb = null; Label label = null; try { // 创建可写入的工作簿对象 wwb = Workbook.createWorkbook(new File(fileName)); if (wwb != null) { // 在工作簿里创建可写入的工作表,第一个参数为工作表名,第二个参数为该工作表的所在位置 WritableSheet ws = wwb.createSheet(sheetName, location); if (ws != null) { /* 添加表结构 */ // 行 for (int i=0;i<5;i++) { // 列 for (int j=0;j<5;j++) { // Label构造器中有三个参数,第一个为列,第二个为行,第三个则为单元格填充的内容 label = new Label(j, i, "第"+(i+1)+"行," + "第"+(j+1)+"列"); // 将被写入数据的单元格添加到工作表 ws.addCell(label); } } // 从内存中写入到文件 wwb.write(); } System.out.println("路径为:" + fileName + "的工作簿写入数据成功!"); } } catch (Exception e) { System.out.println(e.getMessage()); } finally { wwb.close(); } } 我们看到在方法首行定义了一个WritableWorkbook 对象,WritableWorkbook 实际上就是一个写工作簿对象,同样我们要先获取一个工作簿,传入的文件路径,将欲读取的文件赋给WritableWorkbook 对象,这样我们就可以获取工作簿内的工作表了,得到工作表就好办了,我们通过调用WritableWorkbook 对象的createSheet()方法,传入工作表名和该表的所在位置,成功得到工作表后就开始在该工作表内添加表结构,这里我写的是五行五列,可以根据自己的实际要求改一下就OK,那么Label是一个什么东西呢?Label实际上就是一个填充单元格的对象,通过指定的行和列及需要填充的内容,最后将被写入数据的单元格添加到工作表中就大功告成了。最后一步调用WritableWorkbook 的write()方法将写入内存的数据写入到文件即可。Over!!! 下面是测试类: package org.yt.jxl.excelDemo; import java.io.File; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; /** * 执行对Excel文件的读写操作 * @author 袁通 */ public class ExcelDemo { public static void main(String[] args) { /* 测试读取(注意:文件路径中的盘符D:/,注意斜杠不要写成反斜杠"\") */ // 如果不存在该文件,返回空并抛出异常 /*File file = new File("D:/testRead.xls"); try { System.out.println(read(file)); } catch (Exception e) { System.out.println(e.getMessage()); }*/ /* 测试写入(注意:如果进程中正在运行被写入的文件,将抛出异常) */ try { // 如果不存在该文件,程序将新建一个同名文件 write("D:/testWrite.xls", "Sheet1", 0); } catch (Exception e) { System.out.println(e.getMessage()); } }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-11-27
学习
|
|
返回顶楼 | |
发表时间:2009-11-27
可以试一下jxls,简单强大
|
|
返回顶楼 | |
发表时间:2009-11-27
adamzhao 写道 可以试一下jxls,简单强大
这就是jxls啊 |
|
返回顶楼 | |
发表时间:2009-11-27
yuantong 写道 adamzhao 写道 可以试一下jxls,简单强大
这就是jxls啊 是吗? |
|
返回顶楼 | |
发表时间:2009-11-27
GRDJE 写道 yuantong 写道 adamzhao 写道 可以试一下jxls,简单强大
这就是jxls啊 是吗? 不是。 |
|
返回顶楼 | |
发表时间:2009-11-27
mycybyb 写道 GRDJE 写道 yuantong 写道 adamzhao 写道 可以试一下jxls,简单强大
这就是jxls啊 是吗? 不是。 想请教一下您,哪个才是jxls?或者说jxls是什么? |
|
返回顶楼 | |
发表时间:2009-11-27
感觉还是比较简单,不知一般写excel的报表是不是用这种方法。
|
|
返回顶楼 | |
发表时间:2009-11-27
yuantong 写道 mycybyb 写道 GRDJE 写道 yuantong 写道 adamzhao 写道 可以试一下jxls,简单强大
这就是jxls啊 是吗? 不是。 想请教一下您,哪个才是jxls?或者说jxls是什么? 有问题...baidu一下.. PS:jxls也不是很强大..现在用得很局限... |
|
返回顶楼 | |
发表时间:2009-11-27
yuantong 写道 mycybyb 写道 GRDJE 写道 yuantong 写道 adamzhao 写道 可以试一下jxls,简单强大
这就是jxls啊 是吗? 不是。 想请教一下您,哪个才是jxls?或者说jxls是什么? 拜托, google没被墙吧, 实在不行baidu也凑合 |
|
返回顶楼 | |