javainthinking

          XL的個性空間和java學習之旅

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            13 隨筆 :: 13 文章 :: 20 評論 :: 1 Trackbacks

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

          JAVA EXCEL API簡介

          Java Excel是一開放源碼項目,通過它Java開發人員可以讀取Excel文件的內容、創建新的Excel文件、更新已經存在的Excel文件。使用該API非Windows操作系統也可以通過純Java應用來處理Excel數據表。因為是使用Java編寫的,所以我們在Web應用中可以通過JSP、Servlet來調用API實現對Excel數據表的訪問。

          提供以下功能:

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

          1.應用示例
          包括從Excel讀取數據,生成新的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為名字,而為下標,從0開始
                      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);
                      //關閉
                      rwb.close();
                  }
                  catch(Exception e)
                  {
                      e.printStackTrace();
                  }
              }

              /**
               * 輸出Excel
               *
               * @param os
               */
              public static void writeExcel(OutputStream os)
              {
                  try
                  {
                      /**
                       * 只能通過API提供的工廠方法來創建Workbook,而不能使用WritableWorkbook的構造函數,
                       * 因為類WritableWorkbook的構造函數為protected類型
                       * method(1)直接從目標文件中讀取WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile));
                       * method(2)如下實例所示 將WritableWorkbook直接寫入到輸出流

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

                      //**************往工作表中添加數據*****************

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

                      //添加帶有字型Formatting對象
                      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對象
                      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對象
                      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 jxl.write.Number(1,1,3.1415926,wcfN);
                      ws.addCell(labelNF);

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

                      //4.添加DateTime對象
                      jxl.write.DateTime labelDT = new jxl.write.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);

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

              /**
               * 拷貝后,進行修改,其中file1為被copy對象,file2為修改后創建的對象
               * 盡單元格原有的格式化修飾是不能去掉的,我們還是可以將新的單元格修飾加上去,
               * 以使單元格的內容以不同的形式表現
               * @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);
                      //判斷單元格的類型,做出相應的轉換
                      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();
                  }
              }

              //測試
              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中做相關測試,創建一個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就可以動態生成Excel文檔了,其中
          response.setContentType("application/vnd.ms-excel");語句必須要,才能確保不亂碼,在jsp中輸入<%@page contentType="application/vnd.ms-excel;charset=GBK"%>不行。

          posted on 2005-07-18 10:39 XL的個性空間和java學習之旅 閱讀(36159) 評論(2)  編輯  收藏 所屬分類: Excel的相關操作

          評論

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

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


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 原平市| 明光市| 泸州市| 依兰县| 江华| 望都县| 巴中市| 天镇县| 遂川县| 定陶县| 双柏县| 呼图壁县| 静海县| 上高县| 沭阳县| 北安市| 绥芬河市| 铁力市| 全椒县| 武义县| 湘西| 龙州县| 东至县| 九江市| 宁海县| 邢台县| 南宁市| 宣城市| 元江| 池州市| 南郑县| 长春市| 陆川县| 东光县| 濉溪县| 安阳县| 昆明市| 子长县| 河西区| 阿合奇县| 新民市|