日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

POI教程

發布時間:2024/1/1 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POI教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

POI報表

--POIExcel交互

AURISOFT

第一章?POI簡介

--Jakata Poi HSSF:純javaExcel解決方案

在我們實際的開發中,表現層的解決方案雖然有多樣,但是IE瀏覽器已成為最多人使用的瀏覽器,因為大家都用Windows。在企業辦公系統中,常常有客戶這樣子要求:你要把我們的報表直接用Excel打開(電信系統、銀行系統)。或者是:我們已經習慣用Excel打印。

ApacheJakata項目的POI子項目,目前比較成熟的是HSSF接口,處理MSExcel對象。它不象我們僅僅是用csv生成的沒有格式的可以由Excel轉換的東西,而是真正的Excel對象,你可以控制一些屬性如sheet,cell等等。

首先,理解一下一個Excel的文件的組織形式,一個Excel文件對應于一個workbook(HSSFWorkbook),一個workbook可以有多個sheetHSSFSheet)組成,一個sheet是由多個rowHSSFRow)組成,一個row是由多個cellHSSFCell)組成。

POI可以到www.apache.org下載到。實際運行時,需要有poi包就可以了。HSSF提供給用戶使用的對象在rg.apache.poi.hssf.usermodel包中,主要部分包括Excel對象,樣式和格式,還有輔助操作。有以下幾種對象:

HSSFWorkbook excel的文檔對象

HSSFSheet excel的表單

HSSFRow excel的行

HSSFCell excel的格子單元

HSSFFont excel字體

HSSFDataFormat?日期格式

poi1.7中才有以下2項:

HSSFHeader sheet

HSSFFooter sheet尾(只有打印的時候才能看到效果)

和這個樣式

HSSFCellStyle cell樣式

輔助操作包括

HSSFDateUtil?日期

HSSFPrintSetup?打印

HSSFErrorConstants?錯誤信息表

以下可能需要使用到如下的類 ? ??
import org.apache.poi.hssf.usermodel.HSSFCell; ? ? ?
import org.apache.poi.hssf.usermodel.HSSFCellStyle; ? ? ?
import org.apache.poi.hssf.usermodel.HSSFDataFormat; ? ? ?
import org.apache.poi.hssf.usermodel.HSSFFont; ? ? ?
import org.apache.poi.hssf.usermodel.HSSFRow; ? ? ?
import org.apache.poi.hssf.usermodel.HSSFSheet; ? ? ?
import org.apache.poi.hssf.usermodel.HSSFWorkbook; ? ? ?
import org.apache.poi.hssf.util.HSSFColor;

先看poi的examples包中提供的最簡單的例子,建立一個空xls文件。?? ?

