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

下载:

官方网站 http://www.andykhan.com/jexcelapi/ 下载最新版本(本人下的是jexcelapi_2_6_12.tar.gz,解压后将里面的jxl.jar复制到WEB-INF/lib目录下面即可)

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

一、JSP生成简单的Excel文件

package beans.excel;

import java.io.IOException;
import java.io.OutputStream; import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException; public class SimpleExcelWrite {
public void createExcel(OutputStream os) throws WriteException,IOException{
//创建工作薄
WritableWorkbook workbook = Workbook.createWorkbook(os);
//创建新的一页
WritableSheet sheet = workbook.createSheet("First Sheet",0);
//创建要显示的内容,创建一个单元格,第一个参数为列坐标,第二个参数为行坐标,第三个参数为内容
Label xuexiao = new Label(0,0,"学校");
sheet.addCell(xuexiao);
Label zhuanye = new Label(1,0,"专业");
sheet.addCell(zhuanye);
Label jingzhengli = new Label(2,0,"专业竞争力");
sheet.addCell(jingzhengli); Label qinghua = new Label(0,1,"清华大学");
sheet.addCell(qinghua);
Label jisuanji = new Label(1,1,"计算机专业");
sheet.addCell(jisuanji);
Label gao = new Label(2,1,"高");
sheet.addCell(gao); Label beida = new Label(0,2,"北京大学");
sheet.addCell(beida);
Label falv = new Label(1,2,"法律专业");
sheet.addCell(falv);
Label zhong = new Label(2,2,"中");
sheet.addCell(zhong); Label ligong = new Label(0,3,"北京理工大学");
sheet.addCell(ligong);
Label hangkong = new Label(1,3,"航空专业");
sheet.addCell(hangkong);
Label di = new Label(2,3,"低");
sheet.addCell(di); //把创建的内容写入到输出流中,并关闭输出流
workbook.write();
workbook.close();
os.close();
} }

SimpleExcelWrite.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ page import="java.io.*" %>
<%@ page import="beans.excel.*" %>
<%
String fname = "学校竞争力情况";
OutputStream os = response.getOutputStream();//取得输出流
response.reset();//清空输出流 //下面是对中文文件名的处理
response.setCharacterEncoding("UTF-8");//设置相应内容的编码格式
fname = java.net.URLEncoder.encode(fname,"UTF-8");
response.setHeader("Content-Disposition","attachment;filename="+new String(fname.getBytes("UTF-8"),"GBK")+".xls");
response.setContentType("application/msexcel");//定义输出类型
SimpleExcelWrite sw = new SimpleExcelWrite();
sw.createExcel(os); %>
<html>
<head> <title></title> </head> <body>
</body>
</html>

二、生成复杂数据格式Excel文件

package beans.excel;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Calendar;
import java.util.Date; import jxl.Workbook;
import jxl.write.Boolean;
import jxl.write.DateFormats;
import jxl.write.DateTime;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException; public class ComplexDataExcelWrite {
public void createExcel(OutputStream os) throws WriteException,IOException {
//创建工作薄
WritableWorkbook workbook = Workbook.createWorkbook(os);
//创建新的一页
WritableSheet sheet = workbook.createSheet("First Sheet", 0);
//创建要显示的具体内容
Label formate = new Label(0,0,"数据格式");
sheet.addCell(formate);
Label floats = new Label(1,0,"浮点型");
sheet.addCell(floats);
Label integers = new Label(2,0,"整型");
sheet.addCell(integers);
Label booleans = new Label(3,0,"布尔型");
sheet.addCell(booleans);
Label dates = new Label(4,0,"日期格式");
sheet.addCell(dates); Label example = new Label(0,1,"数据示例");
sheet.addCell(example);
//浮点数据
Number number = new Number(1,1,3.1415926535);
sheet.addCell(number);
//整形数据
Number ints = new Number(2,1,15042699);
sheet.addCell(ints);
Boolean bools = new Boolean(3,1,true);
sheet.addCell(bools);
//日期型数据
Calendar c = Calendar.getInstance();
Date date = c.getTime();
WritableCellFormat cf1 = new WritableCellFormat(DateFormats.FORMAT1);
DateTime dt = new DateTime(4,1,date,cf1);
sheet.addCell(dt);
//把创建的内容写入到输出流中,并关闭输出流
workbook.write();
workbook.close();
os.close(); }
}

三、生成复杂布局和样式的Excel文件

