javainthinking

          XL的個(gè)性空間和java學(xué)習(xí)之旅

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            13 隨筆 :: 13 文章 :: 20 評(píng)論 :: 1 Trackbacks

          參考文章:http://www-128.ibm.com/developerworks/cn/java/l-javaExcel/index.html
          作了一些相應(yīng)的擴(kuò)充(讀取圖片等)

          JAVA EXCEL API簡(jiǎn)介

          Java Excel是一開(kāi)放源碼項(xiàng)目,通過(guò)它Java開(kāi)發(fā)人員可以讀取Excel文件的內(nèi)容、創(chuàng)建新的Excel文件、更新已經(jīng)存在的Excel文件。使用該API非Windows操作系統(tǒng)也可以通過(guò)純Java應(yīng)用來(lái)處理Excel數(shù)據(jù)表。因?yàn)槭鞘褂肑ava編寫(xiě)的,所以我們?cè)赪eb應(yīng)用中可以通過(guò)JSP、Servlet來(lái)調(diào)用API實(shí)現(xiàn)對(duì)Excel數(shù)據(jù)表的訪問(wèn)。

          提供以下功能:

          • 從Excel 95、97、2000等格式的文件中讀取數(shù)據(jù);
          • 讀取Excel公式(可以讀取Excel 97以后的公式);
          • 生成Excel數(shù)據(jù)表(格式為Excel 97);
          • 支持字體、數(shù)字、日期的格式化;
          • 支持單元格的陰影操作,以及顏色操作;
          • 修改已經(jīng)存在的數(shù)據(jù)表;
          • 能夠讀取圖表信息

          1.應(yīng)用示例
          包括從Excel讀取數(shù)據(jù),生成新的Excel,以及修改Excel
          package common.util;

          import jxl.*;
          import jxl.format.UnderlineStyle;
          import jxl.write.*;
          import jxl.write.Number;
          import jxl.write.Boolean;

          import java.io.*;

          /**
           * Created by IntelliJ IDEA.
           * User: xl
           * Date: 2005-7-17
           * Time: 9:33:22
           * To change this template use File | Settings | File Templates.
           */
          public class ExcelHandle
          {
              public ExcelHandle()
              {
              }

              /**
               * 讀取Excel
               *
               * @param filePath
               */
              public static void readExcel(String filePath)
              {
                  try
                  {
                      InputStream is = new FileInputStream(filePath);
                      Workbook rwb = Workbook.getWorkbook(is);
                      //Sheet st = rwb.getSheet("0")這里有兩種方法獲取sheet表,1為名字,而為下標(biāo),從0開(kāi)始
                      Sheet st = rwb.getSheet("original");
                      Cell c00 = st.getCell(0,0);
                      //通用的獲取cell值的方式,返回字符串
                      String strc00 = c00.getContents();
                      //獲得cell具體類型值的方式
                      if(c00.getType() == CellType.LABEL)
                      {
                          LabelCell labelc00 = (LabelCell)c00;
                          strc00 = labelc00.getString();
                      }
                      //輸出
                      System.out.println(strc00);
                      //關(guān)閉
                      rwb.close();
                  }
                  catch(Exception e)
                  {
                      e.printStackTrace();
                  }
              }

              /**
               * 輸出Excel
               *
               * @param os
               */
              public static void writeExcel(OutputStream os)
              {
                  try
                  {
                      /**
                       * 只能通過(guò)API提供的工廠方法來(lái)創(chuàng)建Workbook,而不能使用WritableWorkbook的構(gòu)造函數(shù),
                       * 因?yàn)轭怶ritableWorkbook的構(gòu)造函數(shù)為protected類型
                       * method(1)直接從目標(biāo)文件中讀取WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile));
                       * method(2)如下實(shí)例所示 將WritableWorkbook直接寫(xiě)入到輸出流

                       */
                      WritableWorkbook wwb = Workbook.createWorkbook(os);
                      //創(chuàng)建Excel工作表 指定名稱和位置
                      WritableSheet ws = wwb.createSheet("Test Sheet 1",0);

                      //**************往工作表中添加數(shù)據(jù)*****************

                      //1.添加Label對(duì)象
                      Label label = new Label(0,0,"this is a label test");
                      ws.addCell(label);

                      //添加帶有字型Formatting對(duì)象
                      WritableFont wf = new WritableFont(WritableFont.TIMES,18,WritableFont.BOLD,true);
                      WritableCellFormat wcf = new WritableCellFormat(wf);
                      Label labelcf = new Label(1,0,"this is a label test",wcf);
                      ws.addCell(labelcf);

                      //添加帶有字體顏色的Formatting對(duì)象
                      WritableFont wfc = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,
                              UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.RED);
                      WritableCellFormat wcfFC = new WritableCellFormat(wfc);
                      Label labelCF = new Label(1,0,"This is a Label Cell",wcfFC);
                      ws.addCell(labelCF);

                      //2.添加Number對(duì)象
                      Number labelN = new Number(0,1,3.1415926);
                      ws.addCell(labelN);

                      //添加帶有formatting的Number對(duì)象
                      NumberFormat nf = new NumberFormat("#.##");
                      WritableCellFormat wcfN = new WritableCellFormat(nf);
                      Number labelNF = new jxl.write.Number(1,1,3.1415926,wcfN);
                      ws.addCell(labelNF);

                      //3.添加Boolean對(duì)象
                      Boolean labelB = new jxl.write.Boolean(0,2,false);
                      ws.addCell(labelB);

                      //4.添加DateTime對(duì)象
                      jxl.write.DateTime labelDT = new jxl.write.DateTime(0,3,new java.util.Date());
                      ws.addCell(labelDT);

                      //添加帶有formatting的DateFormat對(duì)象
                      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);

                      //添加圖片對(duì)象,jxl只支持png格式圖片
                      File image = new File("f:\\2.png");
                      WritableImage wimage = new WritableImage(0,1,2,2,image);//0,1分別代表x,y.2,2代表寬和高占的單元格數(shù)
                      ws.addImage(wimage);
                      //寫(xiě)入工作表
                      wwb.write();
                      wwb.close();
                  }
                  catch(Exception e)
                  {
                      e.printStackTrace();
                  }
              }

              /**
               * 拷貝后,進(jìn)行修改,其中file1為被copy對(duì)象,file2為修改后創(chuàng)建的對(duì)象
               * 盡單元格原有的格式化修飾是不能去掉的,我們還是可以將新的單元格修飾加上去,
               * 以使單元格的內(nèi)容以不同的形式表現(xiàn)
               * @param file1
               * @param file2
               */
              public static void modifyExcel(File file1,File file2)
              {
                  try
                  {
                      Workbook rwb = Workbook.getWorkbook(file1);
                      WritableWorkbook wwb = Workbook.createWorkbook(file2,rwb);//copy
                      WritableSheet ws = wwb.getSheet(0);
                      WritableCell wc = ws.getWritableCell(0,0);
                      //判斷單元格的類型,做出相應(yīng)的轉(zhuǎn)換
                      if(wc.getType == CellType.LABEL)
                      {
                          Label label = (Label)wc;
                          label.setString("The value has been modified");
                      }
                      wwb.write();
                      wwb.close();
                      rwb.close();
                  }
                  catch(Exception e)
                  {
                      e.printStackTrace();
                  }
              }

              //測(cè)試
              public static void main(String[] args)
              {
                  try
                  {
                      //讀Excel
                      ExcelHandle.readExcel("f:/testRead.xls");
                      //輸出Excel
                      File fileWrite = new File("f:/testWrite.xls");
                      fileWrite.createNewFile();
                      OutputStream os = new FileOutputStream(fileWrite);
                      ExcelHandle.writeExcel(os);
                      //修改Excel
                      ExcelHandle.modifyExcel(new file(""),new File(""));
                  }
                  catch(Exception e)
                  {
                     e.printStackTrace();
                  }
              }
          }

          2.在jsp中做相關(guān)測(cè)試,創(chuàng)建一個(gè)writeExcel.jsp
          <%
          response.reset();//清除Buffer
          response.setContentType("application/vnd.ms-excel");
          File fileWrite = new File("f:/testWrite.xls");
          fileWrite.createNewFile();
          new FileOutputStream(fileWrite);
          ExcelHandle.writeExcel(new FileOutputStream(fileWrite));

          %>
          在IE中瀏覽writeExcel.jsp就可以動(dòng)態(tài)生成Excel文檔了,其中
          response.setContentType("application/vnd.ms-excel");語(yǔ)句必須要,才能確保不亂碼,在jsp中輸入<%@page contentType="application/vnd.ms-excel;charset=GBK"%>不行。


          評(píng)論

          # 利用JAVA操作EXCEL文件(JAVA EXCEL API)[TrackBack] 2005-10-23 17:52 naive1010
          Ping Back來(lái)自:blog.csdn.net
          [引用提示]naive1010引用了該文章, 地址: http://blog.csdn.net/naive1010/archive/2005/10/23/514123.aspx  回復(fù)  更多評(píng)論
            

          # re: 利用JAVA操作EXCEL文件(JAVA EXCEL API) 2007-08-22 09:25 xx
          為什么不能導(dǎo)入Workbook等,我用的是eclipse5.2,jdk1.5  回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 东宁县| 嘉禾县| 鹤庆县| 盘山县| 武清区| 佛山市| 石渠县| 隆尧县| 金溪县| 衡阳县| 玉门市| 定西市| 正蓝旗| 孟连| 扎兰屯市| 万荣县| 城口县| 彭州市| 濉溪县| 鸡西市| 庆城县| 黄梅县| 台州市| 呼玛县| 博野县| 井研县| 广灵县| 宣汉县| 阳原县| 沅陵县| 九龙城区| 禄丰县| 翁牛特旗| 原阳县| 高台县| 邯郸县| 弋阳县| 济宁市| 仁化县| 淄博市| 桃源县|