`
viwo
  • 浏览: 221896 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Java操作Excel之理解JXL--读取Excel模板动态写入数据并生成Excel

    博客分类:
  • JAVA
阅读更多

上一篇文章 Java操作Excel之理解JXL--读取Excel 说到如何用JXL读取Excel文件,
现在来看看如何读取Excel模板然后把动态数据写入到模板以生成特定格式的Excel。
同样的思路,先来考虑下会涉及到那些对象,和上篇文章读取相比这里涉及到一个写入的步骤,所以JXL必然会提供一个对象
来支持写入,这就是WritableWorkbook。那么如何得到到这个类的实例,查看APIDoc发现Workbook类提供了几个
静态的createWorkbook方法返回WritableWorkbook实例,可以看到众多createWorkbook方法主要分为两类:一个参数
和两个参数。简单分析可以得知前者仅仅是用来直接生成Excel文件,后者先读取模板再向模板写入数据然后生成Excel。
(还有一个三参数方法加上一个用来设置workbook的参数)
现在按照上篇文章中所讲述的流程来看看读取模板并写入需要那些步骤。

第一步:选择模板文件:
Workbook wb = Workbook.getWorkbook(new File(realpath));

第二步:通过模板得到一个可写的Workbook:
WritableWorkbook wwb = Workbook.createWorkbook(targetFile, wb);
第一个参数是一个输出流对象,比如可以
ByteArrayOutputStream targetFile = new ByteArrayOutputStream();
这样定义这个输出流对象。第二个参数代表了要读取的模板。


第三步:选择模板中名称为StateResult的Sheet:
WritableSheet wws = wwb.getSheet("StateResult");
如果需要也可以创建Sheet
WritableSheet wws = wwb.createSheet("Sheet名称",i);


第四步:选择单元格,写入动态值,根据单元格的不同类型转换成相应类型的单元格:
Label A1 = (Label)wws.getWritableCell(0,0);
A1.setString("单元格内容")

Number A2 = (Number)wws.getWritableCell(0,1);//Number是jxl.write.Number
A2.setValue(3.3);
也可以创建新的单元格并且加入到Sheet中
Label C1 = new Label(2,0,"单元格内容");
wws.addCell(C1);

Number C1 = new Number(2,0,3.3);
wws.addCell(C1);

在生成Excel报表的时候还会遇到一种需求就是数据的格式问题,我们可能希望数值型单元格以某种格式显示,而字符串型单元格以另

一种格式显示。这些可以通过WritableFont、NumberFormat、WritableCellFormat等实现,下例给单元格A1、A2添加了不同的格式。

java 代码
  1. WritableFont font= new WritableFont(WritableFont.createFont("宋体"),10,WritableFont.NO_BOLD);   
  2. NumberFormat format = new NumberFormat("###,##0.00"); //NumberFormat是jxl.write.NumberFormat   
  3. WritableCellFormat cellFormat1 = new WritableCellFormat(font,format);   
  4. WritableCellFormat cellFormat2 = new WritableCellFormat(font);   
  5. cellFormat1.setBorder(Border.ALL, jxl.format.BorderLineStyle.THIN); //Border是jxl.format.Border   
  6. cellFormat2.setBorder(Border.ALL, jxl.format.BorderLineStyle.THIN); //Border是jxl.format.Border   
  7. A2.setCellFormat(cellFormat1);   
  8. A1.setCellFormat(cellFormat2);  

还有不要忘记关闭WritableWorkbook和Workbook以释放资源:
wwb.close();
wb.close();

最后就可以你需要的方式从输出流targetFile中取得Excel,比如直接生成文件存本地,输出到客户端浏览器等。

如果还有其他需求,按照这种思路,再参照APIDoc相信可以很容易的解决。

至此,Java操作Excel之理解JXL就写完了。下一篇会介绍如何用Jakarta POI操作Excel。

 

分享到:
评论
10 楼 hbcui1984 2007-05-28  
jwen 写道
最近也在为出报表郁闷,格式要求很严格
看了你的通过读取模板写入动态数据生成excel  我试着测试了一下 结果excel完全没任何反映,

希望你指点指点  谢谢


public class JxlExcel{
	public static void main(String[] args)
	{ 
		try
		{
			String url="D:/template/test.xls";
			//第一步:选择模板文件 通过模板得到一个可写的Workbook:
			Workbook wb = Workbook.getWorkbook(new File(url));
			//这样定义这个输出流对象。第二个参数代表了要读取的模板。
			ByteArrayOutputStream targetFile = new ByteArrayOutputStream();

			WritableWorkbook wwb = Workbook.createWorkbook(targetFile, wb);
			//第一个参数是一个输出流对象,比如可以
			//第三步:选择模板的Sheet:
			WritableSheet wws = wwb.getSheet(0);
			//第四步:选择单元格,写入动态值,根据单元格的不同类型转换成相应类型的单元格:
/*			Label A1 = (Label)wws.getWritableCell(2,0);
			A1.setString("单元格内容");*/
			Label C1 = new Label(2,0,"单元格内容");
			wws.addCell(C1);
			wwb.close();
			wb.close();
			System.out.println("盒封面.xls");
		}
		catch (Exception e)
		{
			e.printStackTrace();
		} 
	
	}  
}


楼主介绍的方法只是把数据写入到了流中,并没有真正写入文件中,当然不会有反应了。

很早之前写过一篇介绍jxl的文章:
http://www.iteye.com/topic/55844?page=1
不过今天从楼主文章中看到如何读取模板,不错的
9 楼 jwen 2007-05-28  
感谢 viwo
8 楼 viwo 2007-05-27  
liht80 写道
在java中用jxl操作EXCEL
Workbook book = Workbook.getWorkbook(new File("D:\\project.xls"));
Sheet sheet = book.getSheet(0);
Cell cell=sheet.getCell(0,4);
String result=cell.getContents();
System.out.println("########################### " +result);

为什么在程序执行到Sheet sheet = book.getSheet(0);时,会抛NullPointerException呢???
读入的EXCEL文件的路径是正确的,D盘下确有此文件呀。
并且相同的代码,换个EXCEL文件就没有问题,可是我要读的是project.xls文件呀。
为什么会这样呢?

Sheet sheet = book.getSheet(0);抛NullPointerException的可能性不大,
Workbook book = Workbook.getWorkbook(new File("D:\\project.xls"));倒是有可能抛IOException或者jxl.read.biff.BiffException。
除非你在Workbook book = Workbook.getWorkbook(new File("D:\\project.xls")); 周围try catch或者在其后sheet=null;
7 楼 viwo 2007-05-27  
jwen 写道
最近也在为出报表郁闷,格式要求很严格
看了你的通过读取模板写入动态数据生成excel  我试着测试了一下 结果excel完全没任何反映,

希望你指点指点  谢谢


public class JxlExcel{
	public static void main(String[] args)
	{ 
		try
		{
			String url="D:/template/test.xls";
			//第一步:选择模板文件 通过模板得到一个可写的Workbook:
			Workbook wb = Workbook.getWorkbook(new File(url));
			//这样定义这个输出流对象。第二个参数代表了要读取的模板。
			ByteArrayOutputStream targetFile = new ByteArrayOutputStream();

			WritableWorkbook wwb = Workbook.createWorkbook(targetFile, wb);
			//第一个参数是一个输出流对象,比如可以
			//第三步:选择模板的Sheet:
			WritableSheet wws = wwb.getSheet(0);
			//第四步:选择单元格,写入动态值,根据单元格的不同类型转换成相应类型的单元格:
/*			Label A1 = (Label)wws.getWritableCell(2,0);
			A1.setString("单元格内容");*/
			Label C1 = new Label(2,0,"单元格内容");
			wws.addCell(C1);
			wwb.close();
			wb.close();
			System.out.println("盒封面.xls");
		}
		catch (Exception e)
		{
			e.printStackTrace();
		} 
	
	}  
}


如下:
public class JxlExcel{   
    public static void main(String[] args)   
    {    
        try  
        {   
            String url="c:/test.xls";   
              Workbook wb = Workbook.getWorkbook(new File(url));    
              ByteArrayOutputStream targetFile = new ByteArrayOutputStream();  
            WritableWorkbook wwb = Workbook.createWorkbook(targetFile, wb);   
              WritableSheet wws = wwb.getSheet(0);   
            Label C1 = new Label(2,0,"单元格内容");   
            wws.addCell(C1);   
            wwb.write();
            wwb.close();
            wb.close();  
            FileOutputStream fos = new FileOutputStream("c:/test1.xls");
            targetFile.writeTo(fos);
            targetFile.close();
            System.out.println("盒封面.xls");   
        }   
        catch (Exception e)   
        {   
            e.printStackTrace();   
        }    
       
    }     
}  

6 楼 liht80 2007-05-24  
在java中用jxl操作EXCEL
Workbook book = Workbook.getWorkbook(new File("D:\\project.xls"));
Sheet sheet = book.getSheet(0);
Cell cell=sheet.getCell(0,4);
String result=cell.getContents();
System.out.println("########################### " +result);

为什么在程序执行到Sheet sheet = book.getSheet(0);时,会抛NullPointerException呢???
读入的EXCEL文件的路径是正确的,D盘下确有此文件呀。
并且相同的代码,换个EXCEL文件就没有问题,可是我要读的是project.xls文件呀。
为什么会这样呢?
5 楼 Readonly 2007-05-24  
http://www.iteye.com/topic/75431
4 楼 dovecat 2007-05-24  
用jxls吧.比poi要好用.
3 楼 qmy 2007-05-24  
学习来了,感谢楼主。
2 楼 jwen 2007-05-24  
最近也在为出报表郁闷,格式要求很严格
看了你的通过读取模板写入动态数据生成excel  我试着测试了一下 结果excel完全没任何反映,

希望你指点指点  谢谢


public class JxlExcel{
	public static void main(String[] args)
	{ 
		try
		{
			String url="D:/template/test.xls";
			//第一步:选择模板文件 通过模板得到一个可写的Workbook:
			Workbook wb = Workbook.getWorkbook(new File(url));
			//这样定义这个输出流对象。第二个参数代表了要读取的模板。
			ByteArrayOutputStream targetFile = new ByteArrayOutputStream();

			WritableWorkbook wwb = Workbook.createWorkbook(targetFile, wb);
			//第一个参数是一个输出流对象,比如可以
			//第三步:选择模板的Sheet:
			WritableSheet wws = wwb.getSheet(0);
			//第四步:选择单元格,写入动态值,根据单元格的不同类型转换成相应类型的单元格:
/*			Label A1 = (Label)wws.getWritableCell(2,0);
			A1.setString("单元格内容");*/
			Label C1 = new Label(2,0,"单元格内容");
			wws.addCell(C1);
			wwb.close();
			wb.close();
			System.out.println("盒封面.xls");
		}
		catch (Exception e)
		{
			e.printStackTrace();
		} 
	
	}  
}

相关推荐

    jxl 读取Excel模板并写入数据通用工具类

    本文将详细讨论如何使用JXL库创建一个通用的工具类来读取Excel模板并填充数据。 首先,我们需要了解JXL库的基本用法。JXL库提供了多种API,可以用来操作Excel文件的各个部分,包括工作簿(Workbook)、工作表...

    jxl模版生成excel

    JExcelAPI是一个开源项目,允许程序开发者读写Microsoft Excel文件,它支持从Java数据结构直接导出到Excel格式,同时也可读取Excel数据并转换为Java对象。 **描述解析:** 描述中提到的"采用类似EL表达式的方式...

    使用jxl包向excle模板中写入数据

    本文将深入探讨如何利用`jxl`包来实现向Excel模板中写入数据,并保留原有模板的完整性。 首先,让我们了解`jxl`库的基本概念。`jxl`库提供了丰富的API,可以方便地操作Excel文件的各种组件,如工作簿(Workbook)、...

    jxl-report.jar 和 freemarker-util-0.0.1.jar

    总的来说,`jxl-report.jar`和`freemarker-util-0.0.1.jar`的组合为Java开发者提供了一种高效、灵活的方式来生成Excel报表,特别是对于那些需要大量数据处理和动态更新的场景。这种技术在数据分析、财务报告、销售...

    JXL使用模板通过el表达式生成excel文件

    在JXL中,结合EL表达式,我们可以动态地生成Excel内容,这使得在模板基础上生成复杂的数据报告变得非常便捷。 **步骤1:准备Excel模板** 首先,你需要创建一个Excel模板文件,这个模板包含你想要在生成的Excel中...

    java实现自定义excel模板导出excel并可保存客户端和在线打开

    在Java编程环境中,生成自定义Excel模板是一项常见的需求,尤其在数据分析、报表生成等领域。本文将深入探讨如何使用Java和jxl库来实现这一功能,让开发者能够创建任意复杂格式的Excel文件,并允许用户在客户端保存...

    Java通过POI和JXL给Excel动态添加水印

    - **读取Excel文件**:使用JXL或POI库加载Excel文件。 - **创建水印图像**:根据`Model`中的数据动态生成水印图像。 - **将水印图像添加到Excel页面上**:使用POI提供的API来实现这一功能。 #### 示例代码框架 ```...

    jxl-2.6.12包 源码 及 javadoc

    这个名为"jxl-2.6.12包"的压缩文件包含了jxl库的核心组件,使得开发者能够方便地在Java应用中读取、写入以及操作Excel数据。本文将详细介绍jxl-2.6.12包中的三个关键部分:jxl-2.6.12.jar(二进制包)、jxl-2.6.12-...

    通过JXL使用模板导出EXCEL

    在Java编程环境中,导出数据到Excel是一种常见的需求,特别是在数据分析、报表生成或者数据交换的场景下。JXL是一个流行的库,它允许开发者方便地读取、写入和操作Excel文件。本文将深入探讨如何利用JXL库通过模板来...

    [转]java struts2+jxl生成并导出Excel

    Struts2是一个流行的Java web框架,它为开发者提供了一种结构化的方式来构建应用程序,而JXL则是一个Java库,用于读取、写入和修改Excel电子表格文件。这篇博客文章结合了这两个技术,展示了如何在Struts2应用中生成...

    JXL根据模板文件,生成新文件,填充excel

    总的来说,JXL库提供了一种高效且灵活的方式,使得开发者能够方便地根据模板生成Excel文件,这对于报表生成、数据分析等场景非常有用。通过阅读和理解`FinalAppraiseExportAction.java`的源代码,我们可以深入了解这...

    利用java操作Excel文件

    2. 报表生成:使用Java可以根据模板生成报表,自动将数据填充到报表中。 3. 文件自动化处理:使用Java可以自动处理大量的Excel文件,例如批量修改文件名、批量导出数据等。 Java操作Excel文件的技术难点: 1. ...

    Excel文件读写java代码

    4. **读取类操作**:提供的Java代码示例可能包含一个读取Excel文件的类,这个类通常会通过JXL库打开Excel文件,遍历每个工作表和单元格,读取其中的数据,并可能将其存储到内存中的数据结构(如数组、列表或自定义...

    Java实现Excel导入导出操作详解.pptx.pptx

    通过Apache POI的API,开发者可以轻松读取Excel文件,将数据转化为Java对象,同时也可以添加、修改和删除单元格数据,实现对Excel文件的完全控制。JXL库则是一个较简单的选项,适合小型项目和简单的Excel操作。另外...

    jxl-0.9.2

    2. `jxls-reader-0.9.2.jar`:这是jxls的扩展库,专门用于读取Excel数据,可能包含更高级的功能,如动态数据解析和转换。 3. `readme.txt`:通常包含项目的基本信息、安装指南、使用说明或版本更新内容。 4. `...

    利用Jxl生成excel文件

    总的来说,"利用Jxl生成excel文件"这个主题涵盖了Java环境下使用Jxl库进行Excel操作的基本知识,包括创建工作簿、工作表,添加数据,设置样式,以及读写文件的流程。对于需要在Java应用程序中生成Excel报告或导出...

    使用Java的jxl方式导出到Excel

    在Java开发中,导出数据到Excel是一种常见的需求,特别是在数据处理、报表生成或数据分析的场景下。jxl库是一个广泛使用的开源库,它允许开发者用Java读取、写入和修改Excel文件。本篇文章将深入探讨如何使用jxl库来...

    Java操作Excel培训文档.pptx

    JXLS则采用模板的方式操作Excel,它允许开发者创建一个Excel模板,然后根据数据动态填充模板,生成最终的Excel文件。这种方式适用于需要批量生成格式统一的Excel报告的情况。使用JXLS的基本流程包括: 1. 创建Excel...

    jxl操作excel写入数据不覆盖原有数据示例

    在Java编程中,JXL库是一个广泛使用的工具,用于读取和写入Excel文件。这个库提供了丰富的API,使得开发者能够方便地处理Excel数据。在标题和描述中提到的示例,主要展示了如何使用JXL来写入Excel数据,同时不覆盖...

    JavaExcel读写库JxlExcel.zip

    JxlExcel 是基于jxl封装的java excel读写库,特性如下:可以像读写文件一样方便的读取数据和写入数据数据支持数组、map、bean三种方式支持xml配置excel模板如何使用?模板定义在类路径下新建一个jxl-excel.xml的模板...

Global site tag (gtag.js) - Google Analytics