亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

POI使用和 研究

系統 1892 0

java生成EXCEL表格(POI vs JXL)

??? java生成excel表格,以前只知道POI,這是Apache的開源項目,本來是一套的,包括word,但是因為word的復雜性,以及開發人員的缺乏,好像基本停滯了。只有Excel做的還算比較完整,用起來比較輕松。

??? 后來因為做項目的關系,知道了還有個JXL(java excel),也是個開源項目,用起來的感覺跟POI很類似,因為用到的功能都很簡單,也沒覺得有什么大的差距。網上找了一些他們的區別,算是給自己掃盲了。

?

?????以下為轉貼,紅色為自己標注。

?

??? 自從 MS 公開了 OFFICE 的編碼格式以來,很多開源的組織都提供了對 Excel 支持讀寫操作的插件包。Java 世界里,Apache應該算是開源世界中的領頭羊。他的 Jakarta Project 中的 POI Project 就提供了對OFFICE的完美支持(不過最近好像他對Word的支持項目已經停止,而且公開在網站上圈人呢,如果你對Word文件的編碼格式非常熟悉,可以發封郵件哦!),當然除此之外,還有很多其他開源組織也對 Excel 的讀寫操作提供了很好的支持,其中簡單而且實用的便是 Display-tag ,程序員根本就不需要考慮如何將數據合理地寫入Excel中,這一切都是由其 Servlet 自動完成,但也正是由于他對程序員是透明的,因此為很多操作也帶來了不便。在接下來的文字中我會介紹另外一種同樣對Excel提供了完美支持的第三方插件 JXL ,Java Excel是一開放源碼項目,通過它Java開發人員可以讀取Excel文件的內容、創建新的Excel文件、更新已經存在的Excel文件。使用該API非Windows操作系統也可以通過純Java應用來處理Excel數據表。因為是使用Java編寫的,所以我們在Web應用中可以通過JSP、Servlet來調用API實現對Excel數據表的訪問。

?

1、遍歷workbook

Java代碼 復制代碼
  1. //?load源文件 ??
  2. POIFSFileSystem?fs?=? new ?POIFSFileSystem( new ?FileInputStream(filePath)); ??
  3. HSSFWorkbook?wb?=? new ?HSSFWorkbook(fs); ??
  4. for ?( int ?i?=? 0 ;?i?<?wb.getNumberOfSheets();?i++)?{ ??
  5. ????HSSFSheet?sheet?=?wb.getSheetAt(i); ??
  6. ???? for ?( int ?i?=?sheet.getFirstRowNum();?i?<?sheet.getLastRowNum();?i?++)?{ ??
  7. ????HSSFRow?row?=?sheet.getRow(i); ??
  8. ???????????? if ?(row?!=? null )?{ ??
  9. ????????。。。操作} ??
  10. ???????} ??
  11. ?????} ??
  12. //?目標文件 ??
  13. FileOutputStream?fos?=? new ?FileOutputStream(objectPath); ??
  14. //寫文件 ??
  15. swb.write(fos); ??
  16. fos.close();??
    // load源文件
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(filePath));
HSSFWorkbook wb = new HSSFWorkbook(fs);
for (int i = 0; i < wb.getNumberOfSheets(); i++) {
    HSSFSheet sheet = wb.getSheetAt(i);
    for (int i = sheet.getFirstRowNum(); i < sheet.getLastRowNum(); i ++) {
	HSSFRow row = sheet.getRow(i);
            if (row != null) {
		。。。操作}
       }
     }
// 目標文件
FileOutputStream fos = new FileOutputStream(objectPath);
//寫文件
swb.write(fos);
fos.close();
  



2、得到列和單元格

Java代碼 復制代碼
  1. HSSFRow?row?=?sheet.getRow(i); ??
  2. HSSFCell?cell?=?row.getCell(( short )?j);??
    HSSFRow row = sheet.getRow(i);
HSSFCell cell = row.getCell((short) j);
  



3、設置sheet名稱和單元格內容為中文

Java代碼 復制代碼
  1. wb.setSheetName(n,? "中文" ,HSSFCell.ENCODING_UTF_16);???? ??
  2. cell.setEncoding(( short )? 1 ); ??
  3. cell.setCellValue( "中文" );??
    wb.setSheetName(n, "中文",HSSFCell.ENCODING_UTF_16);    
cell.setEncoding((short) 1);
cell.setCellValue("中文");
  



4、單元格內容未公式或數值,可以這樣讀寫

