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文件

  1. package beans.excel;
  2.  
  3. import java.io.IOException;
  4. import java.io.OutputStream;
  5.  
  6. import jxl.Workbook;
  7. import jxl.write.Label;
  8. import jxl.write.WritableSheet;
  9. import jxl.write.WritableWorkbook;
  10. import jxl.write.WriteException;
  11.  
  12. public class SimpleExcelWrite {
  13. public void createExcel(OutputStream os) throws WriteException,IOException{
  14. //创建工作薄
  15. WritableWorkbook workbook = Workbook.createWorkbook(os);
  16. //创建新的一页
  17. WritableSheet sheet = workbook.createSheet("First Sheet",0);
  18. //创建要显示的内容,创建一个单元格,第一个参数为列坐标,第二个参数为行坐标,第三个参数为内容
  19. Label xuexiao = new Label(0,0,"学校");
  20. sheet.addCell(xuexiao);
  21. Label zhuanye = new Label(1,0,"专业");
  22. sheet.addCell(zhuanye);
  23. Label jingzhengli = new Label(2,0,"专业竞争力");
  24. sheet.addCell(jingzhengli);
  25.  
  26. Label qinghua = new Label(0,1,"清华大学");
  27. sheet.addCell(qinghua);
  28. Label jisuanji = new Label(1,1,"计算机专业");
  29. sheet.addCell(jisuanji);
  30. Label gao = new Label(2,1,"高");
  31. sheet.addCell(gao);
  32.  
  33. Label beida = new Label(0,2,"北京大学");
  34. sheet.addCell(beida);
  35. Label falv = new Label(1,2,"法律专业");
  36. sheet.addCell(falv);
  37. Label zhong = new Label(2,2,"中");
  38. sheet.addCell(zhong);
  39.  
  40. Label ligong = new Label(0,3,"北京理工大学");
  41. sheet.addCell(ligong);
  42. Label hangkong = new Label(1,3,"航空专业");
  43. sheet.addCell(hangkong);
  44. Label di = new Label(2,3,"低");
  45. sheet.addCell(di);
  46.  
  47. //把创建的内容写入到输出流中,并关闭输出流
  48. workbook.write();
  49. workbook.close();
  50. os.close();
  51. }
  52.  
  53. }