package beans.excel;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Calendar;
import java.util.Date; import jxl.Workbook;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.write.Boolean;
import jxl.write.DateFormats;
import jxl.write.DateTime;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException; public class MutiStyleExcelWrite {
public void createExcel(OutputStream os) throws WriteException,IOException {
//创建工作薄
WritableWorkbook workbook = Workbook.createWorkbook(os);
//创建新的一页
WritableSheet sheet = workbook.createSheet("First Sheet", 0);
//构造表头
sheet.mergeCells(0, 0, 4, 0);//添加合并单元格,第一个参数是起始列,第二个参数是起始行,第三个参数是终止列,第四个参数是终止行
WritableFont bold = new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD);//设置字体种类和黑体显示,字体为Arial,字号大小为10,采用黑体显示
WritableCellFormat titleFormate = new WritableCellFormat(bold);//生成一个单元格样式控制对象
titleFormate.setAlignment(jxl.format.Alignment.CENTRE);//单元格中的内容水平方向居中
titleFormate.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);//单元格的内容垂直方向居中
Label title = new Label(0,0,"JExcelApi支持数据类型详细说明",titleFormate);
sheet.setRowView(0, 600, false);//设置第一行的高度
sheet.addCell(title); //创建要显示的具体内容
WritableFont color = new WritableFont(WritableFont.ARIAL);//选择字体
color.setColour(Colour.GOLD);//设置字体颜色为金黄色
WritableCellFormat colorFormat = new WritableCellFormat(color);
Label formate = new Label(0,1,"数据格式",colorFormat);
sheet.addCell(formate);
Label floats = new Label(1,1,"浮点型");
sheet.addCell(floats);
Label integers = new Label(2,1,"整型");
sheet.addCell(integers);
Label booleans = new Label(3,1,"布尔型");
sheet.addCell(booleans);
Label dates = new Label(4,1,"日期格式");
sheet.addCell(dates); Label example = new Label(0,2,"数据示例",colorFormat);
sheet.addCell(example);
//浮点数据
//设置下划线
WritableFont underline= new WritableFont(WritableFont.ARIAL,WritableFont.DEFAULT_POINT_SIZE,WritableFont.NO_BOLD,false,UnderlineStyle.SINGLE);
WritableCellFormat greyBackground = new WritableCellFormat(underline);
greyBackground.setBackground(Colour.GRAY_25);//设置背景颜色为灰色
Number number = new Number(1,2,3.1415926535,greyBackground);
sheet.addCell(number);
//整形数据
WritableFont boldNumber = new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD);//黑体
WritableCellFormat boldNumberFormate = new WritableCellFormat(boldNumber);
Number ints = new Number(2,2,15042699,boldNumberFormate);
sheet.addCell(ints);
//布尔型数据
Boolean bools = new Boolean(3,2,true);
sheet.addCell(bools);
//日期型数据
//设置黑体和下划线
WritableFont boldDate = new WritableFont(WritableFont.ARIAL,WritableFont.DEFAULT_POINT_SIZE,WritableFont.BOLD,false,UnderlineStyle.SINGLE);
WritableCellFormat boldDateFormate = new WritableCellFormat(boldDate,DateFormats.FORMAT1);
Calendar c = Calendar.getInstance();
Date date = c.getTime();
DateTime dt = new DateTime(4,2,date,boldDateFormate);
sheet.addCell(dt);
//把创建的内容写入到输出流中,并关闭输出流
workbook.write();
workbook.close();
os.close(); }
}

四、JSP读取Excel报表

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ page import="java.io.File" %>
<%@ page import="jxl.Cell" %>
<%@ page import="jxl.Sheet" %>
<%@ page import="jxl.Workbook" %>
<html>
<head>
<title></title>
</head>
<body>
<font size="2">
<%
String fileName = "D:/学校竞争力情况.xls";
File file = new File(fileName);//根据文件名创建一个文件对象
Workbook wb = Workbook.getWorkbook(file);//从文件流中取得Excel工作区对象
Sheet sheet = wb.getSheet(0);//从工作区中取得页,取得这个对象的时候既可以用名称来获得,也可以用序号。
String outPut = ""; outPut = outPut + "<b>" + fileName + "</b><br>";
outPut = outPut + "第一个sheet的名称为:" + sheet.getName() + "<br>";
outPut = outPut + "第一个sheet共有:" + sheet.getRows() + "行" + sheet.getColumns() + "列<br>";
outPut = outPut + "具体内容如下:<br>";
for(int i=0; i < sheet.getRows(); i++){
for(int j=0; j < sheet.getColumns(); j++){
Cell cell = sheet.getCell(j,i);
outPut = outPut + cell.getContents() + " ";
}
outPut = outPut + "<br>";
}
out.println(outPut);
%>
</font>
</body>
</html>

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

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