Java代碼 復制代碼
  1. cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC); ??
  2. cell.getNumericCellValue()??
    cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
cell.getNumericCellValue()
  




5、設置列寬、行高

Java代碼 復制代碼
  1. sheet.setColumnWidth(( short )column,( short )width); ??
  2. row.setHeight(( short )height);??
    sheet.setColumnWidth((short)column,(short)width);
row.setHeight((short)height);
  




6、添加區域,合并單元格

Java代碼 復制代碼
  1. Region?region?=? new ?Region(( short )rowFrom,( short )columnFrom,( short )rowTo,( short )columnTo); ??
  2. sheet.addMergedRegion(region); ??
  3. //得到所有區域 ??
  4. sheet.getNumMergedRegions()??
    Region region = new Region((short)rowFrom,(short)columnFrom,(short)rowTo,(short)columnTo);
sheet.addMergedRegion(region);
//得到所有區域
sheet.getNumMergedRegions()
  



7、常用方法
根據單元格不同屬性返回字符串數值

Java代碼 復制代碼
  1. public ?String?getCellStringValue(HSSFCell?cell)?{ ??
  2. ????????String?cellValue?=? "" ; ??
  3. ???????? switch ?(cell.getCellType())?{ ??
  4. ???????? case ?HSSFCell.CELL_TYPE_STRING: ??
  5. ????????????cellValue?=?cell.getStringCellValue(); ??
  6. ???????????? if (cellValue.trim().equals( "" )||cellValue.trim().length()<= 0 ) ??
  7. ????????????????cellValue= "?" ; ??
  8. ???????????? break ; ??
  9. ???????? case ?HSSFCell.CELL_TYPE_NUMERIC: ??
  10. ????????????cellValue?=?String.valueOf(cell.getNumericCellValue()); ??
  11. ???????????? break ; ??
  12. ???????? case ?HSSFCell.CELL_TYPE_FORMULA: ??
  13. ????????????cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC); ??
  14. ????????????cellValue?=?String.valueOf(cell.getNumericCellValue()); ??
  15. ???????????? break ; ??
  16. ???????? case ?HSSFCell.CELL_TYPE_BLANK: ??
  17. ????????????cellValue= "?" ; ??
  18. ???????????? break ; ??
  19. ???????? case ?HSSFCell.CELL_TYPE_BOOLEAN: ??
  20. ???????????? break ; ??
  21. ???????? case ?HSSFCell.CELL_TYPE_ERROR: ??
  22. ???????????? break ; ??
  23. ???????? default : ??
  24. ???????????? break ; ??
  25. ????????} ??
  26. ???????? return ?cellValue; ??
  27. ????}??
    public String getCellStringValue(HSSFCell cell) {
		String cellValue = "";
		switch (cell.getCellType()) {
		case HSSFCell.CELL_TYPE_STRING:
			cellValue = cell.getStringCellValue();
			if(cellValue.trim().equals("")||cellValue.trim().length()<=0)
				cellValue=" ";
			break;
		case HSSFCell.CELL_TYPE_NUMERIC:
			cellValue = String.valueOf(cell.getNumericCellValue());
			break;
		case HSSFCell.CELL_TYPE_FORMULA:
			cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
			cellValue = String.valueOf(cell.getNumericCellValue());
			break;
		case HSSFCell.CELL_TYPE_BLANK:
			cellValue="?";
			break;
		case HSSFCell.CELL_TYPE_BOOLEAN:
			break;
		case HSSFCell.CELL_TYPE_ERROR:
			break;
		default:
			break;
		}
		return cellValue;
	}
  



8、常用單元格邊框格式


虛線HSSFCellStyle.BORDER_DOTTED
實線HSSFCellStyle.BORDER_THIN

Java代碼 復制代碼
  1. public ? static ?HSSFCellStyle?getCellStyle( short ?type) ??
  2. ????{??? ??
  3. ???????HSSFWorkbook?wb?=? new ?HSSFWorkbook(); ??
  4. ???????HSSFCellStyle?style?=?wb.createCellStyle(); ??
  5. ???????style.setBorderBottom(type); //下邊框? ??
  6. ????????style.setBorderLeft(type); //左邊框? ??
  7. ????????style.setBorderRight(type); //右邊框? ??
  8. ????????style.setBorderTop(type); //上邊框? ??
  9. ??????? return ?style; ??
  10. ????}??
    public static HSSFCellStyle getCellStyle(short type)
    {   
       HSSFWorkbook wb = new HSSFWorkbook();
       HSSFCellStyle style = wb.createCellStyle();
       style.setBorderBottom(type);//下邊框 
        style.setBorderLeft(type);//左邊框 
        style.setBorderRight(type);//右邊框 
        style.setBorderTop(type);//上邊框 
       return style;
    }
  