SimpleExcelWrite.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
  2. <%@ page import="java.io.*" %>
  3. <%@ page import="beans.excel.*" %>
  4. <%
  5. String fname = "学校竞争力情况";
  6. OutputStream os = response.getOutputStream();//取得输出流
  7. response.reset();//清空输出流
  8.  
  9. //下面是对中文文件名的处理
  10. response.setCharacterEncoding("UTF-8");//设置相应内容的编码格式
  11. fname = java.net.URLEncoder.encode(fname,"UTF-8");
  12. response.setHeader("Content-Disposition","attachment;filename="+new String(fname.getBytes("UTF-8"),"GBK")+".xls");
  13. response.setContentType("application/msexcel");//定义输出类型
  14. SimpleExcelWrite sw = new SimpleExcelWrite();
  15. sw.createExcel(os);
  16.  
  17. %>
  18. <html>
  19. <head>
  20.  
  21. <title></title>
  22.  
  23. </head>
  24.  
  25. <body>
  26. </body>
  27. </html>

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

  1. package beans.excel;
  2.  
  3. import java.io.IOException;
  4. import java.io.OutputStream;
  5. import java.util.Calendar;
  6. import java.util.Date;
  7.  
  8. import jxl.Workbook;
  9. import jxl.write.Boolean;
  10. import jxl.write.DateFormats;
  11. import jxl.write.DateTime;
  12. import jxl.write.Label;
  13. import jxl.write.Number;
  14. import jxl.write.WritableCellFormat;
  15. import jxl.write.WritableSheet;
  16. import jxl.write.WritableWorkbook;
  17. import jxl.write.WriteException;
  18.  
  19. public class ComplexDataExcelWrite {
  20. public void createExcel(OutputStream os) throws WriteException,IOException {
  21. //创建工作薄
  22. WritableWorkbook workbook = Workbook.createWorkbook(os);
  23. //创建新的一页
  24. WritableSheet sheet = workbook.createSheet("First Sheet", 0);
  25. //创建要显示的具体内容
  26. Label formate = new Label(0,0,"数据格式");
  27. sheet.addCell(formate);
  28. Label floats = new Label(1,0,"浮点型");
  29. sheet.addCell(floats);
  30. Label integers = new Label(2,0,"整型");
  31. sheet.addCell(integers);
  32. Label booleans = new Label(3,0,"布尔型");
  33. sheet.addCell(booleans);
  34. Label dates = new Label(4,0,"日期格式");
  35. sheet.addCell(dates);
  36.  
  37. Label example = new Label(0,1,"数据示例");
  38. sheet.addCell(example);
  39. //浮点数据
  40. Number number = new Number(1,1,3.1415926535);
  41. sheet.addCell(number);
  42. //整形数据
  43. Number ints = new Number(2,1,15042699);
  44. sheet.addCell(ints);
  45. Boolean bools = new Boolean(3,1,true);
  46. sheet.addCell(bools);
  47. //日期型数据
  48. Calendar c = Calendar.getInstance();
  49. Date date = c.getTime();
  50. WritableCellFormat cf1 = new WritableCellFormat(DateFormats.FORMAT1);
  51. DateTime dt = new DateTime(4,1,date,cf1);
  52. sheet.addCell(dt);
  53. //把创建的内容写入到输出流中,并关闭输出流
  54. workbook.write();
  55. workbook.close();
  56. os.close();
  57.  
  58. }
  59. }

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

  1. package beans.excel;
  2.  
  3. import java.io.IOException;
  4. import java.io.OutputStream;
  5. import java.util.Calendar;
  6. import java.util.Date;
  7.  
  8. import jxl.Workbook;
  9. import jxl.format.Colour;
  10. import jxl.format.UnderlineStyle;
  11. import jxl.write.Boolean;
  12. import jxl.write.DateFormats;
  13. import jxl.write.DateTime;
  14. import jxl.write.Label;
  15. import jxl.write.Number;
  16. import jxl.write.WritableCellFormat;
  17. import jxl.write.WritableFont;
  18. import jxl.write.WritableSheet;
  19. import jxl.write.WritableWorkbook;
  20. import jxl.write.WriteException;
  21.  
  22. public class MutiStyleExcelWrite {
  23. public void createExcel(OutputStream os) throws WriteException,IOException {
  24. //创建工作薄
  25. WritableWorkbook workbook = Workbook.createWorkbook(os);
  26. //创建新的一页
  27. WritableSheet sheet = workbook.createSheet("First Sheet", 0);
  28. //构造表头
  29. sheet.mergeCells(0, 0, 4, 0);//添加合并单元格,第一个参数是起始列,第二个参数是起始行,第三个参数是终止列,第四个参数是终止行
  30. WritableFont bold = new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD);//设置字体种类和黑体显示,字体为Arial,字号大小为10,采用黑体显示
  31. WritableCellFormat titleFormate = new WritableCellFormat(bold);//生成一个单元格样式控制对象
  32. titleFormate.setAlignment(jxl.format.Alignment.CENTRE);//单元格中的内容水平方向居中
  33. titleFormate.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);//单元格的内容垂直方向居中
  34. Label title = new Label(0,0,"JExcelApi支持数据类型详细说明",titleFormate);
  35. sheet.setRowView(0, 600, false);//设置第一行的高度
  36. sheet.addCell(title);
  37.  
  38. //创建要显示的具体内容
  39. WritableFont color = new WritableFont(WritableFont.ARIAL);//选择字体
  40. color.setColour(Colour.GOLD);//设置字体颜色为金黄色
  41. WritableCellFormat colorFormat = new WritableCellFormat(color);
  42. Label formate = new Label(0,1,"数据格式",colorFormat);
  43. sheet.addCell(formate);
  44. Label floats = new Label(1,1,"浮点型");
  45. sheet.addCell(floats);
  46. Label integers = new Label(2,1,"整型");
  47. sheet.addCell(integers);
  48. Label booleans = new Label(3,1,"布尔型");
  49. sheet.addCell(booleans);
  50. Label dates = new Label(4,1,"日期格式");
  51. sheet.addCell(dates);
  52.  
  53. Label example = new Label(0,2,"数据示例",colorFormat);
  54. sheet.addCell(example);
  55. //浮点数据
  56. //设置下划线
  57. WritableFont underline= new WritableFont(WritableFont.ARIAL,WritableFont.DEFAULT_POINT_SIZE,WritableFont.NO_BOLD,false,UnderlineStyle.SINGLE);
  58. WritableCellFormat greyBackground = new WritableCellFormat(underline);
  59. greyBackground.setBackground(Colour.GRAY_25);//设置背景颜色为灰色
  60. Number number = new Number(1,2,3.1415926535,greyBackground);
  61. sheet.addCell(number);
  62. //整形数据
  63. WritableFont boldNumber = new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD);//黑体
  64. WritableCellFormat boldNumberFormate = new WritableCellFormat(boldNumber);
  65. Number ints = new Number(2,2,15042699,boldNumberFormate);
  66. sheet.addCell(ints);
  67. //布尔型数据
  68. Boolean bools = new Boolean(3,2,true);
  69. sheet.addCell(bools);
  70. //日期型数据
  71. //设置黑体和下划线
  72. WritableFont boldDate = new WritableFont(WritableFont.ARIAL,WritableFont.DEFAULT_POINT_SIZE,WritableFont.BOLD,false,UnderlineStyle.SINGLE);
  73. WritableCellFormat boldDateFormate = new WritableCellFormat(boldDate,DateFormats.FORMAT1);
  74. Calendar c = Calendar.getInstance();
  75. Date date = c.getTime();
  76. DateTime dt = new DateTime(4,2,date,boldDateFormate);
  77. sheet.addCell(dt);
  78. //把创建的内容写入到输出流中,并关闭输出流
  79. workbook.write();
  80. workbook.close();
  81. os.close();
  82.  
  83. }
  84. }

