使用JXL組件操作Excel和導出文件

?

使用JXL組件操作Excel和導出文件

?  

  原文鏈接:http://tianweili.github.io/blog/2015/01/29/use-jxl-produce-excel/

  前言:這段時間參與的項目要求做幾張Excel報表,由于項目框架使用了jxl組件,所以把jxl組件的詳細用法歸納總結一下。

1、簡介

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

2、搭建環境

  網上下載jxl.jar包,然后導入工程項目lib中,即可使用。

3、基本操作

  1、創建文件

  以下實例是生成一個名為“test.xls”的Excel文件,其中第一個工作表被命名為“第一頁”。編譯執行后,會產生一個Excel文件。

// 生成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("c:/test.xls"));// 生成名為“第一頁”的工作表,參數0表示這是第一頁WritableSheet sheet = book.createSheet(" 第一頁 ", 0);// 在Label對象的構造子中指名單元格位置是第一列第一行(0,0)// 以及單元格內容為testLabel label = new Label(0, 0, " test ");// 將定義好的單元格添加到工作表中
            sheet.addCell(label);// 生成一個保存數字的單元格,必須使用Number的完整包路徑,否則有語法歧義。//單元格位置是第二列,第一行,值為123.456jxl.write.Number number = new jxl.write.Number(1, 0, 123.456);sheet.addCell(number);// 寫入數據并關閉文件
            book.write();book.close();} catch (Exception e) {System.out.println(e);}}
}

  2、單元格操作

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

  合并單元格

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

// 方法作用是從(m,n)到(p,q)的單元格全部合并
WritableSheet.mergeCells( int m, int n, int p, int q);// 合并第1列第1行到第3列第4行的所有單元格
sheet.mergeCells(0, 0, 2, 3);// 先合并單元格,再添加內容。并且定義的列行方位在合并的單元格第一個列行方位,否則添加不上內容,如下所示:
Label label = new Label(0, 0, " 測試 ");
sheet.addCell(label);

  行高和列寬

// 作用是指定第i+1行的高度
WritableSheet.setRowView( int i, int height);// 將第一行的高度設為200
sheet.setRowView(0, 200);// 作用是指定第i+1列的寬度
WritableSheet.setColumnView( int i, int width);// 將第一列的寬度設為30
sheet.setColumnView(0, 30);

  3、數據格式化

  字串格式化

  字符串的格式化涉及到的是字體、粗細、字號等元素,這些功能主要由WritableFont和WritableCellFormat類來負責。

  WritableFont有非常豐富的構造子方法,供不同情況下使用,jExcelAPI的java-doc中有詳細列表,這里不再列出。

  WritableCellFormat類非常重要,通過它可以指定單元格的各種屬性,后面的單元格格式化中會有更多描述。

//字體樣式:宋體;11號;粗體
WritableFont font1 = new WritableFont(WritableFont.createFont("宋體"), 11, WritableFont.BOLD);
WritableCellFormat format1 = new  WritableCellFormat(font1);
Label label = new  Label( 0 , 0 , "test", format1);

  對齊方式

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

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

  4、讀取文件

// 讀取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("c:/test.xls"));// 獲得第一個工作表對象Sheet sheet = book.getSheet(0);// 得到第一列第一行的單元格Cell cell = sheet.getCell(0, 0);String contents = cell.getContents();//得到單元格內容
            System.out.println(contents);book.close();} catch (Exception e) {System.out.println(e);}}
}

  程序的輸出結果是:test。

  Cell接口的方法還可以獲取單元格行、列位置,單元格是否隱藏等屬性。具體的參考jxl的API。

  5、修改文件

  修改Excel文件除了打開文件的方式不同之外,其他與創建Excel是一樣的。

// 修改Excel的類 
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("c:/test.xls"));// 打開一個文件的副本,并且指定數據寫回到原文件WritableWorkbook book = Workbook.createWorkbook(new File("c:/test.xls"), wb);//修改原工作表數據WritableSheet sheet1 = book.getSheet(0);sheet1.addCell(new Label(0, 0, "覆蓋原來的test"));// 添加一個新工作表WritableSheet sheet2 = book.createSheet(" 第二頁 ", 1);sheet2.addCell(new Label(0, 0, " 第二頁的測試數據 "));book.write();book.close();} catch (Exception e) {System.out.println(e);}}
}