内容如下:

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

  1. //in ExcelOperater
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.InputStream;
  5. import jxl.Cell;
  6. import jxl.CellType;
  7. import jxl.Sheet;
  8. import jxl.Workbook;
  9. import jxl.write.Label;
  10. public class ExcelOperater
  11. {
  12. public static void main(String[] args)
  13. {
  14. jxl.Workbook readwb = null;
  15. try
  16. {
  17. //构建Workbook对象, 只读Workbook对象
  18. //直接从本地文件创建Workbook
  19. InputStream instream = new FileInputStream("F:/红楼人物.xls");
  20. readwb = Workbook.getWorkbook(instream);
  21. //Sheet的下标是从0开始
  22. //获取第一张Sheet表
  23. Sheet readsheet = readwb.getSheet(0);
  24. //获取Sheet表中所包含的总列数
  25. int rsColumns = readsheet.getColumns();
  26. //获取Sheet表中所包含的总行数
  27. int rsRows = readsheet.getRows();
  28. //获取指定单元格的对象引用
  29. for (int i = 0; i < rsRows; i++)
  30. {
  31. for (int j = 0; j < rsColumns; j++)
  32. {
  33. Cell cell = readsheet.getCell(j, i);
  34. System.out.print(cell.getContents() + " ");
  35. }
  36. System.out.println();
  37. }
  38. //利用已经创建的Excel工作薄,创建新的可写入的Excel工作薄
  39. jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(
  40. "F:/红楼人物1.xls"), readwb);
  41. //读取第一张工作表
  42. jxl.write.WritableSheet ws = wwb.getSheet(0);
  43. //获得第一个单元格对象
  44. jxl.write.WritableCell wc = ws.getWritableCell(0, 0);
  45. //判断单元格的类型, 做出相应的转化
  46. if (wc.getType() == CellType.LABEL)
  47. {
  48. Label l = (Label) wc;
  49. l.setString("新姓名");
  50. }
  51. //写入Excel对象
  52. wwb.write();
  53. wwb.close();
  54. } catch (Exception e) {
  55. e.printStackTrace();
  56. } finally {
  57. readwb.close();
  58. }
  59. }
  60. }

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. import jxl.*;
  3. import jxl.format.UnderlineStyle;
  4. import jxl.write.*;
  5. import jxl.write.Number;
  6. import jxl.write.Boolean;
  7. import jxl.Cell;
  8. import java.io.*;
  9. public class ExcelHandle
  10. {
  11. public ExcelHandle()
  12. {
  13. }
  14. /***读取Excel*/
  15. public static void readExcel(String filePath)
  16. {
  17. try
  18. {
  19. InputStream is = new FileInputStream(filePath);
  20. Workbook rwb = Workbook.getWorkbook(is);
  21. //这里有两种方法获取sheet表:名字和下标(从0开始)
  22. //Sheet st = rwb.getSheet("original");
  23. Sheet st = rwb.getSheet(0);
  24. /**
  25. //获得第一行第一列单元的值
  26. Cell c00 = st.getCell(0,0);
  27. //通用的获取cell值的方式,返回字符串
  28. String strc00 = c00.getContents();
  29. //获得cell具体类型值的方式
  30. if(c00.getType() == CellType.LABEL)
  31. {
  32. LabelCell labelc00 = (LabelCell)c00;
  33. strc00 = labelc00.getString();
  34. }
  35. //输出
  36. System.out.println(strc00);*/
  37. //Sheet的下标是从0开始
  38. //获取第一张Sheet表
  39. Sheet rst = rwb.getSheet(0);
  40. //获取Sheet表中所包含的总列数
  41. int rsColumns = rst.getColumns();
  42. //获取Sheet表中所包含的总行数
  43. int rsRows = rst.getRows();
  44. //获取指定单元格的对象引用
  45. for (int i = 0; i < rsRows; i++)
  46. {
  47. for (int j = 0; j < rsColumns; j++)
  48. {
  49. Cell cell = rst.getCell(j, i);
  50. System.out.print(cell.getContents() + " ");
  51. }
  52. System.out.println();
  53. }
  54. //关闭
  55. rwb.close();
  56. }
  57. catch(Exception e)
  58. {
  59. e.printStackTrace();
  60. }
  61. }
  62. /**输出Excel*/
  63. public static void writeExcel(OutputStream os)
  64. {
  65. try
  66. {
  67. /** 只能通过API提供的 工厂方法来创建Workbook,而不能使用WritableWorkbook的构造函数,因为类WritableWorkbook的构造函数为 protected类型:方法一:直接从目标文件中读取 WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile));方法 二:如下实例所示 将WritableWorkbook直接写入到输出流*/
  68. WritableWorkbook wwb = Workbook.createWorkbook(os);
  69. //创建Excel工作表 指定名称和位置
  70. WritableSheet ws = wwb.createSheet("Test Sheet 1",0);
  71. /**************往工作表中添加数据*****************/
  72. //1.添加Label对象
  73. Label label = new Label(0,0,"测试");
  74. ws.addCell(label);
  75. //添加带有字型Formatting对象
  76. WritableFont wf = new WritableFont(WritableFont.TIMES,18,WritableFont.BOLD,true);
  77. WritableCellFormat wcf = new WritableCellFormat(wf);
  78. Label labelcf = new Label(1,0,"this is a label test",wcf);
  79. ws.addCell(labelcf);
  80. //添加带有字体颜色的Formatting对象
  81. WritableFont wfc = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,
  82. UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.DARK_YELLOW);
  83. WritableCellFormat wcfFC = new WritableCellFormat(wfc);
  84. Label labelCF = new Label(1,0,"Ok",wcfFC);
  85. ws.addCell(labelCF);
  86. //2.添加Number对象
  87. Number labelN = new Number(0,1,3.1415926);
  88. ws.addCell(labelN);
  89. //添加带有formatting的Number对象
  90. NumberFormat nf = new NumberFormat("#.##");
  91. WritableCellFormat wcfN = new WritableCellFormat(nf);
  92. Number labelNF = new jxl.write.Number(1,1,3.1415926,wcfN);
  93. ws.addCell(labelNF);
  94. //3.添加Boolean对象
  95. Boolean labelB = new jxl.write.Boolean(0,2,true);
  96. ws.addCell(labelB);
  97. Boolean labelB1 = new jxl.write.Boolean(1,2,false);
  98. ws.addCell(labelB1);
  99. //4.添加DateTime对象
  100. jxl.write.DateTime labelDT = new jxl.write.DateTime(0,3,new java.util.Date());
  101. ws.addCell(labelDT);
  102. //5.添加带有formatting的DateFormat对象
  103. DateFormat df = new DateFormat("dd MM yyyy hh:mm:ss");
  104. WritableCellFormat wcfDF = new WritableCellFormat(df);
  105. DateTime labelDTF = new DateTime(1,3,new java.util.Date(),wcfDF);
  106. ws.addCell(labelDTF);
  107. //6.添加图片对象,jxl只支持png格式图片
  108. File image = new File("f:\\1.png");
  109. WritableImage wimage = new WritableImage(0,4,6,17,image);
  110. ws.addImage(wimage);
  111. //7.写入工作表
  112. wwb.write();
  113. wwb.close();
  114. }
  115. catch(Exception e)
  116. {
  117. e.printStackTrace();
  118. }
  119. }
  120. /** 将file1拷贝后,进行修改并创建输出对象file2
  121. * 单元格原有的格式化修饰不能去掉,但仍可将新的单元格修饰加上去,
  122. * 以使单元格的内容以不同的形式表现
  123. */
  124. public static void modifyExcel(File file1,File file2)
  125. {
  126. try
  127. {
  128. Workbook rwb = Workbook.getWorkbook(file1);
  129. WritableWorkbook wwb = Workbook.createWorkbook(file2,rwb);//copy
  130. WritableFont wfc = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,
  131. UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLUE);
  132. WritableCellFormat wcfFC = new WritableCellFormat(wfc);
  133. WritableSheet ws = wwb.getSheet(0);
  134. WritableCell wc = ws.getWritableCell(0,0);
  135. //判断单元格的类型,做出相应的转换
  136. if(wc.getType() == CellType.LABEL)
  137. {
  138. Label labelCF =new Label(0,0,"人物(新)",wcfFC);
  139. ws.addCell(labelCF);
  140. //Label label = (Label)wc;
  141. //label.setString("被修改");
  142. }
  143. wwb.write();
  144. wwb.close();
  145. rwb.close();
  146. }
  147. catch(Exception e)
  148. {
  149. e.printStackTrace();
  150. }
  151. }
  152. //测试
  153. public static void main(String args[])
  154. {
  155. try
  156. {
  157. //读EXCEL
  158. ExcelHandle.readExcel("F:/红楼人物.xls");
  159. //输出EXCEL
  160. File filewrite=new File("F:/红楼人物2.xls");
  161. filewrite.createNewFile();
  162. OutputStream os=new FileOutputStream(filewrite);
  163. ExcelHandle.writeExcel(os);
  164. //修改EXCEL
  165. ExcelHandle.modifyExcel(new File("F:/红楼人物.xls"), new File("F:/红楼人物3.xls"));
  166. }
  167. catch(Exception e)
  168. {
  169. e.printStackTrace();
  170. }
  171. }
  172. }