四、JSP读取Excel报表

  1. <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
  2. <%@ page import="java.io.File" %>
  3. <%@ page import="jxl.Cell" %>
  4. <%@ page import="jxl.Sheet" %>
  5. <%@ page import="jxl.Workbook" %>
  6. <html>
  7. <head>
  8. <title></title>
  9. </head>
  10. <body>
  11. <font size="2">
  12. <%
  13. String fileName = "D:/学校竞争力情况.xls";
  14. File file = new File(fileName);//根据文件名创建一个文件对象
  15. Workbook wb = Workbook.getWorkbook(file);//从文件流中取得Excel工作区对象
  16. Sheet sheet = wb.getSheet(0);//从工作区中取得页,取得这个对象的时候既可以用名称来获得,也可以用序号。
  17. String outPut = "";
  18.  
  19. outPut = outPut + "<b>" + fileName + "</b><br>";
  20. outPut = outPut + "第一个sheet的名称为:" + sheet.getName() + "<br>";
  21. outPut = outPut + "第一个sheet共有:" + sheet.getRows() + "行" + sheet.getColumns() + "列<br>";
  22. outPut = outPut + "具体内容如下:<br>";
  23. for(int i=0; i < sheet.getRows(); i++){
  24. for(int j=0; j < sheet.getColumns(); j++){
  25. Cell cell = sheet.getCell(j,i);
  26. outPut = outPut + cell.getContents() + " ";
  27. }
  28. outPut = outPut + "<br>";
  29. }
  30. out.println(outPut);
  31. %>
  32. </font>
  33. </body>
  34. </html>

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

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

内容如下:

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

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

  1. //in ExcelOperater
  2.  
  3. import java.io.File;
  4.  
  5. import java.io.FileInputStream;
  6.  
  7. import java.io.InputStream;
  8.  
  9. import jxl.Cell;
  10.  
  11. import jxl.CellType;
  12.  
  13. import jxl.Sheet;
  14.  
  15. import jxl.Workbook;
  16.  
  17. import jxl.write.Label;
  18.  
  19. public class ExcelOperater
  20.  
  21. {
  22.  
  23. public static void main(String[] args)
  24.  
  25. {
  26.  
  27. jxl.Workbook readwb = null;
  28.  
  29. try
  30.  
  31. {
  32.  
  33. //构建Workbook对象, 只读Workbook对象
  34.  
  35. //直接从本地文件创建Workbook
  36.  
  37. InputStream instream = new FileInputStream("F:/红楼人物.xls");
  38.  
  39. readwb = Workbook.getWorkbook(instream);
  40.  
  41. //Sheet的下标是从0开始
  42.  
  43. //获取第一张Sheet表
  44.  
  45. Sheet readsheet = readwb.getSheet(0);
  46.  
  47. //获取Sheet表中所包含的总列数
  48.  
  49. int rsColumns = readsheet.getColumns();
  50.  
  51. //获取Sheet表中所包含的总行数
  52.  
  53. int rsRows = readsheet.getRows();
  54.  
  55. //获取指定单元格的对象引用
  56.  
  57. for (int i = 0; i < rsRows; i++)
  58.  
  59. {
  60.  
  61. for (int j = 0; j < rsColumns; j++)
  62.  
  63. {
  64.  
  65. Cell cell = readsheet.getCell(j, i);
  66.  
  67. System.out.print(cell.getContents() + " ");
  68.  
  69. }
  70.  
  71. System.out.println();
  72.  
  73. }
  74.  
  75. //利用已经创建的Excel工作薄,创建新的可写入的Excel工作薄
  76.  
  77. jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(
  78.  
  79. "F:/红楼人物1.xls"), readwb);
  80.  
  81. //读取第一张工作表
  82.  
  83. jxl.write.WritableSheet ws = wwb.getSheet(0);
  84.  
  85. //获得第一个单元格对象
  86.  
  87. jxl.write.WritableCell wc = ws.getWritableCell(0, 0);
  88.  
  89. //判断单元格的类型, 做出相应的转化
  90.  
  91. if (wc.getType() == CellType.LABEL)
  92.  
  93. {
  94.  
  95. Label l = (Label) wc;
  96.  
  97. l.setString("新姓名");
  98.  
  99. }
  100.  
  101. //写入Excel对象
  102.  
  103. wwb.write();
  104.  
  105. wwb.close();
  106.  
  107. } catch (Exception e) {
  108.  
  109. e.printStackTrace();
  110.  
  111. } finally {
  112.  
  113. readwb.close();
  114.  
  115. }
  116.  
  117. }
  118.  
  119. }