4、導出文件

  附上一個導出文件例子。

  JS代碼

$( function() {/** 報表導出按鈕 */$( '#exportBtn' ).click( function() {if( !$( '#frm' ).validationEngine( 'validate' ) )return false;$( '#frm' )[ 0 ].action = '${ctx }/exportAction.do?m=exportExcel';$( '#frm' )[ 0 ].submit();$( this ).attr( 'disabled', true );window.setTimeout( function() {document.getElementById( 'exportBtn' ).disabled = false;}, 5000 );} );
} );

  JAVA代碼

/** 根據瀏覽器類型,轉換為當前瀏覽器支持的中文*/
String fileName = "Excel工作表";/** header 瀏覽器key */
String userAgent = request.getHeader("USER-AGENT").toUpperCase();
if (userAgent != null && userAgent.length() != 0 && fileName != null && fileName.length() != 0) {/** header IE */if ( -1 != userAgent.indexOf("MSIE") )fileName = URLEncoder.encode(fileName, "UTF-8");/** header Mozilla */else if ( -1 != userAgent.indexOf("MOZILLA") )fileName = new String(fileName.getBytes(), "ISO8859-1");/** header Safari */else if ( -1 != userAgent.indexOf("SAFARI") )fileName = new String( fileName.getBytes(), "ISO8859-1");/** header Opera */else if ( -1 != userAgent.indexOf("OPERA") )fileName = new String( fileName.getBytes(), "ISO8859-1");/** header 其它內核瀏覽器 */elsefileName = new String( fileName.getBytes(), "ISO8859-1");
}response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", new StringBuffer("attachment").append( ";filename=" ).append( fileName ).append(".xls").toString() );WritableWorkbook book = Workbook.createWorkbook(response.getOutputStream());
WritableSheet sheet = book.createSheet("Excel工作表", 0);//...

book.write();
book.close();

?原文鏈接:http://tianweili.github.io/blog/2015/01/29/use-jxl-produce-excel/

轉載于:https://www.cnblogs.com/hellojava/archive/2013/01/06/2843710.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/274395.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/274395.shtml
英文地址,請注明出處:http://en.pswp.cn/news/274395.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

facebook有哪些信息_關于Facebook表情表情符號的所有信息

facebook有哪些信息Ever since worldwide lockdown and restriction on travel have been imposed, platforms like #Facebook, #Instagram, #Zoom, #GoogleDuo, & #Whatsapp have become more important than ever to connect with your loved ones (apart from the sourc…

M2總結報告

團隊成員 李嘉良 http://home.cnblogs.com/u/daisuke/ 王熹 http://home.cnblogs.com/u/vvnx/ 王冬 http://home.cnblogs.com/u/darewin/ 王泓洋 http://home.cnblogs.com/u/fiverice/ 劉明 http://home.cnblogs.com/u/liumingbuaa/ 由之望 http://www.cnbl…

react動畫庫_React 2020動畫庫

react動畫庫Animations are important in instances like page transitions, scroll events, entering and exiting components, and events that the user should be alerted to.動畫在諸如頁面過渡,滾動事件,進入和退出組件以及應提醒用戶的事件之類的…

Weather