附:

调用流程如下:

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

来自网络à读取Excel数据表

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

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

  1. //从输入流创建Workbook读取excel数据表
  2. InputStream is = new FileInputStream(sourcefile);
  3. jxl.Workbook workbook = Workbook.getWorkbook(is);
  4. //直接从本地文件(.xls)创建Workbook
  5. Workbook workbook = Workbook.getWorkbook(new File(excelfile));

一旦创建了

第二步:访问sheet。

2种方法:通过sheet的名称;或者通过下标,下标从0开始。

  1. //获取第一张Sheet表
  2. Sheet rs = workbook.getSheet(0);
  3. 一旦得到了Sheet,就可以通过它来访问Excel Cell(术语:单元格)。
  4. 第三步:访问单元格cell
  5. //获取第一行,第一列的值
  6. Cell c00 = rs.getCell(0, 0);
  7. String strc00 = c00.getContents();
  8. //获取第一行,第二列的值
  9. Cell c10 = rs.getCell(1, 0);
  10. String strc10 = c10.getContents();
  11. //获取第二行,第二列的值
  12. Cell c11 = rs.getCell(1, 1);
  13. String strc11 = c11.getContents();
  14. System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " + c00.getType());
  15. System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10.getType());
  16. System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11.getType());

第四步:操作数据

