`
wuhongyu
  • 浏览: 406930 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

jxl 操作 Excel

阅读更多

    java 操作 Excel 最常用的就是JXL(java excel api)和POI,今先看下JXL吧。首先可以到 http://www.andykhan.com/jexcelapi/download.html 下载最新的jxl.jar,里面有它的jar包和API,内有一个小例子,可以参考一下。

 

    JXL 用起来挺简单的,不过相应的其功能也并不是十分强大,对于一般的简单的excel操作还可以,对于太复杂的还是有些吃力,基本的操作也就是以下几项内容。

 

    首先,要创建一个可读写的工作簿(WritableWorkbook):

WritableWorkbook workbook = Workbook.createWorkbook(new File("d:\\test.xls"));

 

    如果是想要修改一个已存在的excel工作簿,则需要先获得它的原始工作簿,再创建一个可读写的副本:

Workbook wb = Workbook.getWorkbook(new File("src\\test\\test.xls")); // 获得原始文档
WritableWorkbook workbook = Workbook.createWorkbook(new File("d:\\test_modified.xls"),wb); // 创建一个可读写的副本

 

    然后,取得我们要操作的sheet,并对其进行相应的操作,如改名、合并单元格、设置列宽、行高等:

WritableSheet sheet = workbook.getSheet(0);
sheet.setName("修改后"); // 给sheet页改名
workbook.removeSheet(2); // 移除多余的标签页
workbook.removeSheet(3);
		
sheet.mergeCells(0, 0, 4, 0); // 合并单元格
sheet.setRowView(0, 600); // 设置行的高度
sheet.setColumnView(0, 30); // 设置列的宽度
sheet.setColumnView(1, 20); // 设置列的宽度

 

    之后,就是对单元格的操作了,可以通过如下方法获取一个单元格,其中两个参数分别为列、行的位置,从0开始计数,如(2,3)就代表单元格C4:

WritableCell cell = sheet.getWritableCell(2,3);

 

    通过WritableFont、WritableCellFormat等对象可以设置单元格的字体、样式等外观:

WritableFont titleWf = new WritableFont(WritableFont.createFont("仿宋_GB2312"),// 字体
				 			20,//WritableFont.DEFAULT_POINT_SIZE,   // 字号
				 			WritableFont.NO_BOLD,			       // 粗体
				 			false,							       // 斜体
				 			UnderlineStyle.NO_UNDERLINE,			// 下划线
				 			Colour.BLUE2,						// 字体颜色
				 			ScriptStyle.NORMAL_SCRIPT);
WritableCellFormat wcf = new WritableCellFormat(titleWf);
wcf.setBackground(Colour.GRAY_25);// 设置单元格的背景颜色
wcf.setAlignment(Alignment.CENTRE); // 设置对齐方式
wcf.setBorder(Border.ALL, BorderLineStyle.THICK); // 添加边框
cell.setCellFormat(wcf);

 

    在jxl中,有几种常用的数据类型,根据单元格内数据类型的不同,每个WritableCell可以根据其类型被转换为它的一个子类型,以便对不同类型的数据进行专门的处理,通常可以做这样的转换:

WritableCell fromCell = sheet0.getWritableCell(j, i);

if (fromCell instanceof jxl.write.Number) {
	jxl.write.Number num = (jxl.write.Number) fromCell;
} else if (fromCell instanceof jxl.write.Boolean) {
	jxl.write.Boolean bool = (jxl.write.Boolean) fromCell;
} else if (fromCell instanceof jxl.write.DateTime) {
	jxl.write.DateTime dt = (jxl.write.DateTime) fromCell;
} else if(fromCell instanceof Label){
	Label _label = (Label) fromCell;
}
 

    当然,操作完成之后一定不要忘了刷新(或者叫写入?)和关掉工作簿:

 workbook.write();
 workbook.close();
 

 

下面是参考jxl api里那个例子写的,把我自己觉得常用的excel操作基本都包含了:

package test;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

import jxl.CellType;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.ScriptStyle;
import jxl.format.UnderlineStyle;
import jxl.format.VerticalAlignment;
import jxl.read.biff.BiffException;
import jxl.write.Blank;
import jxl.write.DateFormat;
import jxl.write.DateFormats;
import jxl.write.DateTime;
import jxl.write.Formula;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.NumberFormat;
import jxl.write.WritableCell;
import jxl.write.WritableCellFeatures;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableHyperlink;
import jxl.write.WritableImage;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

/**
 * 
 * @author why
 *
 */
public class ExcelTest {

	/**
	 * @param args
	 * @throws IOException 
	 * @throws BiffException 
	 * @throws WriteException 
	 */
	public static void main(String[] args) throws IOException, BiffException, WriteException {
		Workbook wb = Workbook.getWorkbook(new File("src\\test\\test.xls")); // 获得原始文档
		WritableWorkbook workbook = Workbook.createWorkbook(new File("d:\\test_modified.xls"),wb); // 创建一个可读写的副本
		
		
		/**
		 * 定义与设置Sheet
		 */
		WritableSheet sheet = workbook.getSheet(0);
		sheet.setName("修改后"); // 给sheet页改名
		workbook.removeSheet(2); // 移除多余的标签页
		workbook.removeSheet(3);
		
		sheet.mergeCells(0, 0, 4, 0); // 合并单元格
		sheet.setRowView(0, 600); // 设置行的高度
		sheet.setColumnView(0, 30); // 设置列的宽度
		sheet.setColumnView(1, 20); // 设置列的宽度
		
		 WritableCell cell = null;
		 WritableCellFormat wcf = null;
		 Label label = null;
		 WritableCellFeatures wcfeatures = null;
		
		 // 更改标题字体
		 cell = sheet.getWritableCell(0,0);
		 WritableFont titleWf = new WritableFont(WritableFont.createFont("仿宋_GB2312"),// 字体
				 								 20,//WritableFont.DEFAULT_POINT_SIZE,  // 字号
				 								 WritableFont.NO_BOLD,					// 粗体
				 								 false,								 	// 斜体
				 								 UnderlineStyle.NO_UNDERLINE,			// 下划线
				 								 Colour.BLUE2,							// 字体颜色
				 								 ScriptStyle.NORMAL_SCRIPT);
		 wcf = new WritableCellFormat(titleWf);
		 wcf.setBackground(Colour.GRAY_25);// 设置单元格的背景颜色
		 wcf.setAlignment(Alignment.CENTRE); // 设置对齐方式
		 wcf.setBorder(Border.ALL, BorderLineStyle.THICK); // 添加边框
		 cell.setCellFormat(wcf);
		
		 // 将B3的字体改为仿宋_GB2312
		 cell = sheet.getWritableCell(1,2);
		 WritableFont fs = new WritableFont(WritableFont.createFont("仿宋_GB2312"),
	    								   11);
		 wcf = new WritableCellFormat(fs);
		 cell.setCellFormat(wcf);
	    
		 // 将B4的字号改为20
		 cell = sheet.getWritableCell(1,3);
		 WritableFont size20 = new WritableFont(WritableFont.createFont("宋体"), 
	                                           20);
		 wcf = new WritableCellFormat(size20);
		 cell.setCellFormat(wcf);
	    
		 // 将B5的字体改为加粗
		 cell = sheet.getWritableCell(1,4);
		 WritableFont bold = new WritableFont(WritableFont.createFont("宋体"), 
	                                           11,
	                                           WritableFont.BOLD);
		 wcf = new WritableCellFormat(bold);
		 cell.setCellFormat(wcf);
	    
		 // 将B6的字体改为倾斜
		 cell = sheet.getWritableCell(1,5);
		 WritableFont italic = new WritableFont(WritableFont.createFont("宋体"), 
	                                         	11,
	                                         	WritableFont.NO_BOLD,
	                                         	true);
		 wcf = new WritableCellFormat(italic);
		 cell.setCellFormat(wcf);
	    
		 // 将B7字体加下划线
		 cell = sheet.getWritableCell(1,6);
		 WritableFont underline = new WritableFont(WritableFont.createFont("宋体"), 
				 								   11,
				 								   WritableFont.NO_BOLD,
				 								   false,
				 								   UnderlineStyle.SINGLE);
		 wcf = new WritableCellFormat(underline);
		 cell.setCellFormat(wcf);
	    
		 // 将B8的文字改为“待修改文字-已修改”
		 cell = sheet.getWritableCell(1,7);
		 if (cell.getType() == CellType.LABEL)
		 {
			 Label lc = (Label) cell;
			 lc.setString(lc.getString() + " - 已修改");
		 }
	    
		 // 将B9文字对齐方式改为垂直居中、右对齐
		 cell = sheet.getWritableCell(1,8);
		 WritableFont align = new WritableFont(WritableFont.createFont("宋体"), 
                								  11);
		 wcf = new WritableCellFormat(align);
		 wcf.setAlignment(Alignment.RIGHT); // 设置为右对齐
		 wcf.setVerticalAlignment(VerticalAlignment.CENTRE); // 设置为垂直居中
		 cell.setCellFormat(wcf);
	    
		 // 将E3文字改为自动换行
		 cell = sheet.getWritableCell(4,2);
		 WritableFont justify = new WritableFont(WritableFont.createFont("宋体"), 
                								  11);
		 wcf = new WritableCellFormat(justify);
		 wcf.setAlignment(Alignment.JUSTIFY);
		 cell.setCellFormat(wcf);
	    
	    
		 // 将B12的数字有效位数从5位改为7位
		 cell = sheet.getWritableCell(1,11);
		 NumberFormat sevendps = new NumberFormat("#.0000000");
		 wcf = new WritableCellFormat(sevendps);
		 cell.setCellFormat(wcf);
	    
		 // 将B13改为4位科学计数法表示
		 cell = sheet.getWritableCell(1,12);
		 NumberFormat exp4 = new NumberFormat("0.####E0");
		 wcf = new WritableCellFormat(exp4);
		 cell.setCellFormat(wcf);
	    
		 // 将B14改为默认数字表示
		 cell = sheet.getWritableCell(1,13);
		 cell.setCellFormat(WritableWorkbook.NORMAL_STYLE);
	    
		 // 将B15数字类型的值17改为22
		 cell = sheet.getWritableCell(1,14);
		 if (cell.getType() == CellType.NUMBER)
		 {
			 Number n = (Number) cell;
			 n.setValue(42);
		 }
	    
		 // 将B16的值2.71进行加法运算2.71 + 0.1
		 cell = sheet.getWritableCell(1,15);
		 if (cell.getType() == CellType.NUMBER)
		 {
			 Number n = (Number) cell;
			 n.setValue(n.getValue() + 0.1);
		 }
	    
		 // 将B19日期格式改为默认
		 cell = sheet.getWritableCell(1,18);
		 wcf = new WritableCellFormat(DateFormats.FORMAT9);
		 cell.setCellFormat(wcf);
	    
		 // 将B20日期格式改为dd MMM yyyy HH:mm:ss
		 cell = sheet.getWritableCell(1,19);
		 DateFormat df = new DateFormat("dd MMM yyyy HH:mm:ss");
		 wcf = new WritableCellFormat(df);
		 cell.setCellFormat(wcf);
	    
		 // 将B21的日期设置为 2011-6-1 11:18:50
		 cell = sheet.getWritableCell(1,20);
		 if (cell.getType() == CellType.DATE)
		 {
			 DateTime dt = (DateTime) cell;
			 Calendar cal = Calendar.getInstance();
			 cal.set(2011, 5, 1, 11, 18, 50);
			 Date d = cal.getTime();
			 dt.setDate(d);
		 }
	    
	    
		 // 将B24文字添加链接http://www.baidu.com
		 WritableHyperlink link = new WritableHyperlink(1, 23, new URL("http://www.baidu.com"));
		 sheet.addHyperlink(link);
	    
		 // 更改URL链接
		 WritableHyperlink hyperlinks[] = sheet.getWritableHyperlinks();
		 for (int i = 0; i < hyperlinks.length; i++) {
			 WritableHyperlink wh = hyperlinks[i];
			 if (wh.getColumn() == 1 && wh.getRow() == 24) {
				 // 将B25文字链接取消
				 sheet.removeHyperlink(wh,true);//true:保留文字;false:删除文字
			 }else if(wh.getColumn() == 1 && wh.getRow() == 25){
				 try {
					 // 将B26链接更改为http://wuhongyu.javaeye.com
					 wh.setURL(new URL("http://wuhongyu.javaeye.com"));
				 } catch (MalformedURLException e) {
					 e.printStackTrace();
				 }
			 }
		 }
	    
		
		 // 利用公式取得B29、B30的值
		 Formula f1 = new Formula(1, 28, "SUM(C29:D29)");
		 sheet.addCell(f1);
		 Formula f2 = new Formula(1, 29, "AVERAGE(C30:G30)");
		 sheet.addCell(f2);
	    
		 // 在B32处添加图片,图片大小占10行3列,只支持png格式
		 File file = new File("d:\\shu05.png");
		 WritableImage image = new WritableImage(1, 31, 3, 10, file);
		 sheet.addImage(image);
		
		 // 在A44出添加内容"Added drop down validation",并为其添加注释
		 label = new Label(0, 43, "Added drop down validation");
		 wcfeatures = new WritableCellFeatures();
		 wcfeatures.setComment("右边列是个下拉列表");
		 label.setCellFeatures(wcfeatures);
		 sheet.addCell(label);
		 
		 // 在B44处添加一个下拉列表并添加注释
		 Blank b = new Blank(1, 43);
		 wcfeatures = new WritableCellFeatures();
		 ArrayList al = new ArrayList();
		 al.add("why");
		 al.add("landor");
		 al.add("tjm");
		 wcfeatures.setDataValidationList(al);
		 wcfeatures.setComment("这是一个注释");
		 b.setCellFeatures(wcfeatures);
		 sheet.addCell(b);
		 
		 // 为A46添加注释。
		 // 此处比较麻烦,试了多次发现必须将cell强制类型转换、添加CellFeatures再修改注释才可用,不知有没有更好的办法。
		 cell = sheet.getWritableCell(0,45);
		 wcfeatures = new WritableCellFeatures();
		 wcfeatures.setComment("这个注释不会被显示,删了这行还不行,MD");
		 cell.setCellFeatures(wcfeatures);
		 
		 label = (Label) cell;
//		 label.setCellFeatures(wcfeatures);// 直接这样写会报一个警告(“注释已存在”),但那个注释仍会被显示。
		 label.addCellFeatures();
		 label.getWritableCellFeatures().setComment("终于加上注释了,哈哈哈哈");
		 
		 
//		if (cell instanceof Number) {
//			Number num = (Number) cell;
//			num.setCellFeatures(wcfeatures);
//		} else if (cell instanceof jxl.write.Boolean) {
//			jxl.write.Boolean bool = (jxl.write.Boolean) cell;
//			bool.setCellFeatures(wcfeatures);
//		} else if (cell instanceof jxl.write.DateTime) {
//			jxl.write.DateTime dt = (jxl.write.DateTime) cell;
//			dt.setCellFeatures(wcfeatures);
//		} else {
//			Label _label = (Label) cell;
//			_label.setCellFeatures(wcfeatures);
//		}
		 
		 workbook.write();
		 workbook.close();
		 wb.close();
	}

}
 

 

附件

jxl_test.rar 中是我测试的代码、测试用的excel以及修改后生成的excel。

jexcelapi_2_6_12_zip 是我用的版本的jxl的包。

 

 

分享到:
评论

相关推荐

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

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

    利用jxl操作excel文件

    本篇将详细介绍如何利用`jxl`库来操作Excel文件,并结合实例说明如何从Excel文件中提取数据并生成TXT文件。 首先,我们需要理解`jxl`库的基本结构。`jxl`库主要提供了`Workbook`、`Sheet`、`Cell`等类,分别对应...

    JXL操作excel设置字体颜色设置单元格详解

    JXL操作Excel设置字体颜色设置单元格详解 JXL是一个韩国人写的Java操作Excel的工具,在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI。其中功能相对POI比较弱一点。但jExcelAPI对中文...

    jxl操作excel文件例子

    标题“jxl操作excel文件例子”指的是利用JXL库进行Excel文件处理的实际应用。描述中提到的“通过jxl操作excel,简单方便”,暗示了JXL库的一个关键优点——简洁易用的API,使得对Excel文件的操作变得相当直观。 JXL...

    jxl操作excel文件

    ### jxl操作Excel文件知识点详解 #### 一、jxl简介 jxl 是一款用于 Java 环境下的 Excel 操作库,由一位韩国开发者所编写。与 Apache POI 相比,jxl 的功能略显简单,但在中文支持方面表现出色。jxl API 不依赖于...

    jxl 操作excel Demo

    这个"jxl操作excel Demo"显然是一份示例代码,它展示了如何使用jxl库来与Excel文件进行交互。以下是对jxl库和其在处理Excel文件中使用方法的详细说明。 1. **jxl库介绍** jxl是一个开源的Java库,允许开发者在Java...

    关于jxl操作excel说明以及jxl.jar包下载2.6

    标题"关于jxl操作excel说明以及jxl.jar包下载2.6"表明我们将探讨如何使用JXL库以及在哪里获取它的特定版本(2.6)。 首先,让我们深入了解一下JXL库。JXL是Java Excel API的简称,它提供了一套完整的API,可以创建...

    Java jxl操作Excel97-2003 eclipse可运行项目实例

    这个"Java jxl操作Excel97-2003 eclipse可运行项目实例"提供了一个实用的示例,帮助开发者了解如何在Eclipse环境中使用jxl库与Excel97-2003版本的文件进行交互。 1. **jxl库介绍** jxl库是Java编程语言中的一个...

    jxl操作excel模板jar包

    jxl操作excel模板jar包,用于导出特定excel模板

    jxl操作Excel简单

    `jxl操作Excel.docx`文件很可能是JXL的API文档,其中包含了详细的类、方法和参数说明,是开发时的重要参考资源。建议仔细阅读并理解每个类和方法的功能,以便更好地利用JXL进行Excel操作。 9. **JXL标签的用途** ...

    公司真正项目使用jxl操作excel代码程序

    本项目中的“公司真正项目使用jxl操作excel代码程序”是一个具体的实例,展示了如何利用Java的jxl库来与Excel文件进行交互,以满足公司报表打印的需求。 jxl是一个开源的Java库,它允许开发人员读取、写入和修改...

    JXL操作EXCEL(详)

    标题"JXL操作EXCEL(详)"暗示我们将深入探讨JXL库如何处理Excel文件的各种细节,包括公式、颜色、表格、百分比和小数点等元素的处理。 首先,**JXL的安装与引入**。要使用JXL,你需要将jxl.jar添加到项目的类路径中...

    java中jxl操作excel

    ### Java中jxl操作Excel详解 #### 一、jxl简介与优势 jxl是一个用于在Java中操作Microsoft Excel文件的开源库。虽然其功能相较于Apache POI可能略显简单,但在处理中文字符方面表现优异,且由于其纯Java实现,无需...

    JXL操作EXCEL 数据库导出EXCEL相关文件

    本篇文章将深入探讨JXL库在操作Excel和数据库导出Excel文件方面的应用。 首先,我们来了解JXL的基本用法。JXL支持读取和写入Biff8格式的Excel文件(即97-2003版本的.XLS文件),这涵盖了大部分常见的Excel文件需求...

    用jxl操作excel实例

    标题中的“用jxl操作excel实例”指的是使用Java Excel API(简称JXL)来处理Microsoft Excel文件的一个实际应用。JXL是一个开源库,允许Java开发者读取、写入和修改Excel电子表格。在这个Spring MVC工程中,JXL被...

    jxl操作EXCEL的好东西

    在标题“jxl操作EXCEL的好东西”中,"jxl"指的是这个库,它为Java开发者提供了一种方便的方式来处理Excel数据,而无需依赖Microsoft Office套件。描述中的“好东西”暗示了jxl库的易用性和实用性,使得开发者可以...

    jxl操作excel

    在标题中提到的“jxl操作excel”,这意味着我们将探讨如何使用JXL库进行Excel文件的操作。JXL分为两个主要版本:Standard Edition (SE) 和 Web Edition (Web)。这两个版本都是为了满足不同场景下的需求。 1. JXL SE...

    JXL操作EXCEL的各个类的解析

    Excel的生成方式其实很简单,主要包括几个大的类,首先最重要的几个类就是WritableWorkbook,这个类代表的就是一个Excel文档,使用过Excel文档的都应该知道Excel文档的组成,都是由一个一个的sheet组成的,那么这个...

    jxl 操作EXCEL格式

    **JXL库简介** JXL(Java Excel API)是一个开源的Java库,专门用于读取、写入和修改Microsoft Excel文件。...JXL支持多种Excel功能,包括单元格样式、公式...希望这个简短的介绍对你在使用JXL操作Excel格式时有所帮助。

    使用jxl操作Excel

    本篇将详细介绍如何使用`jxl`库进行Excel的操作,包括导入、导出、读取以及更新Excel内容。 首先,让我们了解一下`jxl`库。`jxl`是Java Excel API的缩写,它提供了一个方便的接口,允许开发者以编程方式处理Excel...

Global site tag (gtag.js) - Google Analytics