e代劍客——溫柔一刀

          生活就像海洋,只有意志堅強的人,才能到達彼岸

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            76 隨筆 :: 7 文章 :: 215 評論 :: 0 Trackbacks

          jxl是一個韓國人寫的java操作excel的工具,?在開源世界中,有兩套比較有影響的API可供使用,一個是POI,一個是jExcelAPI。其中功能相對POI比較弱一點。但jExcelAPI對中文支持非常好,API是純Java的,?并不依賴Windows系統,即使運行在Linux下,它同樣能夠正確的處理Excel文件。?另外需要說明的是,這套API對圖形和圖表的支持很有限,而且僅僅識別PNG格式。

          使用如下:

          搭建環境

          ?將下載后的文件解包,得到jxl.jar,放入classpath,安裝就完成了。

          ?基本操作

          ?一、創建文件

          ?擬生成一個名為“test.xls”的Excel文件,其中第一個工作表被命名為
          ?“第一頁”,大致效果如下:

          package ?test;

          // 生成Excel的類
          import ?java.io.File;

          import ?jxl.Workbook;
          import ?jxl.write.Label;
          import ?jxl.write.WritableSheet;
          import ?jxl.write.WritableWorkbook;

          public ? class ?CreateExcel? {
          ????
          public ? static ? void ?main(String?args[])? {
          ????????
          try ? {
          ????????????
          // ?打開文件
          ????????????WritableWorkbook?book? = ?Workbook.createWorkbook( new ?File( " test.xls " ));
          ????????????
          // ?生成名為“第一頁”的工作表,參數0表示這是第一頁
          ????????????WritableSheet?sheet? = ?book.createSheet( " 第一頁 " ,? 0 );
          ????????????
          // ?在Label對象的構造子中指名單元格位置是第一列第一行(0,0)
          ????????????
          // ?以及單元格內容為test
          ????????????Label?label? = ? new ?Label( 0 ,? 0 ,? " test " );

          ????????????
          // ?將定義好的單元格添加到工作表中
          ????????????sheet.addCell(label);

          ????????????
          /*
          ?????????????*?生成一個保存數字的單元格?必須使用Number的完整包路徑,否則有語法歧義?單元格位置是第二列,第一行,值為789.123
          ?????????????
          */

          ????????????jxl.write.Number?number?
          = ? new ?jxl.write.Number( 1 ,? 0 ,? 555.12541 );
          ????????????sheet.addCell(number);

          ????????????
          // ?寫入數據并關閉文件
          ????????????book.write();
          ????????????book.close();

          ????????}
          ? catch ?(Exception?e)? {
          ????????????System.out.println(e);
          ????????}

          ????}

          }

          ???編譯執行后,會產生一個Excel文件。

          ?三、讀取文件

          ?以剛才我們創建的Excel文件為例,做一個簡單的讀取操作,程序代碼如下:

          package ?test;

          // 讀取Excel的類
          import ?java.io.File;

          import ?jxl.Cell;
          import ?jxl.Sheet;
          import ?jxl.Workbook;

          public ? class ?ReadExcel? {
          ????
          public ? static ? void ?main(String?args[])? {
          ????????
          try ? {
          ????????????Workbook?book?
          = ?Workbook.getWorkbook( new ?File( " test.xls " ));
          ????????????
          // ?獲得第一個工作表對象
          ????????????Sheet?sheet? = ?book.getSheet( 0 );
          ????????????
          // ?得到第一列第一行的單元格
          ????????????Cell?cell1? = ?sheet.getCell( 0 ,? 0 );
          ????????????String?result?
          = ?cell1.getContents();
          ????????????System.out.println(result);
          ????????????book.close();
          ????????}
          ? catch ?(Exception?e)? {
          ????????????System.out.println(e);
          ????????}

          ????}

          }


          ??程序執行結果:test

          ?四、修改文件
          ?利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的時候,除了打開文件的方式不同之外,
          ?其他操作和創建Excel是一樣的。下面的例子是在我們已經生成的Excel文件中添加一個工作表:

          package ?test;

          import ?java.io.File;

          import ?jxl.Workbook;
          import ?jxl.write.Label;
          import ?jxl.write.WritableSheet;
          import ?jxl.write.WritableWorkbook;

          public ? class ?UpdateExcel? {
          ????
          public ? static ? void ?main(String?args[])? {
          ????????
          try ? {
          ????????????
          // ?Excel獲得文件
          ????????????Workbook?wb? = ?Workbook.getWorkbook( new ?File( " test.xls " ));
          ????????????
          // ?打開一個文件的副本,并且指定數據寫回到原文件
          ????????????WritableWorkbook?book? = ?Workbook.createWorkbook( new ?File( " test.xls " ),
          ????????????????????wb);
          ????????????
          // ?添加一個工作表
          ????????????WritableSheet?sheet? = ?book.createSheet( " 第二頁 " ,? 1 );
          ????????????sheet.addCell(
          new ?Label( 0 ,? 0 ,? " 第二頁的測試數據 " ));
          ????????????book.write();
          ????????????book.close();
          ????????}
          ? catch ?(Exception?e)? {
          ????????????System.out.println(e);
          ????????}

          ????}

          }


          其他操作

          ?一、 數據格式化

          ?在Excel中不涉及復雜的數據類型,能夠比較好的處理字串、數字和日期已經能夠滿足一般的應用。

          ?1、 字串格式化

          ?字符串的格式化涉及到的是字體、粗細、字號等元素,這些功能主要由WritableFont和
          ?WritableCellFormat類來負責。假設我們在生成一個含有字串的單元格時,使用如下語句,
          ?為方便敘述,我們為每一行命令加了編號:

          WritableFont?font1 =
          ?
          new ?WritableFont(WritableFont.TIMES, 16 ,WritableFont.BOLD);?①

          ?WritableCellFormat?format1
          = new ?WritableCellFormat(font1);?②

          ?Label?label
          = new ?Label( 0 , 0 ,”data? 4 ?test”,format1)?③

          ??其中①指定了字串格式:字體為TIMES,字號16,加粗顯示。WritableFont有非常豐富的
          ?構造子,供不同情況下使用,jExcelAPI的java-doc中有詳細列表,這里不再列出。

          ?②處代碼使用了WritableCellFormat類,這個類非常重要,通過它可以指定單元格的各種
          ?屬性,后面的單元格格式化中會有更多描述。

          ?③處使用了Label類的構造子,指定了字串被賦予那種格式。

          ?在WritableCellFormat類中,還有一個很重要的方法是指定數據的對齊方式,比如針對我們
          ?上面的實例,可以指定:

          ? // 把水平對齊方式指定為居中
          ?format1.setAlignment(jxl.format.Alignment.CENTRE);

          ?
          // 把垂直對齊方式指定為居中
          ?format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);

          二、單元格操作

          ?Excel中很重要的一部分是對單元格的操作,比如行高、列寬、單元格合并等,所幸jExcelAPI
          ?提供了這些支持。這些操作相對比較簡單,下面只介紹一下相關的API。

          ?1、 合并單元格

          ?WritableSheet.mergeCells( int ?m, int ?n, int ?p, int ?q);?

          ?
          // 作用是從(m,n)到(p,q)的單元格全部合并,比如:
          ?WritableSheet?sheet = book.createSheet(“第一頁”, 0 );

          ?
          // 合并第一列第一行到第六列第一行的所有單元格
          ?sheet.mergeCells( 0 , 0 , 5 , 0 );

          ?合并既可以是橫向的,也可以是縱向的。合并后的單元格不能再次進行合并,否則會觸發異常。

          ?2、 行高和列寬

          ?WritableSheet.setRowView( int ?i, int ?height);

          ?
          // 作用是指定第i+1行的高度,比如:

          ?
          // 將第一行的高度設為200
          ?sheet.setRowView( 0 , 200 );

          ?WritableSheet.setColumnView(
          int ?i, int ?width);

          ?
          // 作用是指定第i+1列的寬度,比如:

          ?
          // 將第一列的寬度設為30
          ?sheet.setColumnView( 0 , 30 );

          ?jExcelAPI還有其他的一些功能,比如插入圖片等,這里就不再一一介紹,讀者可以自己探索。

          其中:如果讀一個excel,需要知道它有多少行和多少列,如下操作:

          Workbook?book? = ?Workbook.getWorkbook( new ?File( " 測試1.xls " ));
          ????????
          // ?獲得第一個工作表對象
          ????????Sheet?sheet? = ?book.getSheet( 0 );
          ????????
          // ?得到第一列第一行的單元格
          ???????? int ?columnum? = ?sheet.getColumns(); // ?得到列數
          ???????? int ?rownum? = ?sheet.getRows(); // ?得到行數
          ????????System.out.println(columnum);
          ????????System.out.println(rownum);
          ????????
          for ?( int ?i? = ? 0 ;?i? < ?rownum;?i ++ ) // ?循環進行讀寫
          ???????? {
          ????????????
          for ?( int ?j? = ? 0 ;?j? < ?columnum;?j ++ )? {
          ????????????????Cell?cell1?
          = ?sheet.getCell(j,?i);
          ????????????????String?result?
          = ?cell1.getContents();
          ????????????????System.out.print(result);
          ????????????????System.out.print(
          " \t " );
          ????????????}

          ????????????System.out.println();
          ????????}

          ????????book.close();
          posted on 2006-10-07 11:04 溫柔一刀 閱讀(6485) 評論(5)  編輯  收藏 所屬分類: java相關

          評論

          # re: JXL操作Excel 2006-10-27 18:19 junitfans
          Thanks  回復  更多評論
            

          # re: JXL操作Excel 2007-09-02 01:50 10:10
          簡明扼要,thx,hehe  回復  更多評論
            

          # re: JXL操作Excel 2007-12-27 12:19 weee
          good  回復  更多評論
            

          # re: JXL操作Excel 2008-01-08 17:33 cole
          太精簡了,簡單易懂,精華,謝謝!!!  回復  更多評論
            

          # re: JXL操作Excel[未登錄] 2008-05-29 11:49 蘋果
          簡練!精煉!易懂! 好東西,值得學習!  回復  更多評論
            

          聯系偶 zhupanjava@gmail.com 溫柔一刀
          主站蜘蛛池模板: 抚宁县| 花垣县| 武陟县| 阜平县| 梁山县| 桃园县| 都昌县| 满洲里市| 梁平县| 虎林市| 巫溪县| 涟源市| 民县| 沙河市| 左权县| 孝义市| 岫岩| 天门市| 盘山县| 噶尔县| 鹤壁市| 富顺县| 收藏| 南漳县| 额敏县| 防城港市| 车险| 临安市| 县级市| 买车| 高碑店市| 巴塘县| 沐川县| 罗江县| 灵宝市| 江西省| 佛教| 徐水县| 布尔津县| 苍溪县| 泗水县|