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文件,以及转换为文本格式的方法。 1. **Excel接口库** - **libxl**: 这是一个轻量级的库,...
本项目"VC 实现Excel操作"提供了一种方法,通过VC++来读写Excel文件,使得开发者可以方便地进行数据存取。下面我们将深入探讨相关的知识点。 首先,要实现VC++与Excel的交互,我们需要引入Microsoft的Office开发...
Apache POI是Java中用于读写Microsoft Office格式文件的开源库,特别适用于Excel文件。 1. **Spring框架**:Spring是一个全面的后端开发框架,提供依赖注入、AOP(面向切面编程)、事务管理等功能,使得开发者可以...
该框架还解决了 Excel 直接翻开、utf-8 乱码问题,并支持集合、数组、Map 的存取、对象中内嵌其他对象、特别字符转义等功能。 在实际使用中,特别字符转义是一个重要的功能。假设我们期望这些特别字符被正确的存取...
本文将详细讲解如何在Android中实现对.xlsx和.xls格式的Excel文件进行读写,主要涉及的技术点包括文件操作、数据解析以及第三方库的使用。 一、文件操作基础 在Android中,文件操作通常涉及到以下几个步骤: 1. ...
1. **Java Excel API**:这是Java中用于处理Microsoft Excel文件的库,如jxl或Apache POI。这些API允许开发者读取、写入和修改Excel工作簿和工作表,从而可以方便地将Excel数据转换为适合数据库导入的格式。 2. **...
在Java中,如果你需要处理Excel文件,Apache POI是首选的库。 2. **HSSFWorkbook 和 XSSFWorkbook**:在Apache POI中,`HSSFWorkbook`是用于处理Excel 97-2007 (.xls)格式的类,而`XSSFWorkbook`则是用于处理Excel ...
此外,该系统还利用了jxl库来处理Excel文件,便于数据导入导出和报表生成,而JNA(Java Native Access)则允许JAVA代码直接调用操作系统底层功能,增强了系统的功能性。 在JAVA编程中,ODBC是连接数据库的关键组件...
Excel文件通常用于存储和管理表格数据,而编程语言中的库或工具(如Apache POI、JExcelAPI等)可以帮助我们读取、修改和创建Excel文件。在这个例子中,可能是使用Java中的Apache POI库来读取Excel数据。POI提供了API...
包含了打开excel与word文件。.Java Applet 可以大大提高Web页面的交互能力和动态执行能力。包含Applet的网页被称为Java-powered页,可以称其为Java支持的网页。当Applet用户访问这样的网页时,Applet被下载到用户的...
- **随机存取文件** - `RandomAccessFile` 允许以随机方式访问文件,支持读写操作。 **1.1.4 与时间有关的类** - **Date, DateFormat, Calendar** - `Date` 表示特定的时间点。 - `DateFormat` 用于格式化和...
4. **JDBC(Java Database Connectivity)**:它是Java与数据库交互的接口,允许程序通过编写Java代码来执行SQL语句,实现数据的存取。 5. **Servlet与JSP**:Servlet是Java服务器端程序,处理HTTP请求并生成响应。...
9. **JExcelApi**(jexcelapi):这是一个用于读写Excel文件的Java库,它可以方便地处理Excel数据,进行导入导出操作,常用于数据分析和报表生成。 这些jar包在Java开发中扮演着重要角色,覆盖了日志记录、数据库...
实例135 读取Excel文件中的内容 198 实例136 生成PDF文件 199 实例137 读取PDF文件中的内容 203 实例138 用iText生成Word文件 205 实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 ...
这里可能会用到Java的报表库如iText或JasperReports,以及数据分析工具如Apache POI进行Excel文件操作。 5. **用户界面模块**:美萍干洗店管理系统提供友好的用户界面,方便员工操作。JavaFX或Swing库可用于构建...
实例135 读取Excel文件中的内容 198 实例136 生成PDF文件 199 实例137 读取PDF文件中的内容 203 实例138 用iText生成Word文件 205 实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 实例140 按顺序创建文件 ...
本项目是一个基于Java Swing和MySQL数据库实现的员工工资管理系统,旨在提供一套完整的解决方案,用于管理企业内部员工的薪资信息。这个系统涵盖了员工信息管理、工资计算、报表生成等多个功能模块,帮助企业管理者...
只要把指定的Excel文件记录封装成指定的 vo List就可以啦,这就是我最原始的想法。在封装转换过程中,借助于xml配制文件,建立一个对应的关系(指Excel列对应vo属性)。同时在转换中做到信息内容的代码转换(指...
实例135 读取Excel文件中的内容 198 实例136 生成PDF文件 199 实例137 读取PDF文件中的内容 203 实例138 用iText生成Word文件 205 实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 ...
3. **Excel集成**:程序能够读写Excel文件,利用了Java的Apache POI库或者其他类似库来操作Excel对象,实现数据的存取。 4. **数据持久化**:将用户输入的数据保存到dailywork.xls文件中,实现了数据的持久化存储,...