日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

POI使用和 研究

系統(tǒng) 1929 0

java生成EXCEL表格(POI vs JXL)

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

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

?

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

?

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

?

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. //寫(xiě)文件 ??
  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);
//寫(xiě)文件
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名稱(chēng)和單元格內(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ù)值,可以這樣讀寫(xiě)

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、常用單元格邊框格式


虛線(xiàn)HSSFCellStyle.BORDER_DOTTED
實(shí)線(xiàn)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)來(lái)的圖片放到一個(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

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 甘泉县| 富锦市| 嫩江县| 阜新| 大姚县| 永登县| 贡嘎县| 伊吾县| 色达县| 贵溪市| 江城| 惠水县| 建湖县| 旬阳县| 陈巴尔虎旗| 金昌市| 兴国县| 云南省| 浠水县| 军事| 惠安县| 于田县| 铁力市| 乐安县| 六枝特区| 白朗县| 玉溪市| 仲巴县| 绿春县| 南涧| 宜宾县| 丘北县| 班戈县| 乡城县| 池州市| 南汇区| 通渭县| 江门市| 逊克县| 翁源县| 乌兰察布市|