`
沙漠绿树
  • 浏览: 430548 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java实现对Excel文件的存取

阅读更多
javaeye 写道
      经过了一个下午的研究终于把java实现对Excel文件的存取有了一定的了解,现在发表出来,给大家参看参考,共同学习下,还请高手们指点指点。O(∩_∩)O。
注:试验用的Excel文件大家可以下下载。


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;

import jxl.Cell;
import jxl.CellType;
import jxl.DateCell;
import jxl.LabelCell;
import jxl.NumberCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.format.UnderlineStyle;
import jxl.write.Boolean;
import jxl.write.DateFormat;
import jxl.write.DateTime;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.NumberFormat;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

/**
 * 我想大家作为微软的忠实使用者,不用excel是那是不太可能的,但是要用java操作
 * 
 * excel表格,使用jdk自己的东西可能是不太可能的,因为我们水平可能还不够高吧。
 * 
 * 本类是用来操作excel表的,包含读取excel表,创建excel表 和 更新 excel表。
 * 
 * 要操作excel表,开源社区里好像有很多包,这里是用的是jxl包,这个是第三方的包,
 * 
 * 在开源社区里面有下,大家也可以到他们的官网上下载最新版的jxl.jar包,地址是:
 * 
 * http://sourceforge.net/project/showfiles.php?group_id=79926
 * 
 * @author LoongHua
 *
 */

public class JxlDemo {

	private final static String filePath="d:/test.xls";
	
	/**
	 * 
	 * 下面是要读取excel文件。
	 * 
	 */
	public static void readExcel() {
		
		File file=null;//声明一个文件对象。
		InputStream is=null;//声明一个输入流。
		Workbook rwb=null;//声明一个工作簿。
		Sheet sht=null;//声明一个工作表。
		
		try {
			file=new File(filePath);
		
			
//			读取文件时,应该先判断文件是否存在,要养成好习惯。
			if(!file.exists()){
				System.out.println("需要读入的excel文件不存在!");
				return ;//之间推出函数。
			}
			
//			两种得到workbook对象的方法:一是通过流的方式,二是通过得到文件的方式。
//			在得到工作簿的时候,要调用他们的工厂方法,不能之间用构造函数,要注意哦。
//			rwb = Workbook.getWorkbook(is);
//			is = new FileInputStream(file);

			rwb = Workbook.getWorkbook(file);
			
			//得到一个工作簿,有两种方式:一是通过工作表的索引,二是通过工作表的表明。
			sht = rwb.getSheet("人员工资");
//			sht=rwb.getSheet(0);
			
			Cell cell=null;//声明一个单元格。
			
			String str = null;//字符串类型。
			double num = 0.00;//双精度型。
			Date date = null;//日期型。
			
			//得到列数。
			int cols=sht.getColumns();
			//得到行数。
			int rows=sht.getRows();

			for (int i = 0; i < cols; i++) {
				
				for (int j = 0; j < rows; j++) {
					
//					根据列行坐标得到单元格对象。
//					在getCell函数中,第一个参数是列号:从0开始;第二个是行号:从0开始。
//					也可以通过单元格的名字得到单元格对象:Cell c11=sht.getCell("cellname");
					cell=sht.getCell(i,j);
					
					//判断单元格内容的类型是否为标签型:对应java的String型。
					if (cell.getType() == CellType.LABEL) {
						//把单元格强转成标签型单元格。
						LabelCell label = (LabelCell) cell;
						//得到单元格的内容。
						str = label.getString();
						
						System.out.println("Cell("+i+", "+j+")" + " value : " + str+ "; type : " + cell.getType());
					}
					//判断单元格内容的类型是否为数字型:对应java的int等类型。
					if (cell.getType() == CellType.NUMBER) {
						//把单元格强转成标数字型单元格。
						NumberCell numc = (NumberCell) cell;
						//得到单元格的数值。
						num = numc.getValue();
						
						System.out.println("Cell("+i+", "+j+")" + " value : " + num+ "; type : " + cell.getType());

					}
					//判断单元格内容的类型是否为日期型:对应java的Date等类型。
					if (cell.getType() == CellType.DATE) {
						//把单元格强转成标日期型单元格。
						DateCell datec = (DateCell) cell;
						//得到单元格的日期。
						date = datec.getDate();
						
						System.out.println("Cell("+i+", "+j+")" + " value : " + date+ "; type : " + cell.getType());

					}
					
				}
			}
					
			//得到一列中所有的单元格。
			Cell[] colcells=sht.getColumn(1);
			
			for (int i = 0; i < colcells.length; i++) {
				//之间用单元对象得到其内容。
				System.out.println(colcells[i].getContents());
			}
			
			//得到一行中所有的单元格。			
			Cell[] rowcells=sht.getRow(1);
			
			for (int i = 0; i < rowcells.length; i++) {
				//之间用单元对象得到其内容。
				System.out.println(rowcells[i].getContents());
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		finally{
			try {
				//关闭工作簿,这个是非常重要的,如果不进行这部,很容易把excel文件破坏。
				
				//如果是很重要的文件,你的麻烦就大了。关闭语句最好是写在finnally语句块中。
				rwb.close();
			} catch (Exception e) {
				System.out.println(e.getMessage());
			}
		}
	}

	/**
	 * 
	 * 下面是要创建excel文件。
	 * 
	 */
	public static void createExcel(){
		
		WritableWorkbook ww=null;
		WritableSheet ws=null;
		
		try {			
			String filepath="d:test1.xls";
			File file=new File(filepath);
			
			if(file.exists()){
				System.out.println("该文件不存在,将由WritableWorkbook对象来创建。");
			}
			
			//创建excel文件时,只能用WritableWorkbook类,不能用Workbook,它只能读excel文件。
			//创建WritableWorkbook对象要使用Workbook的工厂方法,不能用构造方法,这方法是受保护的。
			ww=Workbook.createWorkbook(file);
			
			//创建可写的工作表对象。以下是创建“公司部门”表。方法需要两个参数,一个是工作表的名称,另一个是工作表在工作薄中的位置,
			ws=ww.createSheet("公司部门", 0);
			
			
			//1.添加Label对象
			Label labelC = new Label(0, 0, "This is a Label cell");
			ws.addCell(labelC);
			
			//添加带有字型Formatting的对象
			WritableFont wf = new WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD, true);
			WritableCellFormat wcfF = new WritableCellFormat(wf);
			Label labelCF = new Label(1, 0, "This is a Label Cell", wcfF);
			ws.addCell(labelCF);
			
			//添加带有字体颜色Formatting的对象
			WritableFont wfc = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false,
			UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED);
			WritableCellFormat wcfFC = new WritableCellFormat(wfc);
			Label labelCFC = new Label(1, 0, "This is a Label Cell", wcfFC);
			ws.addCell(labelCFC);
			
			//2.添加Number对象
			Number labelN = new Number(0, 1, 3.1415926);
			ws.addCell(labelN);
			
			//添加带有formatting的Number对象
			NumberFormat nf = new NumberFormat("#.##");
			WritableCellFormat wcfN = new WritableCellFormat(nf);
			Number labelNF = new Number(1, 1, 3.1415926, wcfN);
			ws.addCell(labelNF);
			
			//3.添加Boolean对象
			Boolean labelB = new Boolean(0, 2, false);
			ws.addCell(labelB);
			
			//4.添加DateTime对象
			DateTime labelDT = new DateTime(0, 3, new java.util.Date());
			ws.addCell(labelDT);
			
			//添加带有formatting的DateFormat对象
			DateFormat df = new DateFormat("dd MM yyyy hh:mm:ss");
			WritableCellFormat wcfDF = new WritableCellFormat(df);
			DateTime labelDTF = new DateTime(1, 3, new java.util.Date(), wcfDF);
			ws.addCell(labelDTF);
		
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		finally{
			try {
				if(ww!=null){
					ww.write();
					ww.close();
				}
			} catch (Exception e) {
				System.out.println(e.toString());
			}
		}
		
	}
	
	/**
	 * 
	 * 下面是要更新一个数字型单元格,更新一个标签的单元格。
	 * 
	 */
	public static void updateExcle(){
		
		File file=null;
		OutputStream os=null;
		Workbook rwb=null;
		WritableWorkbook ww=null;
		WritableSheet ws=null;
		
		try {
			
			file=new File(filePath);
			
			if (!file.exists()){
				System.out.println("需要被更新的文件不存在,程序终止运行!");
				return ;
			}
		
			//下面三行放在一起是有原因的,我们使用jlx包来操作excel文件,就必须要这样做。
			//先把该文件读到内存,然后再覆盖的方式,这样就更新了该excel文件。必须记住哦。
			
			rwb=Workbook.getWorkbook(file);			
			os=new FileOutputStream(file);
			ww=Workbook.createWorkbook(os, rwb);
			
			ws=ww.getSheet("人员工资");//得到要更新的工作簿的工作表。

			
			//这里是更新数字型的单元格。
			//得到需要更新的单元格,这里都必须是可写的。
			WritableCell wc=ws.getWritableCell(1, 2);
			
			//注意以下if..else..里面写法不同,实现的功能也不同哦。
			//第一个是向空单元格中加入内容,字体等样式是jlx包默认的。
			//第二个是向有内容的单元格中更新内容,字体样式和之前的一样。
			if(wc.getType()==CellType.EMPTY){
				Number num=new Number(1,2,5000);
				ws.addCell(num);
			}
			else{
				if(wc.getType()==CellType.NUMBER){
					Number num=(Number)wc;
					num.setValue(5000);
					System.out.println("修改数字型的单元格成功!");
				}
			}
			
			
			//这里是更新标签型的单元格。
			WritableCell wc1=ws.getWritableCell(0, 3);
			
			//注意以下if..else..里面写法不同,实现的功能也不同哦。
			//第一个是向空单元格中加入内容,字体等样式是jlx包默认的。
			//第二个是向有内容的单元格中更新内容,字体样式和之前的一样。
			if(wc1.getType()==CellType.EMPTY){
				Label lab=new Label(0,3,"合计");
				ws.addCell(lab);
				System.out.println("添加标签型的单元格成功!");
			}
			else{
				if(wc1.getType()==CellType.LABEL){
					Label lab=(Label)wc1;
					lab.setString("合计");
					System.out.println("修改标签型的单元格成功!");
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		finally{
			try {
				if(ww!=null){
					ww.write();
					ww.close();
				}
				if(rwb!=null){
					rwb.close();
				}
			} catch (Exception e) {
				System.out.println(e.toString());
			}
		}
	}
		
	public static void main(String[] args) {
//		以下三个方法一个一个执行,观察下效果更好些。
		readExcel();
//		createExcel();
//		updateExcle();
	}
}

分享到:
评论

相关推荐

    Excel文件存取 C++

    当涉及到与Excel文件交互时,C++可以通过各种库来实现对Excel文件的读取和写入操作。本篇将详细介绍如何在C++中处理Excel文件,以及转换为文本格式的方法。 1. **Excel接口库** - **libxl**: 这是一个轻量级的库,...

    VC 实现Excel操作

    本项目"VC 实现Excel操作"提供了一种方法,通过VC++来读写Excel文件,使得开发者可以方便地进行数据存取。下面我们将深入探讨相关的知识点。 首先,要实现VC++与Excel的交互,我们需要引入Microsoft的Office开发...

    ssh+excel+poi

    Apache POI是Java中用于读写Microsoft Office格式文件的开源库,特别适用于Excel文件。 1. **Spring框架**:Spring是一个全面的后端开发框架,提供依赖注入、AOP(面向切面编程)、事务管理等功能,使得开发者可以...

    java csv 读写框架特殊字符转义.docx

    该框架还解决了 Excel 直接翻开、utf-8 乱码问题,并支持集合、数组、Map 的存取、对象中内嵌其他对象、特别字符转义等功能。 在实际使用中,特别字符转义是一个重要的功能。假设我们期望这些特别字符被正确的存取...

    android 读写Excel(支持xlsx xls格式)

    本文将详细讲解如何在Android中实现对.xlsx和.xls格式的Excel文件进行读写,主要涉及的技术点包括文件操作、数据解析以及第三方库的使用。 一、文件操作基础 在Android中,文件操作通常涉及到以下几个步骤: 1. ...

    Database_Interface.rar_*.xls_java excel_javadbf foxpro_ojdbc DB

    1. **Java Excel API**:这是Java中用于处理Microsoft Excel文件的库,如jxl或Apache POI。这些API允许开发者读取、写入和修改Excel工作簿和工作表,从而可以方便地将Excel数据转换为适合数据库导入的格式。 2. **...

    Java解析Excel内容的方法

    在Java中,如果你需要处理Excel文件,Apache POI是首选的库。 2. **HSSFWorkbook 和 XSSFWorkbook**:在Apache POI中,`HSSFWorkbook`是用于处理Excel 97-2007 (.xls)格式的类,而`XSSFWorkbook`则是用于处理Excel ...

    伙食计算系统(JAVA+ODBC)

    此外,该系统还利用了jxl库来处理Excel文件,便于数据导入导出和报表生成,而JNA(Java Native Access)则允许JAVA代码直接调用操作系统底层功能,增强了系统的功能性。 在JAVA编程中,ODBC是连接数据库的关键组件...

    excel解析及发送邮件的小例子

    Excel文件通常用于存储和管理表格数据,而编程语言中的库或工具(如Apache POI、JExcelAPI等)可以帮助我们读取、修改和创建Excel文件。在这个例子中,可能是使用Java中的Apache POI库来读取Excel数据。POI提供了API...

    Applet嵌入Office窗口打开office文件

    包含了打开excel与word文件。.Java Applet 可以大大提高Web页面的交互能力和动态执行能力。包含Applet的网页被称为Java-powered页,可以称其为Java支持的网页。当Applet用户访问这样的网页时,Applet被下载到用户的...

    (超赞)JAVA精华之--深入JAVA API

    - **随机存取文件** - `RandomAccessFile` 允许以随机方式访问文件,支持读写操作。 **1.1.4 与时间有关的类** - **Date, DateFormat, Calendar** - `Date` 表示特定的时间点。 - `DateFormat` 用于格式化和...

    java企业工薪管理系统

    4. **JDBC(Java Database Connectivity)**:它是Java与数据库交互的接口,允许程序通过编写Java代码来执行SQL语句,实现数据的存取。 5. **Servlet与JSP**:Servlet是Java服务器端程序,处理HTTP请求并生成响应。...

    java常用的jar包集合

    9. **JExcelApi**(jexcelapi):这是一个用于读写Excel文件的Java库,它可以方便地处理Excel数据,进行导入导出操作,常用于数据分析和报表生成。 这些jar包在Java开发中扮演着重要角色,覆盖了日志记录、数据库...

    java范例开发大全源代码

     实例135 读取Excel文件中的内容 198  实例136 生成PDF文件 199  实例137 读取PDF文件中的内容 203  实例138 用iText生成Word文件 205  实例139 利用POI读取Word文件中的内容 208  7.3 字符流 209 ...

    干洗店管理系统,美萍干洗店管理系统,Java源码.zip.zip

    这里可能会用到Java的报表库如iText或JasperReports,以及数据分析工具如Apache POI进行Excel文件操作。 5. **用户界面模块**:美萍干洗店管理系统提供友好的用户界面,方便员工操作。JavaFX或Swing库可用于构建...

    java范例开发大全

    实例135 读取Excel文件中的内容 198 实例136 生成PDF文件 199 实例137 读取PDF文件中的内容 203 实例138 用iText生成Word文件 205 实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 实例140 按顺序创建文件 ...

    java swing mysql实现的员工工资管理系统项目源码附带视频教程.zip

    本项目是一个基于Java Swing和MySQL数据库实现的员工工资管理系统,旨在提供一套完整的解决方案,用于管理企业内部员工的薪资信息。这个系统涵盖了员工信息管理、工资计算、报表生成等多个功能模块,帮助企业管理者...

    项目开发Excel导入导出操作组件源代码(附带说明文档).zip

    只要把指定的Excel文件记录封装成指定的 vo List就可以啦,这就是我最原始的想法。在封装转换过程中,借助于xml配制文件,建立一个对应的关系(指Excel列对应vo属性)。同时在转换中做到信息内容的代码转换(指...

    Java范例开发大全 (源程序)

     实例135 读取Excel文件中的内容 198  实例136 生成PDF文件 199  实例137 读取PDF文件中的内容 203  实例138 用iText生成Word文件 205  实例139 利用POI读取Word文件中的内容 208  7.3 字符流 209  ...

    Swing写的一个简易记事小软件

    3. **Excel集成**:程序能够读写Excel文件,利用了Java的Apache POI库或者其他类似库来操作Excel对象,实现数据的存取。 4. **数据持久化**:将用户输入的数据保存到dailywork.xls文件中,实现了数据的持久化存储,...

Global site tag (gtag.js) - Google Analytics