9、設置字體和內容位置

Java代碼 復制代碼
  1. HSSFFont?f??=?wb.createFont(); ??
  2. f.setFontHeightInPoints(( short )? 11 ); //字號 ??
  3. f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); //加粗 ??
  4. style.setFont(f); ??
  5. style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //左右居中 ??
  6. style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); //上下居中 ??
  7. style.setRotation( short ?rotation); //單元格內容的旋轉的角度 ??
  8. HSSFDataFormat?df?=?wb.createDataFormat(); ??
  9. style1.setDataFormat(df.getFormat( "0.00%" )); //設置單元格數據格式 ??
  10. cell.setCellFormula(string); //給單元格設公式 ??
  11. style.setRotation( short ?rotation); //單元格內容的旋轉的角度 ??
  12. cell.setCellStyle(style);??
    HSSFFont f  = wb.createFont();
f.setFontHeightInPoints((short) 11);//字號
f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);//加粗
style.setFont(f);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中
style.setRotation(short rotation);//單元格內容的旋轉的角度
HSSFDataFormat df = wb.createDataFormat();
style1.setDataFormat(df.getFormat("0.00%"));//設置單元格數據格式
cell.setCellFormula(string);//給單元格設公式
style.setRotation(short rotation);//單元格內容的旋轉的角度
cell.setCellStyle(style);

  



10、插入圖片

論壇里看到的

Java代碼 復制代碼
  1. //先把讀進來的圖片放到一個ByteArrayOutputStream中,以便產生ByteArray ??
  2. ??????ByteArrayOutputStream?byteArrayOut?=? new ?ByteArrayOutputStream(); ??
  3. ??????BufferedImage?bufferImg?=?ImageIO.read( new ?File( "ok.jpg" )); ??
  4. ??????ImageIO.write(bufferImg, "jpg" ,byteArrayOut); ??
  5. //讀進一個excel模版 ??
  6. FileInputStream?fos?=? new ?FileInputStream(filePathName+ "/stencil.xlt" );? ??
  7. fs?=? new ?POIFSFileSystem(fos); ??
  8. //創建一個工作薄 ??
  9. HSSFWorkbook?wb?=? new ?HSSFWorkbook(fs); ??
  10. HSSFSheet?sheet?=?wb.getSheetAt( 0 ); ??
  11. HSSFPatriarch?patriarch?=?sheet.createDrawingPatriarch(); ??
  12. HSSFClientAnchor?anchor?=? new ?HSSFClientAnchor( 0 , 0 , 1023 , 255 ,( short )? 0 , 0 ,( short ) 10 , 10 );????? ??
  13. patriarch.createPicture(anchor?,?wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));??

POI使用和 研究


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 九九在线免费视频 | 中文字幕亚洲综合久久2 | 老司机午夜免费影院 | 亚洲一级毛片 | 成人观看视频 | 不卡国产在线 | 精品视频在线播放 | 久久久免费精品视频 | 99视频精品全部国产盗摄视频 | 四虎永久免费最新在线 | 老妇毛片久久久久久久久 | 人人97| 99热久久这里只精品国产 | x8x8国产日韩欧美 | 成 人 免费 黄 色 视频 | 国产在线视频色综合 | 国内精品久久久久久 | 精品国产免费久久久久久婷婷 | 福利视频网站 | 中文字幕在线一区 | 99视频在线精品免费 | 欧洲a老妇女黄大片 | 九九手机视频 | 免费xxx| 亚洲综合一区二区 | 小h片在线播放 | 国产欧美亚洲精品第一区 | 欧美日韩免费在线视频 | 九九99九九视频在线观看 | 色狠狠婷婷97 | 国产麻豆精品aⅴ免费观看 国产麻豆精品hdvideoss | 成人免费动作大片黄在线 | www.中文字幕 | 天天视频免费入口 | 欧美特黄级乱色毛片 | 天天射天天舔 | 久久亚洲国产精品五月天婷 | 日本人的色道www免费一区 | 国产欧美日韩精品a在线观看 | 免费中文字幕在线 | 国产精品成人免费视频 |