public class WeatherModel { #region 定義成員變量 private string _temperature ""; private string _weather ""; private string _wind ""; private string _city ""; private …

線框模型_進行計劃之前:線框和模型

線框模型Before we start developing something, we need a plan about what we’re doing and what is the expected result from the project. Same as developing a website, we need to create a mockup before we start developing (coding) because it will cost so much…

撰寫論文時word使用技巧(轉)

------------------------------------- 1. Word2007 的表格自定義格式額度功能是很實用的,比如論文中需要經常插入表格的話, 可以在“表格設計”那里“修改表格樣式”一次性把默認的表格樣式設置為三線表,這樣, 你以后每次插入的…

工作經驗教訓_在設計工作五年后獲得的經驗教訓

工作經驗教訓This June it has been five years since I graduated from college. Since then I’ve been working as a UX designer for a lot of different companies, including a start-up, an application developer, and two consultancy firms.我從大學畢業已經五年了&a…

Wayland 源碼解析之代碼結構

來源:http://blog.csdn.net/basilc/article/details/8074895 獲取、編譯 Wayland 及其依賴庫可參考 Wayland 官方網站的 Build 指南:http://wayland.freedesktop.org/building.html。 Wayland 實現的代碼組成可以分成以下四部分: 1. Wayland…

中文排版規則_非設計師的5條排版規則

中文排版規則01僅以一種字體開始 (01 Start with only one font) The first tip for non-designers dealing with typography is simple and will make your life much easier: Stop combining different fonts you like individually and try using only one font in your fut…

基本響應性的Web設計測試工具

在重新設計頁面的過程中。要使頁面完全響應的設計(這意味著它會重新調整大小根據瀏覽器的尺寸和方向)。如iPhone和iPad的移動電話和平板電腦我碰到了一些非常方便的響應設計工具,幫我測試網站在不同的屏幕響應。下面的這些響應的網頁設計工具…

ux設計_聲音建議:設計UX聲音的快速指南

ux設計Mating calls, warning grunts, and supportive coos are some of the sounds heard throughout the animal kingdom. All species use finely-tuned noises to communicate to one another and inform others of an action or behavior. We humans aren’t all that dif…

css3高級和低級樣式屬性先后順序

寫css hack 時,由于hack主要針對的是個別瀏覽器,hack的書寫順序應當是從一般到特殊的寫法。 如: .box { width:200px; height:200px; position:fixed; left:0; top:0; _position:absolute; } 如果顛倒順序,從特殊到一般&#xff0…

sans serif_Sans和Serif相遇可愛

sans serifI first noticed it in this tweet. Exciting upcoming product and snazzy motion work aside, “What a fascinating logotype!”, I exclaimed!我在此推文中首先注意到了它。 我驚呼即將推出的激動人心的產品和令人眼花,亂的動作,“多么迷人…

[ckeditor系列]ckeditor 自己寫的一個簡單的image上傳js 運用iframe的ajax上傳

ckeditor最近修改一個上傳的,原來的Image的上傳插件功能很多,但是自己用,沒有必要,就進行了修改,后來就改成了目前的樣子,根據_samples/api_dialog.html 進行了修改,把頁面里面的調用都進行了修…

sql 避免除0錯誤_設計簡歷時避免這3個常見的UX錯誤

sql 避免除0錯誤重點 (Top highlight)Having a great looking resume on hand is very important when you’re looking for a job. It is your ticket to land the interview that will get you one step closer to that one job you’ve been dreaming of.在找工作時&#xf…

一個網站自動化測試程序的設計與實現

CSDN博客不再經常更新,更多優質文章請來 粉絲聯盟網 FansUnion.cn! (FansUnion) 代碼 下載地址:http://download.csdn.net/detail/fansunion/5018357(免積分) 代碼亮點:可讀性很好,注釋詳盡 背景 工作中,在維護一…

如何編寫數據庫可視化界面_編寫用于數據可視化的替代文本

如何編寫數據庫可視化界面什么是替代文字 (What is Alt Text) Alt text (sometimes called Alt tags or alternative text) are written descriptions added to images that convey the meaning of the visual. Good alt text helps more people understand the content. Assis…

(轉)swc與swf的區別

在Flash Builder中用Actionscript寫的類可以打包成swc或swf, 在Flash CS中制作的元件也可以打包成swc或swf文件, 一個swc或swf文件中可以包含多個類或元件, 每個元件會映射成一個類, 因此,在Flash Builder中的類和在Fl…

js 驗證各種格式類型的正則表達式

<script src"scripts/jquery-1.4.1.js" type"text/javascript"></script> <script language"javascript" type"text/javascript"> /** * 定義驗證各種格式類型的正則表達式對象 */ var Regexs { email: …

reloaddata 跳動_紙跳動像素

reloaddata 跳動I would like to open with a problem.我想開一個問題。 Why are so many designer going straight to pixels?為什么這么多設計師直接使用像素&#xff1f; Over the past few years i’ve witnessed this in my team, my clients and others throughout th…