欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

POI使用和 研究

系統(tǒng) 1722 0

java生成EXCEL表格(POI vs JXL)

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

??? 后來因?yàn)樽鲰?xiàng)目的關(guān)系,知道了還有個(gè)JXL(java excel),也是個(gè)開源項(xiàng)目,用起來的感覺跟POI很類似,因?yàn)橛玫降墓δ芏己芎唵?,也沒覺得有什么大的差距。網(wǎng)上找了一些他們的區(qū)別,算是給自己掃盲了。

?

?????以下為轉(zhuǎn)貼,紅色為自己標(biāo)注。

?

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

?

1、遍歷workbook

Java代碼 復(fù)制代碼
  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. //?目標(biāo)文件 ??
  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) {
		。。。操作}
       }
     }
// 目標(biāo)文件
FileOutputStream fos = new FileOutputStream(objectPath);
//寫文件
swb.write(fos);
fos.close();
  



2、得到列和單元格

Java代碼 復(fù)制代碼
  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、設(shè)置sheet名稱和單元格內(nèi)容為中文

Java代碼 復(fù)制代碼
  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、單元格內(nèi)容未公式或數(shù)值,可以這樣讀寫

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




5、設(shè)置列寬、行高

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




6、添加區(qū)域,合并單元格

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



7、常用方法
根據(jù)單元格不同屬性返回字符串?dāng)?shù)值

Java代碼 復(fù)制代碼
  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
實(shí)線HSSFCellStyle.BORDER_THIN

Java代碼 復(fù)制代碼
  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、設(shè)置字體和內(nèi)容位置

Java代碼 復(fù)制代碼
  1. HSSFFont?f??=?wb.createFont(); ??
  2. f.setFontHeightInPoints(( short )? 11 ); //字號(hào) ??
  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); //單元格內(nèi)容的旋轉(zhuǎn)的角度 ??
  8. HSSFDataFormat?df?=?wb.createDataFormat(); ??
  9. style1.setDataFormat(df.getFormat( "0.00%" )); //設(shè)置單元格數(shù)據(jù)格式 ??
  10. cell.setCellFormula(string); //給單元格設(shè)公式 ??
  11. style.setRotation( short ?rotation); //單元格內(nèi)容的旋轉(zhuǎn)的角度 ??
  12. cell.setCellStyle(style);??
    HSSFFont f  = wb.createFont();
f.setFontHeightInPoints((short) 11);//字號(hào)
f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);//加粗
style.setFont(f);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中
style.setRotation(short rotation);//單元格內(nèi)容的旋轉(zhuǎn)的角度
HSSFDataFormat df = wb.createDataFormat();
style1.setDataFormat(df.getFormat("0.00%"));//設(shè)置單元格數(shù)據(jù)格式
cell.setCellFormula(string);//給單元格設(shè)公式
style.setRotation(short rotation);//單元格內(nèi)容的旋轉(zhuǎn)的角度
cell.setCellStyle(style);

  



10、插入圖片

論壇里看到的

Java代碼 復(fù)制代碼
  1. //先把讀進(jìn)來的圖片放到一個(gè)ByteArrayOutputStream中,以便產(chǎn)生ByteArray ??
  2. ??????ByteArrayOutputStream?byteArrayOut?=? new ?ByteArrayOutputStream(); ??
  3. ??????BufferedImage?bufferImg?=?ImageIO.read( new ?File( "ok.jpg" )); ??
  4. ??????ImageIO.write(bufferImg, "jpg" ,byteArrayOut); ??
  5. //讀進(jìn)一個(gè)excel模版 ??
  6. FileInputStream?fos?=? new ?FileInputStream(filePathName+ "/stencil.xlt" );? ??
  7. fs?=? new ?POIFSFileSystem(fos); ??
  8. //創(chuàng)建一個(gè)工作薄 ??
  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使用和 研究


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 一区二区三区四区在线播放 | 操你啦免费视频 | 日本成片 | 国内精品伊人久久久影视 | 色哦色哦哦色天天综合 | www一区二区 | 羞羞答答www网站进入 | 日韩三级网| 久久伊人中文字幕有码 | 日韩 欧美 国产 亚洲 中文 | 国产精品成人国产乱一区 | 精品国产一区二区三区久久影院 | 窝窝午夜精品一区二区 | 亚洲精品国产成人无码区A片 | 欧美ol丝袜高跟秘书在线播放 | 91高清免费 | 成年人在线观看视频网站 | 二区视频 | 欧美五月| 99久久视频 | 免费在线一区二区三区 | 欧美性狂猛bbbbbxxxxx | 在线麻豆视频 | 视频在线一区二区 | 国产一区网址 | 搜一级毛片 | 中国一级特黄真人毛片免费看 | 精品精品国产高清a毛片 | 日日摸夜夜添夜夜添aa | www.99色| 毛片毛片毛片毛片毛片毛片 | 日韩免费一区二区 | 亚洲成色www久久网站 | 乱码中文字幕人成在线 | 一区二区三区在线观看视频 | 亚洲一区二区三区在线免费观看 | 精品乱码 | 中文字幕av网 | 国产福利视频在线观看 | 十六以下岁女子毛片免费 | 亚洲日韩欧美综合 |