运行结果:

①     控制台输出:

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

林黛玉 小姐 潇湘馆 正册

妙玉 世外 栊翠庵 正册

晴雯 丫鬟 怡红院 副册

香菱 妾 蘅芜苑 又副册

②     写入输出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. import java.io.*;
  16.  
  17. public class ExcelHandle
  18.  
  19. {
  20.  
  21. public ExcelHandle()
  22.  
  23. {
  24.  
  25. }
  26.  
  27. /***读取Excel*/
  28.  
  29. public static void readExcel(String filePath)
  30.  
  31. {
  32.  
  33. try
  34.  
  35. {
  36.  
  37. InputStream is = new FileInputStream(filePath);
  38.  
  39. Workbook rwb = Workbook.getWorkbook(is);
  40.  
  41. //这里有两种方法获取sheet表:名字和下标(从0开始)
  42.  
  43. //Sheet st = rwb.getSheet("original");
  44.  
  45. Sheet st = rwb.getSheet(0);
  46.  
  47. /**
  48.  
  49. //获得第一行第一列单元的值
  50.  
  51. Cell c00 = st.getCell(0,0);
  52.  
  53. //通用的获取cell值的方式,返回字符串
  54.  
  55. String strc00 = c00.getContents();
  56.  
  57. //获得cell具体类型值的方式
  58.  
  59. if(c00.getType() == CellType.LABEL)
  60.  
  61. {
  62.  
  63. LabelCell labelc00 = (LabelCell)c00;
  64.  
  65. strc00 = labelc00.getString();
  66.  
  67. }
  68.  
  69. //输出
  70.  
  71. System.out.println(strc00);*/
  72.  
  73. //Sheet的下标是从0开始
  74.  
  75. //获取第一张Sheet表
  76.  
  77. Sheet rst = rwb.getSheet(0);
  78.  
  79. //获取Sheet表中所包含的总列数
  80.  
  81. int rsColumns = rst.getColumns();
  82.  
  83. //获取Sheet表中所包含的总行数
  84.  
  85. int rsRows = rst.getRows();
  86.  
  87. //获取指定单元格的对象引用
  88.  
  89. for (int i = 0; i < rsRows; i++)
  90.  
  91. {
  92.  
  93. for (int j = 0; j < rsColumns; j++)
  94.  
  95. {
  96.  
  97. Cell cell = rst.getCell(j, i);
  98.  
  99. System.out.print(cell.getContents() + " ");
  100.  
  101. }
  102.  
  103. System.out.println();
  104.  
  105. }
  106.  
  107. //关闭
  108.  
  109. rwb.close();
  110.  
  111. }
  112.  
  113. catch(Exception e)
  114.  
  115. {
  116.  
  117. e.printStackTrace();
  118.  
  119. }
  120.  
  121. }
  122.  
  123. /**输出Excel*/
  124.  
  125. public static void writeExcel(OutputStream os)
  126.  
  127. {
  128.  
  129. try
  130.  
  131. {
  132.  
  133. /** 只能通过API提供的 工厂方法来创建Workbook,而不能使用WritableWorkbook的构造函数,因为类WritableWorkbook的构造函数为 protected类型:方法一:直接从目标文件中读取 WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile));方法 二:如下实例所示 将WritableWorkbook直接写入到输出流*/
  134.  
  135. WritableWorkbook wwb = Workbook.createWorkbook(os);
  136.  
  137. //创建Excel工作表 指定名称和位置
  138.  
  139. WritableSheet ws = wwb.createSheet("Test Sheet 1",0);
  140.  
  141. /**************往工作表中添加数据*****************/
  142.  
  143. //1.添加Label对象
  144.  
  145. Label label = new Label(0,0,"测试");
  146.  
  147. ws.addCell(label);
  148.  
  149. //添加带有字型Formatting对象
  150.  
  151. WritableFont wf = new WritableFont(WritableFont.TIMES,18,WritableFont.BOLD,true);
  152.  
  153. WritableCellFormat wcf = new WritableCellFormat(wf);
  154.  
  155. Label labelcf = new Label(1,0,"this is a label test",wcf);
  156.  
  157. ws.addCell(labelcf);
  158.  
  159. //添加带有字体颜色的Formatting对象
  160.  
  161. WritableFont wfc = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,
  162.  
  163. UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.DARK_YELLOW);
  164.  
  165. WritableCellFormat wcfFC = new WritableCellFormat(wfc);
  166.  
  167. Label labelCF = new Label(1,0,"Ok",wcfFC);
  168.  
  169. ws.addCell(labelCF);
  170.  
  171. //2.添加Number对象
  172.  
  173. Number labelN = new Number(0,1,3.1415926);
  174.  
  175. ws.addCell(labelN);
  176.  
  177. //添加带有formatting的Number对象
  178.  
  179. NumberFormat nf = new NumberFormat("#.##");
  180.  
  181. WritableCellFormat wcfN = new WritableCellFormat(nf);
  182.  
  183. Number labelNF = new jxl.write.Number(1,1,3.1415926,wcfN);
  184.  
  185. ws.addCell(labelNF);
  186.  
  187. //3.添加Boolean对象
  188.  
  189. Boolean labelB = new jxl.write.Boolean(0,2,true);
  190.  
  191. ws.addCell(labelB);
  192.  
  193. Boolean labelB1 = new jxl.write.Boolean(1,2,false);
  194.  
  195. ws.addCell(labelB1);
  196.  
  197. //4.添加DateTime对象
  198.  
  199. jxl.write.DateTime labelDT = new jxl.write.DateTime(0,3,new java.util.Date());
  200.  
  201. ws.addCell(labelDT);
  202.  
  203. //5.添加带有formatting的DateFormat对象
  204.  
  205. DateFormat df = new DateFormat("dd MM yyyy hh:mm:ss");
  206.  
  207. WritableCellFormat wcfDF = new WritableCellFormat(df);
  208.  
  209. DateTime labelDTF = new DateTime(1,3,new java.util.Date(),wcfDF);
  210.  
  211. ws.addCell(labelDTF);
  212.  
  213. //6.添加图片对象,jxl只支持png格式图片
  214.  
  215. File image = new File("f:\\1.png");
  216.  
  217. WritableImage wimage = new WritableImage(0,4,6,17,image);
  218.  
  219. ws.addImage(wimage);
  220.  
  221. //7.写入工作表
  222.  
  223. wwb.write();
  224.  
  225. wwb.close();
  226.  
  227. }
  228.  
  229. catch(Exception e)
  230.  
  231. {
  232.  
  233. e.printStackTrace();
  234.  
  235. }
  236.  
  237. }
  238.  
  239. /** 将file1拷贝后,进行修改并创建输出对象file2
  240.  
  241. * 单元格原有的格式化修饰不能去掉,但仍可将新的单元格修饰加上去,
  242.  
  243. * 以使单元格的内容以不同的形式表现
  244.  
  245. */
  246.  
  247. public static void modifyExcel(File file1,File file2)
  248.  
  249. {
  250.  
  251. try
  252.  
  253. {
  254.  
  255. Workbook rwb = Workbook.getWorkbook(file1);
  256.  
  257. WritableWorkbook wwb = Workbook.createWorkbook(file2,rwb);//copy
  258.  
  259. WritableFont wfc = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,
  260.  
  261. UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLUE);
  262.  
  263. WritableCellFormat wcfFC = new WritableCellFormat(wfc);
  264.  
  265. WritableSheet ws = wwb.getSheet(0);
  266.  
  267. WritableCell wc = ws.getWritableCell(0,0);
  268.  
  269. //判断单元格的类型,做出相应的转换
  270.  
  271. if(wc.getType() == CellType.LABEL)
  272.  
  273. {
  274.  
  275. Label labelCF =new Label(0,0,"人物(新)",wcfFC);
  276.  
  277. ws.addCell(labelCF);
  278.  
  279. //Label label = (Label)wc;
  280.  
  281. //label.setString("被修改");
  282.  
  283. }
  284.  
  285. wwb.write();
  286.  
  287. wwb.close();
  288.  
  289. rwb.close();
  290.  
  291. }
  292.  
  293. catch(Exception e)
  294.  
  295. {
  296.  
  297. e.printStackTrace();
  298.  
  299. }
  300.  
  301. }
  302.  
  303. //测试
  304.  
  305. public static void main(String args[])
  306.  
  307. {
  308.  
  309. try
  310.  
  311. {
  312.  
  313. //读EXCEL
  314.  
  315. ExcelHandle.readExcel("F:/红楼人物.xls");
  316.  
  317. //输出EXCEL
  318.  
  319. File filewrite=new File("F:/红楼人物2.xls");
  320.  
  321. filewrite.createNewFile();
  322.  
  323. OutputStream os=new FileOutputStream(filewrite);
  324.  
  325. ExcelHandle.writeExcel(os);
  326.  
  327. //修改EXCEL
  328.  
  329. ExcelHandle.modifyExcel(new File("F:/红楼人物.xls"), new File("F:/红楼人物3.xls"));
  330.  
  331. }
  332.  
  333. catch(Exception e)
  334.  
  335. {
  336.  
  337. e.printStackTrace();
  338.  
  339. }
  340.  
  341. }
  342.  
  343. }

