JAVA对Excel文件进行操作

您所在的位置:网站首页 torchstdio JAVA对Excel文件进行操作

JAVA对Excel文件进行操作

#JAVA对Excel文件进行操作| 来源: 网络整理| 查看: 265

JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为它是使用Java编写的,所以我们在Web应用中可以通过JSP、Servlet来调用API实现对Excel数据表的访问。

下载:

Java Excel API的jar包可以通过以下URL获得:

http://sourceforge.net/projects/jexcelapi/files/jexcelapi/2.6.6/jexcelapi_2_6_6.zip/download

(包括所有版本):http://sourceforge.net/projects/jexcelapi/files/

直接下载地址(迅雷上新建任务即可):

http://nchc.dl.sourceforge.net/project/jexcelapi/jexcelapi/2.6.6/jexcelapi_2_6_6.zip 

示例1:读取本地Excel文件F:\红楼人物.xls

1.       新建Excel文件F:\红楼人物.xls

内容如下:

2.       Java通过jexcelapi包操作excel文件:

//in ExcelOperater import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import jxl.Cell; import jxl.CellType; import jxl.Sheet; import jxl.Workbook; import jxl.write.Label; public class ExcelOperater { public static void main(String[] args) { jxl.Workbook readwb = null; try { //构建Workbook对象, 只读Workbook对象 //直接从本地文件创建Workbook InputStream instream = new FileInputStream("F:/红楼人物.xls"); readwb = Workbook.getWorkbook(instream); //Sheet的下标是从0开始 //获取第一张Sheet表 Sheet readsheet = readwb.getSheet(0); //获取Sheet表中所包含的总列数 int rsColumns = readsheet.getColumns(); //获取Sheet表中所包含的总行数 int rsRows = readsheet.getRows(); //获取指定单元格的对象引用 for (int i = 0; i  

3.       结果:

①     控制台输出:

人物 等级 大观园位置 金陵十二钗

林黛玉 小姐 潇湘馆 正册

妙玉 世外 栊翠庵 正册

晴雯 丫鬟 怡红院 副册

香菱 妾 蘅芜苑 又副册

②     创建文件F:\红楼人物1.xls

4.       程序解析:

所引用的包:

①     Workbook对象,需要jxl.Workbook包;

②     InputStream、FileInputStream对象:需要java.io.FileInputStream和java.io.InputStream包。

③     Sheet对象:jxl.Sheet包;注意excel中sheet表单的行列从0开始计数。

④     Cell对象:jxl.Cell包;对单元进行处理

⑤     Label:选择jxl.write.label包

⑥     WritableWorkbook、WritableSheet、WritableCelll对象

实例二:3个功能-----从excel文件F:\红楼人物.xls读取数据;生成新的excel文件F:\红楼人物2.xls;修改原excel一个单元并输出为F:\红楼人物3.xls。

原始文件:F:\红楼人物.xls

运行结果:

①     控制台输出:

人物 等级 大观园位置 金陵十二钗

林黛玉 小姐 潇湘馆 正册

妙玉 世外 栊翠庵 正册

晴雯 丫鬟 怡红院 副册

香菱 妾 蘅芜苑 又副册

②     写入输出Excel文件:F:\红楼人物2.xls

③     修改输出文件 F:\红楼人物3.xls (加修饰后输出)

示例程序:

1 //in ExcelHandle 2 3 import jxl.*; 4 5 import jxl.format.UnderlineStyle; 6 7 import jxl.write.*; 8 9 import jxl.write.Number; 10 11 import jxl.write.Boolean; 12 13 import jxl.Cell; 14 15 16 17 import java.io.*; 18 19 20 21 public class ExcelHandle 22 23 { 24 25 public ExcelHandle() 26 27 { 28 29 } 30 31 /***读取Excel*/ 32 33 public static void readExcel(String filePath) 34 35 { 36 37 try 38 39 { 40 41 InputStream is = new FileInputStream(filePath); 42 43 Workbook rwb = Workbook.getWorkbook(is); 44 45 //这里有两种方法获取sheet表:名字和下标(从0开始) 46 47 //Sheet st = rwb.getSheet("original"); 48 49 Sheet st = rwb.getSheet(0); 50 51 /** 52 53 //获得第一行第一列单元的值 54 55 Cell c00 = st.getCell(0,0); 56 57 //通用的获取cell值的方式,返回字符串 58 59 String strc00 = c00.getContents(); 60 61 //获得cell具体类型值的方式 62 63 if(c00.getType() == CellType.LABEL) 64 65 { 66 67 LabelCell labelc00 = (LabelCell)c00; 68 69 strc00 = labelc00.getString(); 70 71 } 72 73 //输出 74 75 System.out.println(strc00);*/ 76 77 //Sheet的下标是从0开始 78 79 //获取第一张Sheet表 80 81 Sheet rst = rwb.getSheet(0); 82 83 //获取Sheet表中所包含的总列数 84 85 int rsColumns = rst.getColumns(); 86 87 //获取Sheet表中所包含的总行数 88 89 int rsRows = rst.getRows(); 90 91 //获取指定单元格的对象引用 92 93 for (int i = 0; i  

