`
沙漠绿树
  • 浏览: 429497 次
  • 性别: 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...

    (超赞)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请求并生成响应。...

    Applet嵌入Office窗口打开office文件

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

    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范例开发大全 (源程序)

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

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

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

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

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

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

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

Global site tag (gtag.js) - Google Analytics