javainthinking

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

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

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

          JAVA EXCEL API簡介

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

          提供以下功能:

          • 從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開始
                      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
                  {
                      /**
                       * 只能通過API提供的工廠方法來創(chuàng)建Workbook,而不能使用WritableWorkbook的構(gòu)造函數(shù),
                       * 因為類WritableWorkbook的構(gòu)造函數(shù)為protected類型
                       * method(1)直接從目標(biāo)文件中讀取WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile));
                       * method(2)如下實例所示 將WritableWorkbook直接寫入到輸出流

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

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

                      //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代表寬和高占的單元格數(shù)
                      ws.addImage(wimage);
                      //寫入工作表
                      wwb.write();
                      wwb.close();
                  }
                  catch(Exception e)
                  {
                      e.printStackTrace();
                  }
              }

              /**
               * 拷貝后,進(jìn)行修改,其中file1為被copy對象,file2為修改后創(chuàng)建的對象
               * 盡單元格原有的格式化修飾是不能去掉的,我們還是可以將新的單元格修飾加上去,
               * 以使單元格的內(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();
                  }
              }

              //測試
              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)測試,創(chuàng)建一個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就可以動態(tài)生成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學(xué)習(xí)之旅 閱讀(36154) 評論(2)  編輯  收藏 所屬分類: Excel的相關(guān)操作

          評論

          # 利用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  回復(fù)  更多評論
            

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


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 花莲市| 宁城县| 二连浩特市| 延长县| 乐安县| 盘锦市| 岚皋县| 开化县| 双柏县| 蒙城县| 罗源县| 邹平县| 南陵县| 拉萨市| 绿春县| 榆树市| 兴和县| 井陉县| 鄯善县| 阳谷县| 绍兴县| 喀喇沁旗| 若尔盖县| 酒泉市| 齐齐哈尔市| 乌审旗| 淮南市| 安陆市| 阳原县| 安多县| 阳江市| 双柏县| 延川县| 嘉兴市| 祁阳县| 峨边| 汾西县| 绥芬河市| 昆明市| 青浦区| 敦煌市|