附:

调用流程如下:

1.打开工作文件Workbook,在此之前先用java的io流创建或者读取文件2.打开工作表Sheet3.读行,然后读列。注意,行和列是从零开始的4.取得数据进行操作 

来自网络à读取Excel数据表

第一步:创建Workbook(术语:工作薄)

2种方法:Workbook,就可以通过它来访问Excel Sheet(术语:工作表):

1 //从输入流创建Workbook读取excel数据表 2 3 InputStream is = new FileInputStream(sourcefile); 4 5 jxl.Workbook workbook = Workbook.getWorkbook(is); 6 7 //直接从本地文件(.xls)创建Workbook 8 9 Workbook workbook = Workbook.getWorkbook(new File(excelfile)); 10 11 一旦创建了 12 13 第二步:访问sheet。 14 15 2种方法:通过sheet的名称;或者通过下标,下标从0开始。 16 17 //获取第一张Sheet表 18 19 Sheet rs = workbook.getSheet(0); 20 21 一旦得到了Sheet,就可以通过它来访问Excel Cell(术语:单元格)。 22 23 第三步:访问单元格cell 24 25 //获取第一行,第一列的值 26 27 Cell c00 = rs.getCell(0, 0); 28 29 String strc00 = c00.getContents(); 30 31 //获取第一行,第二列的值 32 33 Cell c10 = rs.getCell(1, 0); 34 35 String strc10 = c10.getContents(); 36 37 //获取第二行,第二列的值 38 39 Cell c11 = rs.getCell(1, 1); 40 41 String strc11 = c11.getContents(); 42 43 44 45 System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " + c00.getType()); 46 47 System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10.getType()); 48 49 System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11.getType()); 50 51 52 第四步:操作数据 53 54 如果仅仅是取得Cell的 值,我们可以方便地通过getContents()方法,它可以将任何类型的Cell值都作为一个字符串返回。如果有需要知道Cell内容的确切类型,API也提供了一系列的方法: 55 56 String strc00 = null; 57 58 double strc10 = 0.00; 59 60 Date strc11 = null; 61 62 Cell c00 = rs.getCell(0, 0); 63 64 Cell c10 = rs.getCell(1, 0); 65 66 Cell c11 = rs.getCell(1, 1); 67 68 if(c00.getType() == CellType.LABEL) 69 70 { 71 72 LabelCell labelc00 = (LabelCell)c00; 73 74 strc00 = labelc00.getString(); 75 76 } 77 78 if(c10.getType() == CellType.NUMBER) 79 80 { 81 82 NmberCell numc10 = (NumberCell)c10; 83 84 strc10 = numc10.getValue(); 85 86 } 87 88 if(c11.getType() == CellType.DATE) 89 90 { 91 92 DateCell datec11 = (DateCell)c11; 93 94 strc11 = datec11.getDate(); 95 96 } 97 98 99 100 System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " + c00.getType()); 101 102 System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10.getType()); 103 104 System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11.getType()); 105

 

在得到

循环取出全部数据,并转化为相应格式:

1 int rows = sheet.getRows(); 2 3 for (int i = 1; i  

第五步:关闭对象,释放内存。

完成对Excel电子表格数据的处理后,一定要使用close()方法来关闭先前创建的对象,以释放读取数据表的过程中所占用的内存空间,在读取大量数据时显得尤为重要。

Cell对象后,通过 getType()方法可以获得该单元格的类型,然后与API提供的基本类型相匹配,强制转换成相应的类型,最后调用相应的取值方法getXXX(),就可以得到确定类型的值。

 

 

ps:不支持读取 excel 2007 文件(*.xlsx),只支持 excel 2003 (*.xls)。

PS:GetRows()方法来获取总的行数的时候会出现不可预知的问题:可能获得的值会大于实际值。可能是因为Excel中单元格存在空值的情况,也被获取到。这时候暂时考虑遍历判空,但如果表格很大的情况,效率会很低。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3