<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    yxhxj2006

    常用鏈接

    統計

    最新評論

    POI操作Excel表格

    在我們實際的開發中,表現層的解決方案雖然有多樣,但是IE瀏覽器已成為最多人使用的瀏覽器,因為大家都用Windows。在企業辦公系統中,常常有客戶這樣子要求:你要把我們的報表直接用Excel打開(電信系統、銀行系統)。或者是:我們已經習慣用Excel打印。
    Apache的Jakata項目的POI子項目,目前比較成熟的是HSSF接口,處理MSExcel對象。它不象我們僅僅是用csv生成的沒有格式的可以由Excel轉換的東西,而是真正的Excel對象,你可以控制一些屬性如sheet,cell等等。
    首先,理解一下一個Excel的文件的組織形式,一個Excel文件對應于一個workbook(HSSFWorkbook),一個workbook可以有多個sheet(HSSFSheet)組成,一個sheet是由多個row(HSSFRow)組成,一個row是由多個cell(HSSFCell)組成。
    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是一個仍然在完善中的公開代碼的項目,所以有些功能正在不斷的擴充。
    感覺上面的操作比較的繁瑣,然后就自己寫了一個方法。這個方法不需要事先創建row和cell,直接進行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);
    λ 在這里我們需要注意的是
    一、該方法是在一個具體的sheet里面來進行操作。
    二、方法createFreezepane;有2個參數。前一個參數代表列;后一個參數代表行。
    上邊的代碼對應的excel文件如下:

    posted on 2012-08-09 16:45 奮斗成就男人 閱讀(936) 評論(1)  編輯  收藏 所屬分類: java

    評論

    # re: POI操作Excel表格[未登錄] 2015-09-09 15:43 不懂

    有一個問題實在是看不懂,在創建cell的時候;
    createCell((short)0)中的short的是干什么用的在這表示的是什么;為什么要在這個地方用short,不是表示具體的位置嗎,用坐標或者序號就好啊,求大神解答;  回復  更多評論   

    主站蜘蛛池模板: 亚洲国产精品免费视频| 黄色三级三级免费看| 久久99热精品免费观看动漫| 国产乱辈通伦影片在线播放亚洲 | 操美女视频免费网站| 亚洲国产欧美国产综合一区| 日韩免费无砖专区2020狼| 日韩a毛片免费观看| 亚洲午夜久久久久久噜噜噜| 成人爽a毛片免费| 亚洲欧洲国产综合| 成人免费无码大片a毛片| 亚洲AV一区二区三区四区| 免费a级毛片大学生免费观看| 成人免费观看男女羞羞视频| 亚洲宅男天堂在线观看无病毒| 中文无码日韩欧免费视频| 亚洲电影国产一区| 99久久免费国产精品特黄| 久久精品国产亚洲av瑜伽| 国产午夜亚洲精品国产成人小说| 久久er国产精品免费观看8| 亚洲国产精品第一区二区| 无码少妇一区二区浪潮免费| 美国毛片亚洲社区在线观看| 亚洲线精品一区二区三区影音先锋| 免费成人在线电影| 亚洲天堂2017无码中文| 免费中文字幕不卡视频| 99re免费99re在线视频手机版| 亚洲人成色99999在线观看| 亚洲男人天堂2020| 久久午夜夜伦鲁鲁片免费无码影视| 亚洲欧美第一成人网站7777 | 久久久亚洲欧洲日产国码aⅴ | 亚洲人成人网站在线观看| 三年片在线观看免费观看大全一| 国产成人亚洲综合网站不卡| 亚洲午夜精品一级在线播放放 | 国产一区二区三区免费看| 182tv免费视频在线观看|