2010年9月10日 星期五

【轉貼】使用java 轉成excel 文件

【转帖】使用java类生成excel文件范例 http://www.mmug.cn/blogs/index.cfm?sPart=SB&iFid=203&sDayNow=2006-03-20&sAuthor=tianji


在台湾mmug的關於java的POI讀取excel文件的例子,發表后點擊率倍增,很高興有這麽多人關注我的帖子,今天在自己的blog中決定分享給大家一個關餘POI與資料庫交互,生成excel文件的例子,廢話少說,我們開始吧!
1.首先你要確定java這個類的機制,主要是按照我們的常理對其進行擴展,先新建一個這樣的對象,然後新建一張工作表,定義好它的第一張sheet,
<!---新建工作表--->
<cfset wb = createObject("java","org.apache.poi.hssf.usermodel.HSSFWorkbook").init()/>
<cfset newSheet = wb.createSheet()/>
<cfset wb.setsheetname(0,"#SheetName#",wb.encoding_utf_16)>
//encoding_UTF_16是對我們簡體中文的編碼,原先都用encoding_UTF_8,但顯示不了,後來查到才知道的

2.接下來就是對表格style的設計了,這個是整個代碼中佔最多空間的,我一般都是把它寫成一個文件來cfinclude的,對簡單的表格,也許就不需要了。
<cfset style = wb.createCellStyle()/>
<cfset font = wb.createFont()/> //新建字體樣式
<cfset font.setFontHeightInPoints(10)/> //新建字體大小
<cfset style.setFont(font)/> //字體style
<cfset style.setalignment(style.ALIGN_CENTER)> //水平方向的對齊
<cfset style1.setVerticalAlignment(style1.VERTICAL_CENTER)> //垂直方向的對齊
//下面是對邊框粗細的定義,這個是要對其上、下、左、右的定義的
<cfset style.setBorderBottom(style.BORDER_THIN)/>
<cfset style.setBorderLeft(style.BORDER_THIN)/>
<cfset style.setBorderRight(style.BORDER_THIN)/>
<cfset style.setBorderTop(style.BORDER_THIN)/>
//下面一樣的哦,就是對邊框的顔色
<cfset style.setBottomBorderColor(000000)>
<cfset style.setleftBorderColor(000000)>
<cfset style.setrightBorderColor(000000)>
<cfset style.settopBorderColor(000000)>
//還有很多的style設置,對於你們可以查詢相關的網站來尋找,也可以用cfdump來查詢

3.對整體表格設置樣式
<cfloop index="i" from="#firstrow#" to="#lastrow#">
<cfset row= newSheet.createRow(javacast("int",i))/>
<cfloop index="j" from="firstcell" to="lastcell">
<cfset cell= row.createCell(javacast("int",j))/>
<cfset cell.setcellstyle(style)>
</cfloop>
</cfloop>
//如果需要設置多種樣式,就要在前面定義好,在這調用哦!

4.到了正文部分了,其實如果你對poi熟悉的話,這個是件很容易的事,
先定義了行->再定義列->定義編碼->賦值

<cfset row= newSheet.createRow(0)/>
<cfset cell=row.createCell(0)/>
<cfset cell.setCellStyle(style)/>
<cfset cell.setencoding(cell.encoding_UTF_16)>
<cfset cell.setCellValue(javacast("string",cellvalue))/>
//下面的兩句話是進行合併單元格的設置,定義起始標記到最好一格的標記就可以了,
//需要注意的是excel的下標是從0開始的哦,如果是比較規則的表格就可以用循環跑,
如果是資料庫的數據的,可以把記錄集取出存入list或array,用循環跑。
<cfset region = createObject("java","org.apache.poi.hssf.util.Region").init(0,0,0,15)/>
<cfset newsheet.addMergedRegion(region)/>

5.最好到了結束的部分,需要對它生成文件

<cfset fileOut =
createObject("java","java.io.FileOutputStream").init("你需要存入的文件路徑和名稱")/>
<cfset wb.write(fileOut)/>
<cfset fileOut.close()/>
這個就是大體上生成excel文件的過程,其實這裡面不全面,很多poi的方法沒有辦法一一列出,
需要注意的是,賦值的時候一般會遇到格式轉換的問題,所以需要用到javacast()函數,
一般常用的類型為string,int,float三种,還有就是多用cfdump標簽,
一般遇到createSheet (returns org.apache.poi.hssf.usermodel.HSSFSheet)這樣的表示還有子方法繼承下去,
getNameName (returns java.lang.String)這樣的表述成輸出值,
setSheetOrder (returns void)這樣的就是可以對該方法調用,



文章来源:http://www.ljxt.com/blog/post/20.html



※以上~本版主尚未實際使用過>"<

沒有留言:

張貼留言