如果仅仅是取得Cell的 值,我们可以方便地通过getContents()方法,它可以将任何类型的Cell值都作为一个字符串返回。如果有需要知道Cell内容的确切类型,API也提供了一系列的方法:

  1. String strc00 = null;
  2. double strc10 = 0.00;
  3. Date strc11 = null;
  4. Cell c00 = rs.getCell(0, 0);
  5. Cell c10 = rs.getCell(1, 0);
  6. Cell c11 = rs.getCell(1, 1);
  7. if(c00.getType() == CellType.LABEL)
  8. {
  9. LabelCell labelc00 = (LabelCell)c00;
  10. strc00 = labelc00.getString();
  11. }
  12. if(c10.getType() == CellType.NUMBER)
  13. {
  14. NmberCell numc10 = (NumberCell)c10;
  15. strc10 = numc10.getValue();
  16. }
  17. if(c11.getType() == CellType.DATE)
  18. {
  19. DateCell datec11 = (DateCell)c11;
  20. strc11 = datec11.getDate();
  21. }
  22. System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " + c00.getType());
  23. System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10.getType());
  24. System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11.getType());

在得到

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

  1. int rows = sheet.getRows();
  2. for (int i = 1; i < rows; i++) {
  3. Cell cb1 = sheet.getCell(0, i);
  4. Cell cb2 = sheet.getCell(1, i);
  5. Cell num3 = sheet.getCell(2, i);
  6. Cell num4 = sheet.getCell(3, i);
  7. String user = "";
  8. String rule = "";
  9. int numNew = 0;
  10. int numEdit = 0;
  11. if (cb1.getType() == CellType.LABEL) {
  12. LabelCell lc = (LabelCell) cb1;
  13. user = lc.getString();
  14. }
  15. if (cb2.getType() == CellType.LABEL) {
  16. LabelCell lc = (LabelCell) cb2;
  17. rule = lc.getString();
  18. }
  19. if (num3.getType() == CellType.NUMBER_FORMULA) {
  20. NumberFormulaCell nc = (NumberFormulaCell) num3;
  21. try {
  22. numNew = Double.valueOf(nc.getFormula()).intValue();
  23. } catch (FormulaException e) {
  24. e.printStackTrace();
  25. }
  26. }
  27. if (num4.getType() == CellType.NUMBER_FORMULA) {
  28. NumberFormulaCell nc = (NumberFormulaCell) num4;
  29. try {
  30. numEdit = Double.valueOf(nc.getFormula()).intValue();
  31. } catch (FormulaException e) {
  32. e.printStackTrace();
  33. }
  34. }
  35. }

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

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

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