附:

调用流程如下:

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(),就可以得到确定类型的值。

转帖 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. git基础常用命令

    常用命令 git init //初始化本地git环境 git clone XXX//克隆一份代码到本地仓库 git pull //把远程库的代码更新到工作台 git pull --rebase ori ...

  2. Java Web学习总结(1)Tomcat使用教程

    一,简介 Tomcat是一个实现了JAVA EE标准的最小的WEB服务器,是Apache 软件基金会的Jakarta 项目中的一个核心项目,由Apache.Sun 和其他一些公司及个人共同开发而成.因 ...

  3. centos7下安装storm步骤

      前言 真是后知后觉,最近忙也要学习,把以前丢的都要拾起来.原理懂不懂也把环境搭起来学习.   环境  centos7 jdk 1.8 zookeeper 3.4.13 storm 1.2.2 安装 ...

  4. 【BZOJ2555】SubString(后缀自动机,LCT)

    题意:给你一个字符串init,要求你支持两个操作 (1):在当前字符串的后面插入一个字符串 (2):询问字符串s在当前字符串中出现了几次?(作为连续子串) 你必须在线支持这些操作. 长度 <= ...

  5. python中的单例模式及其实现

    单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在. 当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. 比如, ...

  6. 二次封装dojo slider

    上次的二次封装timeslider,挺有意思,又来封装一个dojo的,样式还是用arcgis的.实现更多功能,包括HorizontalSlider和VerticalSlider, 刻度的显示隐藏,标签 ...

  7. 【python3】装饰器

    参考文章: 理解Python装饰器(Decorator) 关键点: 写装饰器一定要搞定楚函数名后面带小括号和不带小括号的含义.带小括号,表示调用这个函数,而不带小括号,则表示的是该函数引用地址 简单装 ...

  8. 开启关闭mysql服务

    1.Windows下 启动服务 mysqld --console 或 net start mysql 关闭服务 mysqladmin -uroot shudown 或 net stop mysql   ...

  9. vue2.0 项目小总结

    最近做了一个vue的PC端的项目,不大,真正用到vue的东西也不是太多,逻辑处理用到了不少原生js东西. 1.图片渲染 后台返回base64格式数据,一开始绑定src,提示pic字段未定义,懵逼了好久 ...

  10. Vue2.0---webpack打包知识点-1

    打包上线或者将项目做成产品的肯定不希望暴露自己源码 在config的index.js中将productionGzip设置为false即可.(使之不生成.map文件). 对Vue-cli的webpack ...