import?java.io.FileOutputStream; import?java.io.IOException; import?org.apache.poi.hssf.usermodel.HSSFWorkbook; public?class?ExcelSample1?{public?static?void?main(String[]?args)?throws?IOException?{//創建一個excel文件HSSFWorkbook?wb=?new?HSSFWorkbook();FileOutputStream?fileOut=?new?FileOutputStream("c:\\workbook.xls");//?FileOutputStream?fileOut=?new?FileOutputStream("c:/workbook.xls");wb.write(fileOut);fileOut.close();} }

?

?

通過這個例子,我們在c盤下建立的是一個空白的xls文件(不是空文件)。在此基礎上,我們可以進一步看其它的例子。?? ?

import?org.apache.poi.hssf.usermodel.*; import?java.io.FileOutputStream; import?java.io.IOException; public?class?CreateCells { public?static?void?main(String[]?args)?throws?IOException { HSSFWorkbook?wb?=?new?HSSFWorkbook();?//建立新HSSFWorkbook對象 HSSFSheet?sheet?=?wb.createSheet("new?sheet");?//建立新的sheet對象 HSSFRow?row?=?sheet.createRow((short)0); //在sheet里創建一行,參數為行號(第一行,此處可想象成數組) HSSFCell?cell?=?row.createCell((short)0);? //在row里建立新cell(單元格),參數為列號(第一列) cell.setCellvalue(1);?//設置cell的整數類型的值 row.createCell((short)1).setCellvalue(1.2);?//設置cell浮點類型的值 row.createCell((short)2).setCellvalue("test");?//設置cell字符類型的值 row.createCell((short)3).setCellvalue(true);?//設置cell布爾類型的值? HSSFCellStyle?cellStyle?=?wb.createCellStyle();?//建立新的cell樣式 cellStyle.setDataFormat(HSSFDataFormat.?getBuiltinFormat("m/d/yy?h:mm")); //設置cell樣式為定制的日期格式 HSSFCell?dCell?=row.createCell((short)4); dCell.setCellvalue(new?Date());?//設置cell為日期類型的值 dCell.setCellStyle(cellStyle);?//設置該cell日期的顯示格式 HSSFCell?csCell?=row.createCell((short)5); csCell.setEncoding(HSSFCell.ENCODING_UTF_16); //設置cell編碼解決中文高位字節截斷 csCell.setCellvalue("中文測試_Chinese?Words?Test");?//設置中西文結合字符串 row.createCell((short)6).setCellType(HSSFCell.CELL_TYPE_ERROR); //建立錯誤cell FileOutputStream?fileOut?=?new?FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); } }

?

通過這個例子,我們可以清楚的看到xls文件從大到小包括了HSSFWorkbook HSSFSheet HSSFRow HSSFCell這樣幾個對象。我們可以在cell中設置各種類型的值。 ? ??
尤其要注意的是如果你想正確的顯示非歐美的字符時,尤其象中日韓這樣的語言,必須設置編碼為16位的即是HSSFCell.ENCODING_UTF_16,才能保證字符的高8位不被截斷而引起編碼失真形成亂碼。 ? ??
其他測試可以通過參考examples包中的測試例子掌握poi的詳細用法,包括字體的設置,cell大小和低紋的設置等。需要注意的是POI是一個仍然在完善中的公開代碼的項目,所以有些功能正在不斷的擴充。

感覺上面的操作比較的繁瑣,然后就自己寫了一個方法。這個方法不需要事先創建rowcell,直接進行cteateCell就可以了,在程序中會自動進行判斷,如果不存在的話會創建。?? ?

private?static?void?cteateCell(HSSFWorkbook?wb,HSSFRow?row,short?col,short?align,String?val){ HSSFCell?cell?=?row.createCell(col); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(val); HSSFCellStyle?cellstyle?=?wb.createCellStyle(); cellstyle.setAlignment(align); cell.setCellStyle(cellstyle); }

?

對里面的幾個參數的說明:

short col?應該是你的cell單元格的位置也就是列號;

short align?應該是你的對齊方式;

String val?應該是你單元格里面要添加的值;

具體的調用如下:?? ?

HSSFRow?row?=?sheet.createRow((short)1); cteateCell(wb,row,(short)0,HSSFCellStyle.ALIGN_CENTER_SELECTION,"SampleID");

?

在上邊的例子里我們看到了要設置一個單元格里面信息的格式(例如,要將信息居中)設置的操作如下:?? ?

HSSFCellStyle?cellstyle?=?wb.createCellStyle(); cellstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION); cell.setCellStyle(cellstyle);

?

還有我們我們經常會用到的合并單元格,在這里我們也有這樣的操作,代碼如下:?? ?

sheet.addMergedRegion(new Region(1,(short)1,2,(short)4));

這里面我們還要介紹一個經常會遇到的問題,就是怎么來凍結一個窗口。poi也為我們集成了這樣的事情了。代碼如下:?? ?

sheet.createFreezePane(1,2);

?

l?在這里我們需要注意的是

一、?該方法是在一個具體的sheet里面來進行操作。

二、?方法createFreezepane;2個參數。前一個參數代表列;后一個參數代表行。

上邊的代碼對應的excel文件如下:

我么在畫面上看到了明顯的兩條黑線,這就是凍結的窗口。

然后我們來看一個完整的小例子,在這個例子里面我們要做的事情是要把數據庫里面的一張表,把他里面的數據導出到一個具體的Excel文件當中。首先,我們來做一個數據庫連接的bean?? ?

import?java.sql.Connection; import?java.sql.DriverManager; import?java.sql.ResultSet; import?java.sql.Statement; public?class?AA { public?static?void?main(String[]?args) { String?url?=?"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=master"; //為了方便測試,我連接的數據庫是master Connection?con?=?null; Statement?sta?=?null; ResultSet?res=null;? try?{ Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); con?=?DriverManager.getConnection(url,?"sa",?""); sta?=?con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);? res=sta.executeQuery("select?*?from?spt_values");? //查詢的是master面的一張表? }?catch?(Exception?e)?{ e.printStackTrace(); }? try { FixationExcel?fe=new?FixationExcel(); fe.createFixationSheet(res); //?createFixationSheet()方法要接收一個ResultSet類型的參數 fe.writeExcel("FirstExcel");? //此處的FirstExcel是你要生成的excel文件的名字? } catch(Exception?e) { System.out.println("AAAAAAAAAA"); e.printStackTrace(); }? System.out.println(""); } }

?

然后就是我們具體的FixationExcel這個類了,這里面寫的?? ?

import?java.io.FileOutputStream; import?java.sql.ResultSet; import?java.sql.SQLException; import?org.apache.poi.hssf.usermodel.HSSFCell; import?org.apache.poi.hssf.usermodel.HSSFCellStyle; import?org.apache.poi.hssf.usermodel.HSSFRow; import?org.apache.poi.hssf.usermodel.HSSFSheet; import?org.apache.poi.hssf.usermodel.HSSFWorkbook; import?org.apache.poi.hssf.util.Region; public?class?FixationExcel?implements?SuperExcel { private?HSSFWorkbook?wb=null; public?FixationExcel() { wb=new?HSSFWorkbook(); } public?void?createFixationSheet(ResultSet?res) { HSSFSheet?sheet=wb.createSheet("new?sheet"); wb.setSheetName(0,"Case-control",HSSFWorkbook.ENCODING_UTF_16); HSSFRow?row=sheet.createRow((short)0); sheet.createFreezePane(1,2); HSSFCell?cell=row.createCell((short)6); cell.setCellValue("SNP110"); HSSFCellStyle?cellstyle=wb.createCellStyle(); cellstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION); cell.setCellStyle(cellstyle); sheet.addMergedRegion(new?Region(0,(short)6,0,(short)7)); HSSFCell?cell1=row.createCell((short)8); cell1.setCellValue("SNP102"); cell1.setCellStyle(cellstyle); sheet.addMergedRegion(new?Region(0,(short)8,0,(short)9)); HSSFRow?row1=sheet.createRow((short)1); cteateCell(wb,row1,(short)0,HSSFCellStyle.ALIGN_CENTER_SELECTION, "SampleID"); cteateCell(wb,row1,(short)1,HSSFCellStyle.ALIGN_CENTER_SELECTION,"ID");?cteateCell(wb,row1,(short)2,HSSFCellStyle.ALIGN_CENTER_SELECTION,"PID");?cteateCell(wb,row1,(short)3,HSSFCellStyle.ALIGN_CENTER_SELECTION,"MID");?cteateCell(wb,row1,(short)4,HSSFCellStyle.ALIGN_CENTER_SELECTION,"Sex"); cteateCell(wb,row1,(short)5,HSSFCellStyle.ALIGN_CENTER_SELECTION,?"Status"); cteateCell(wb,row1,(short)6,HSSFCellStyle.ALIGN_CENTER_SELECTION,"A1-C");?cteateCell(wb,row1,(short)7,HSSFCellStyle.ALIGN_CENTER_SELECTION,"A1-T");?cteateCell(wb,row1,(short)8,HSSFCellStyle.ALIGN_CENTER_SELECTION,"A2-A");?cteateCell(wb,row1,(short)9,HSSFCellStyle.ALIGN_CENTER_SELECTION,"A2-G"); int?ii=0; try { int?i=1; ii=res.getMetaData().getColumnCount(); while(res.next()) { i++; HSSFRow?row2=sheet.createRow((short)i); for(int?j=0;j<ii;j++) { String?ss=""; if(res.getString(j+1)==null) ss="空?null"; else ss=res.getString(j+1); cteateCell(wb,row2,(short)j, HSSFCellStyle.ALIGN_CENTER_SELECTION,ss); } } }?catch(SQLException?e) { e.printStackTrace(); } } private?void?cteateCell(HSSFWorkbook?wb,HSSFRow?row,short?col,short?align, String?val) { HSSFCell?cell=row.createCell(col); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(val); HSSFCellStyle?cellstyle=wb.createCellStyle(); cellstyle.setAlignment(align); cell.setCellStyle(cellstyle); } public?void?writeExcel(String?filename)?throws?Exception { FileOutputStream?fileout=new?FileOutputStream(filename+".xls"); wb.write(fileout); fileout.flush(); fileout.close(); } }

?

總結

以上是生活随笔為你收集整理的POI教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。