来自:http://www.cnblogs.com/wuxinrui/archive/2011/03/20/1989326.html

(转载)Java生成和操作Excel文件的更多相关文章

  1. Java生成和操作Excel文件(转载)

    Java生成和操作Excel文件   JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该A ...

  2. Java生成和操作Excel文件

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...

  3. 转帖 Java生成和操作Excel文件

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...

  4. java使用POI操作excel文件,实现批量导出,和导入

    一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...

  5. Java使用POI操作Excel文件

    1.简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式文件读和写的功能. 2.依赖的jar包 <!-- ex ...

  6. [转载]Java操作Excel文件的两种方案

    微软在桌面系统上的成功,令我们不得不大量使用它的办公产品,如:Word,Excel.时至今日,它的源代码仍然不公开已封锁了我们的进一步应用和开发.在我们实际开发企业办公系统的过程中,常常有客户这样子要 ...

  7. java 操作excel 文件

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...

  8. java使用Apache POI操作excel文件

    官方介绍 HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is ...

  9. C#项目中操作Excel文件——使用NPOI库

    转载自:http://blog.csdn.net/dcrmg/article/details/52356236# 感谢-牧野- 实际C#项目中经常会涉及到需要对本地Excel文件进行操作,特别是一些包 ...

随机推荐

  1. 攻防世界 web3.backup

    如果网站存在备份文件,常见的备份文件后缀名有:.git ..svn..swp..~..bak..bash_history..bkf尝试在URL后面,依次输入常见的文件备份扩展名. ip/index.p ...

  2. 确定两串乱序同构 牛客网 程序员面试金典 C++ Python

    确定两串乱序同构 牛客网 程序员面试金典 C++ Python 题目描述 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串.这里规定大小写为不同字符,且考虑字符串中 ...

  3. Luogu P2024 [NOI2001]食物链 | 并查集

    题目链接 思路:并查集,因为一开始我们并不知道每一只动物是哪一个种类的,所以我们干脆建立三倍于n的空间,1~n这三分之一用来存第i只动物是A的情况,n+1~2n这三分之一用来存第(i-n)只动物是B的 ...

  4. Tenable Nessus 10.0.0 (Unix, Linux) -- #1 漏洞评估解决方案

    请访问原文链接:https://sysin.org/blog/nessus-10/,查看最新版.原创作品,转载请保留出处. 作者:gc(at)sysin.org,主页:www.sysin.org 了解 ...

  5. Spring Security OAuth2 单点登录

    1. OAuth 2.0 OAuth(Open Authorization)为用户资源的授权提供了一个安全的.开放而又简易的标准.最简单的理解,我们可以看一下微信OAuth2.0授权登录流程: 通过O ...

  6. HTML基本使用

    HTML初识 (Hyper Text Markup Language): 超文本标记语言 「HTML骨架格式」 <!-- 页面中最大的标签 根标签 --> <html> < ...

  7. git rebase 合并提交

    git rebase 合并提交 合并最近多次提交记录 语法 git rebase -i HEAD~n 1.进入合并模式 合并最近三次提交 git rebase -i HEAD~3 然后你会看到一个像下 ...

  8. pip 常用命令小结

    pip 常用命令小结 pip这个工具我们经常会用到,毕竟python 是一门以第三方库庞大而著名的编程语言,所以我们总会用pip 安装一些依赖库,当然这只是pip 最常用的一个命令,下面就来介绍一下 ...

  9. JavaScript数组方法大集合

    JavaScript数组方法集合 本文总结一下js数组处理用到的所有的方法.自己做个笔记. 数组方法 concat() 合并两个或多个数组 concat()能合并两个或者多个数组,不会更改当前数组,而 ...

  10. 如何系统学习C 语言(下)之 预处理命令篇

    大话c语言(下)之 预处理命令篇 预处理就是在编译之前,通过一些预处理命令对源代码进行管理和控制的过程. 由源代码得到可执行的程序,会经过预处理.编译.汇编和链接几个过程 预处理命令大致可以分为文件包 ...