`
王树雄
  • 浏览: 243068 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

浅谈jxl解析excel —————生成、读取excel表

阅读更多

寒假以后在做移动的项目。关于权限控制了。最近移动的项目经理让我额外做一个简单系统实现。大概是这样的。

他给我两张暗访问卷的excel表格。让我将之弄成静态网页。然后做一个管理系统。登陆者有两类。一类是暗访者。就是提

交表格的。另外一类是管理员。对提交的数据进行管理。管理员把暗访者提交到数据库里面的数据导入到excel表格中。

然后实现远程下载。比如。服务器在武汉。暗访者在长沙登陆。提交完暗访问卷数据保存到武汉的数据库里。然后假如管理

员在广州登陆。通过执行操作将数据库里面的数据导入到武汉服务器里生成excel表格。然后。管理员可以进行下载。

其实整个流程蛮简单的。我使用xml作为数据库的。这样我觉得移动性比较强。和access差不多。要将从前天暗访者提交

的数据提交到xml数据库里面。我们需要借助一个开源包 dom4j。这个另外会写的。今天主要讲一下如何用jxl

操作excel表格。jxl java excel api 的简称。

官网 :http://www.andykhan.com/jexcelapi/tutorial.html#writing

这个开源包是韩国人写的。看来我们有理由相信,韩国人不止会整容和拍电视剧。而且会写程序。

当然解析excel文件的不止是有jxl这么一种开源包。还有另外一种叫做 poi 。这是apache公司的杰作。但是因为操作复

杂,代码量大的缘故。不压代码量小。操作简便。易懂易学的jxl而用户量比较小。我们在使用jxl进行操作之前首先要下载

一个叫做jxl.ar 的包。这个包在附件里面我会上传。下载完之后引入项目里面即可。

既然是操作 excel文件。那么免不了进行增删改查。

首先我们从简单的创建一个excel文件开始。

1.新创建一个excel文件。

		/**
		 * 
		 * createWorkbook(); 传入的是文件对象
		 * 
		 */

		WritableWorkbook wb = Workbook.createWorkbook(new File("a.xls"));

		WritableSheet ws = wb.createSheet("表一", 0);
		// 传入一个标签对象,0 0表示1行1列。这里和数组的下标一样都是减一的;

		Label la = new Label(0, 0, "第一个位置");

		ws.addCell(la);

		// 添加一个数字对象这儿的数字可以是整数也可以是浮点数。

		Number n = new Number(0, 1, 2000.454);

		ws.addCell(n);
		
		wb.write();

		// 千万别忘了关闭的情况

		wb.close();

		// 这样就算是简单的完成了一个写入的操作。
 

 

 

 

我们的excel是丰富多彩的。不仅仅是简单的文字之类的。我们还需要对文字加上字体和大小。

代码如下:

其实,逻辑很简单。我们是对单元格进行操作的,所以就有一个单元格格式对象WritableCellFormat

 只要我们想改变某个单元格的相关格式。比如字体,大小颜色之类的。就在要加入的每种单元格对象后面加上单元格格式 对象。这样我们就可以改变这个单元格的格式了。而我们究竟要改变这个单元格的哪种格式。是字体还是图像还是颜色。那我们就必须交代清楚。这样WritableCellFormat对象传入到单元格对象就知道是具体改变那种格式了

 

 

 

  WritableWorkbook   wb=   Workbook.createWorkbook(new File("a.xls"));

        WritableSheet  ws= wb.createSheet("表一", 0);
        WritableFont   wf=new WritableFont( WritableFont.ARIAL,20);

        WritableCellFormat     cf=new WritableCellFormat(wf);
        //传入一个标签对象;

     Label   la=new Label(0,0,"第一个位置",cf);

        ws.addCell(la);

        //添加一个数字对象这儿的数字可以是整数也可以是浮点数。

      Number  n=new Number(0, 1, 2000.454,cf);

        ws.addCell(n);

        wb.write();

        wb.close();

        System.out.println("创建完成@!");

   

 

上述是生成excel文件的方法。

 

2.

 

  读取excel的方法。这里有两种方法。一种是从文件里面读取。也就是我们很普遍的方法。另外一种方法是从输入流中读取。 先看事例。

 

 

 

    这种方法直接读取:

Workbook   wb=Workbook.getWorkbook(new File("a.xls"));
			
这种方法先将文件编程文件流。然后传入其中
java.io.InputStream in=new java.io.FileInputStream(new File("a.xls"));
			
Workbook   wbb=Workbook.getWorkbook(in);

    1.我们先来看看第一种情况。

      直接读取

   

	Workbook wb = null;

		try {
			wb = Workbook.getWorkbook(new File("a.xls"));

			// 获取这个excel文件的第1个表;

			Sheet sheet = wb.getSheet(0);

			// 通过行和列值得到确定的单元格

			for (int i = 0; i < 5; i++) {
				Cell c = sheet.getCell(i, i);

				// 可以直接读取单元格的内容。不管此单元格式什么类型的。字符串型的还是数字型的。还是标签性的。得到的内容都是字符串型的;

				String content = c.getContents();

				System.out.println("content" + content);
			}

		} catch (BiffException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			wb.close();
		}

 

  //另外一种就不是一锅端了。而是去判断每个单元格的类型;

 

 

		Workbook wb = null;

		try {
			wb = Workbook.getWorkbook(new File("a.xls"));

			// 获取这个excel文件的第1个表;

			Sheet sheet = wb.getSheet(0);

			// 通过行和列值得到确定的单元格

			for (int i = 0; i < 5; i++) {
				Cell c = sheet.getCell(i, i);

				// 判断单元格的类型进行读取;

				if (c.getType() == CellType.NUMBER) {

					Number no = (Number) c;

					System.out.println("no:" + no.getValue());
				}

				String content = c.getContents();

				System.out.println("content" + content);
			}

		} catch (BiffException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			wb.close();
		}

 

  2.第二种读取文件的方式就不是根据文件名了。而是根据流来进行读取;

 

  最好的例子是我们上传文件的情况。假如我们需要从客户端向浏览器端传送一个文件。那么我们就需要用到这个流对象来保存。

  好比这么一个情形。我上传的excel文件在后台要生成对应的excel文件。那么我们最好的方式就是一边写入流。另一边服务器端写出流直接到某个excel文件。

 

 

 我们的前端是下面的代码:

 

 <body>
  
  <form action="JxlServlet"  enctype="multipart/form-data" method="post">
  
     <input  type=file  name=file />
 
     <input  type=submit value='上传图片' />
  
  </form>

  </body>

 

   我们会发现一个很神奇的东西 enctype="multipart/form-data" 这在我们以前好像没有加这个东西。那么这么个东西是干啥的呢?

 

请看下面详解:

 

 

application/x-www-form-urlencoded 在发送前对所有字符进行编码(默认)。
multipart/form-data 不对字符编码。当使用有文件上传控件的表单时,该值是必需的。
text/plain 将空格转换为 "+" 符号,但不编码特殊字符。

也就是说我们默认是这种情况:

 

<form action="demo_post_enctype.asp"
  method="post" enctype="application/x-www-form-urlencoded">
  First name: <input type="text" name="fname" /><br />
  Last name: <input type="text" name="lname" /><br />
  <input type="submit" value="Submit" />
</form>
 

 

后台代码则是

 

    要是不取出垃圾信息。就会报错。这个垃圾信息我也没有搞明白。希望知情人可以给出解答。

 

// 获取它的输入流;
		ServletInputStream ins = request.getInputStream();
		byte[] junk = new byte[1024];
		int bytesRead = 0;

		// the first four lines are request junk
		// 去除掉垃圾信息。
		bytesRead = ins.readLine(junk, 0, junk.length);
		System.out.println(bytesRead);
		bytesRead = ins.readLine(junk, 0, junk.length);
		System.out.println(bytesRead);
		bytesRead = ins.readLine(junk, 0, junk.length);
		System.out.println(bytesRead);
		bytesRead = ins.readLine(junk, 0, junk.length);
		System.out.println(bytesRead);

		try {
			Workbook wb = Workbook.getWorkbook(ins);
			System.out.println("对象创建成功!");

			Sheet s = wb.getSheet(0);

			for (int i = 0; i < 5; i++) {
				Cell c = s.getCell(i, i);
				String content = c.getContents();
				System.out.println(content);
			}
			wb.close();

		} catch (BiffException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

 

 

 

 这就是两种读取excel文件的方式。

 

 

 下一节讲述修改和复制excel文件的方式。

 

 

 

 

 

 

 

 

分享到:
评论
1 楼 贝塔ZQ 2017-07-04  
之前用过jxl实现生成excel文件,后来找了插件PageOffice用着更方便点 

相关推荐

    浅谈jxl解析excel —————复制、修改excel表

    本文将围绕“浅谈jxl解析excel ——复制、修改excel表”这一主题,深入探讨JXL库的使用方法和关键知识点。 首先,JXL库提供了丰富的API,使得开发人员可以方便地操作Excel文件的各个部分,如工作表、单元格、样式等...

    使用jxl解析excel(.xls)固定模板(智联简历为例)

    3. **解析保存**:使用JXL库读取并解析Excel文件。以下是一个简单的示例代码片段,展示如何打开文件并遍历工作表: ```java Workbook workbook = Workbook.getWorkbook(new File("path_to_your_excel_file")); ...

    jxl解析excel

    jxl库支持读取和写入Excel文件中的工作表、单元格、公式、样式等元素,同时也支持处理图像和图表。这个库简单易用,适合在Java项目中快速实现Excel文件的处理功能。 二、安装jxl库 要使用jxl库,首先需要将其添加到...

    jxl JAVA Excel解析

    下面我们将深入探讨JXL库在Java Excel解析中的应用。 ### 1. JXL库介绍 JXL(Java Excel API)是一个开源的Java库,专门用于处理Microsoft Excel文件。它支持多种操作,如创建新的工作簿、读取现有工作簿、修改工作...

    jxl模版生成excel

    6. **读取Excel**:除了生成Excel文件,jxl还可以读取已有的Excel文件,将其内容转化为Java数据结构,便于处理和分析。 7. **示例代码**:通常,使用jxl的流程包括加载模板文件,找到要填充的单元格,使用`Cell....

    jxl解析EXCEl2003

    本篇文章将深入探讨如何使用JXL库解析Excel 2003的文件,以此来帮助开发者们掌握这一技能。 JXL是一个开源的Java库,它允许Java程序读取、写入和操作Excel文件。在Excel 2003时代,文件格式通常是.XLS,JXL能够很好...

    jxl.jar——JavaExcel library.zip

    JavaExcel库,通常以jxl.jar的形式出现,是Java开发者用于读取和写入Microsoft Excel文件的一个强大工具。这个库提供了方便的API,使得在Java应用程序中操作Excel电子表格变得非常简单。它不仅支持基本的读写功能,...

    jxl解析Excel包

    在这个场景中,我们主要关注如何使用JXL库来解析Excel文件。首先,我们需要确保已经将JXL库引入到我们的项目中,这里提供的"jxl.jar"就是这个库的实现。 JXL库的使用步骤大致如下: 1. **导入依赖**:在Java项目中...

    java JXL导入导出Excel源码及jfreechart 生成折线图,饼图

    java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图

    jxl的excel的文件生成,与读取,excel2003

    本篇文章将深入探讨如何使用JXL库来生成和读取Excel文件。 首先,让我们从生成Excel文件开始。在Java中,JXL库提供了丰富的API,使得创建工作簿、工作表以及单元格变得十分便捷。以下是一段简单的代码示例,演示了...

    JXL 读取EXCEL

    标题 "JXL 读取EXCEL" 涉及到的是使用Java Excel Library(简称JXL)这个开源库来处理Microsoft Excel文件。JXL是一个强大的工具,它允许开发者在Java程序中读取、写入和修改Excel文件。下面将详细介绍JXL库以及如何...

    使用jxl.jar在Android中操作Excel表格

    总之,利用jxl.jar库,开发者可以在Android应用中实现对Excel文件的全面操作,包括读取、写入以及处理隐藏表。通过理解并熟练运用jxl提供的API,你可以构建出功能强大的Excel处理工具,满足各种业务需求。但同时,要...

    操作Excel文件(读取和生成)jxl和poi

    JXL和Apache POI是两个广泛使用的库,分别提供了对Excel文件的读取和生成的支持。本篇文章将深入探讨这两个库的使用方法及其特点。 首先,JXL是一个Java API,主要用于读写Excel 97-2003格式的工作簿,即.xls文件。...

    java利用jxl生成excel文件

    总结来说,Java利用JXL库生成Excel文件是通过创建工作簿、工作表、单元格,并设置它们的属性和内容来实现的。JXL提供了广泛的API来处理各种复杂的Excel操作,是Java环境下生成Excel文件的一个实用工具。

    poi,jxl解析excel

    Apache POI和JXL是两个流行的Java库,用于读取和写入Microsoft Office格式的文件,包括Excel(.xls和.xlsx)文件。下面将详细阐述这两个库在解析Excel时的应用及其相关知识点。 1. **Apache POI**: - **简介**:...

    JXL操作EXCEL的各个类的解析.doc

    JXL 操作 EXCEL 的各个类的解析 JXL 操作 EXCEL 的各个类的解析是 Java 语言中操作 Excel 文件的主要方法之一。JXL 通过提供了多种类来实现对 Excel 文件的读写操作。 首先,JXL 提供了一个抽象类 Workbook,该类...

    java使用jxl打印excel报表文件

    JXL库是一个广泛使用的Java库,它允许开发者读取、写入和修改Excel文件。本篇将深入探讨如何使用JXL库在Java中打印Excel报表。 首先,要使用JXL库,你需要在项目中引入它的依赖。在本例中,`jxl.jar`是JXL库的核心...

    jxl导出excel加水印.zip

    `jxl`库是一个流行的Java库,它允许开发者读取、写入和修改Excel文件。本教程将详细介绍如何使用`jxl`库在导出Excel时添加水印,以及涉及的核心类`WritableWorkbook`、`WritableSheet`和`WritableCellFormat`。 `...

    jxl读写excel数据,输出图片

    JXL库提供了方便的API,使得开发者可以轻松地处理Excel数据,包括读取单元格内容、修改工作表、添加公式,以及本文重点讨论的——插入和输出图片。 **一、JXL库介绍** JXL是一个开源的Java库,专门用于处理Excel...

    jxl方式生成excel表格.zip

    jxl库支持多种Excel操作,包括创建新的工作簿、添加工作表、设置单元格格式、插入公式以及读取Excel数据。这个库的使用极大地简化了在Java中处理Excel文件的工作流程。 在描述中提到的"txt转为excel Demo",这是一...

Global site tag (gtag.js) - Google Analytics