锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 涓錛嶱OI綆浠?/strong> Jakarta POI 鏄痑pache鐨勫瓙欏圭洰錛岀洰鏍囨槸澶勭悊ole2瀵硅薄銆傚畠鎻愪緵浜嗕竴緇勬搷綰礧indows鏂囨。鐨凧ava API 鐩墠姣旇緝鎴愮啛鐨勬槸HSSF鎺ュ彛錛屽鐞哅S Excel錛?7-2002錛夊璞°傚畠涓嶈薄鎴戜滑浠呬粎鏄敤csv鐢熸垚鐨勬病鏈夋牸寮忕殑鍙互鐢盓xcel杞崲鐨勪笢瑗匡紝鑰屾槸鐪熸鐨凟xcel瀵硅薄錛屼綘鍙互鎺у埗涓浜涘睘鎬уsheet,cell絳夌瓑銆?/p>
浜岋紟HSSF姒傚喌 HSSF 鏄疕orrible SpreadSheet Format鐨勭緝鍐欙紝涔熷嵆“璁ㄥ帉鐨勭數瀛愯〃鏍兼牸寮?#8221;銆備篃璁窰SSF鐨勫悕瀛楁湁鐐規粦紼斤紝灝辨湰璐ㄨ岃█瀹冩槸涓涓潪甯鎬弗鑲冦佹瑙勭殑API銆傞氳繃HSSF錛屼綘鍙互鐢ㄧ函Java浠g爜鏉ヨ鍙栥佸啓鍏ャ佷慨鏀笶xcel鏂囦歡銆?/p>
HSSF 涓鴻鍙栨搷浣滄彁渚涗簡涓ょ被API錛歶sermodel鍜宔ventusermodel錛屽嵆“鐢ㄦ埛妯″瀷”鍜?#8220;浜嬩歡-鐢ㄦ埛妯″瀷”銆傚墠鑰呭緢濂界悊瑙o紝鍚庤呮瘮杈冩娊璞★紝浣嗘搷浣滄晥鐜囪楂樺緱澶氥?br />
1 錛?鍑嗗宸ヤ綔 瑕佹眰:JDK 1.4+POI寮鍙戝寘 鍙互鍒?http://www.apache.org/dyn/closer.cgi/jakarta/poi/ 鏈鏂扮殑POI宸ュ叿鍖?/p>
2 錛?EXCEL 緇撴瀯 HSSFWorkbook excell 鏂囨。瀵硅薄浠嬬粛 濡備綍璇籈xcel 璇誨彇Excel鏂囦歡鏃訛紝棣栧厛鐢熸垚涓涓狿OIFSFileSystem瀵硅薄錛岀敱POIFSFileSystem瀵硅薄鏋勯犱竴涓狧SSFWorkbook錛岃HSSFWorkbook瀵硅薄灝變唬琛ㄤ簡Excel鏂囨。銆備笅闈唬鐮佽鍙栦笂闈㈢敓鎴愮殑Excel鏂囦歡鍐欏叆鐨勬秷鎭瓧涓詫細 濡備綍鍐檈xcel錛?/p>
灝唀xcel鐨勭涓涓〃鍗曠涓琛岀殑絎竴涓崟鍏冩牸鐨勫煎啓鎴?#8220;a test”銆?/p>
4 錛?鍙弬鑰冩枃妗?/span> POI 涓婚〉錛歨ttp://jakarta.apache.org/poi/錛?/p>
鍒濆鑰呭浣曞揩閫熶笂鎵嬩嬌鐢≒OI HSSF http://jakarta.apache.org/poi/hssf/quick-guide.html 銆?/a> 浠g爜渚嬪瓙 http://blog.java-cn.com/user1/6749/archives/2005/18347.html 閲岄潰鏈夊緢澶氫緥瀛愪唬鐮侊紝鍙互寰堟柟渚夸笂鎵嬨?br />
POI鐨勪腑綰у簲璇ョ敤
]]>
涓夛紟寮濮嬬紪鐮?/strong>
HSSFSheet excell鐨勮〃鍗?br />
HSSFRow excell鐨勮
HSSFCell excell鐨勬牸瀛愬崟鍏?br />
HSSFFont excell瀛椾綋
HSSFName 鍚嶇О
HSSFDataFormat 鏃ユ湡鏍煎紡
鍦╬oi1.7涓墠鏈変互涓?欏癸細
HSSFHeader sheet澶?br />
HSSFFooter sheet灝?br />
鍜岃繖涓牱寮?br />
HSSFCellStyle cell鏍峰紡
杈呭姪鎿嶄綔鍖呮嫭
HSSFDateUtil 鏃ユ湡
HSSFPrintSetup 鎵撳嵃
HSSFErrorConstants 閿欒淇℃伅琛?br />
3 錛庡叿浣撶敤娉曞疄渚?錛堥噰鐢?usermodel 錛?/span>
1銆侀亶鍘唚orkbook
2銆佸緱鍒板垪鍜屽崟鍏冩牸
3銆佽緗畇heet鍚嶇О鍜屽崟鍏冩牸鍐呭涓轟腑鏂?/strong>
4銆佸崟鍏冩牸鍐呭鏈叕寮忔垨鏁板鹼紝鍙互榪欐牱璇誨啓
5銆佽緗垪瀹姐佽楂?/strong>
6銆佹坊鍔犲尯鍩燂紝鍚堝茍鍗曞厓鏍?/strong>
7銆佸父鐢ㄦ柟娉?/strong>
鏍規嵁鍗曞厓鏍間笉鍚屽睘鎬ц繑鍥炲瓧絎︿覆鏁板?br />
铏氱嚎HSSFCellStyle.BORDER_DOTTED
瀹炵嚎HSSFCellStyle.BORDER_THIN
11銆?/strong>璁劇疆鍒楄嚜鍔ㄦ崲琛?/p>
鍗曞厓鏍兼嫹璐濈ず渚嬶細
package testpoi; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFCell; 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; import org.apache.poi.poifs.filesystem.POIFSFileSystem; /** * 灝嗘煇SHEET欏典腑鐨勬煇鍑犺澶嶅埗鍒版煇SHEET欏電殑鏌愬嚑琛屼腑銆傛姳鎷鍚堝茍浜嗙殑鍗曞厓鏍箋?/p>
*/ public class RowCopy { /** * @param args * @throws IOException * @throws FileNotFoundException */ @SuppressWarnings("deprecation") public static void main(String[] args) { try { POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream( "d:\\exlsample.xls")); HSSFWorkbook wb = new HSSFWorkbook(fs); // source涓烘簮sheet 欏?target涓虹洰鏍噑heet欏?/p>
copyRows(wb, "source", "target", 5, 6, 20); FileOutputStream fileOut = new FileOutputStream("d:\\exlsample.xls"); wb.write(fileOut); fileOut.flush(); fileOut.close(); System.out.println("Operation finished"); } catch (Exception e) { e.printStackTrace(); } } /** * @param wb HSSFWorkbook * @param pSourceSheetName 婧恠heet欏靛悕縐?/p>
* @param pTargetSheetName 鐩爣sheet欏靛悕縐?/p>
* @param pStartRow 婧恠heet欏典腑鐨勮搗濮嬭 * @param pEndRow 婧恠heet欏典腑鐨勭粨鏉熻 * @param pPosition 鐩爣sheet欏典腑鐨勫紑濮嬭 */ public static void copyRows(HSSFWorkbook wb, String pSourceSheetName, String pTargetSheetName, int intStartRow, int intEndRow, int intPosition) { // EXECL涓殑琛屾槸浠?寮濮嬬殑錛岃孭OI涓槸浠?寮濮嬬殑錛屾墍浠ヨ繖閲岃鍑?. int pStartRow = intStartRow - 1; int pEndRow = intEndRow - 1; int pPosition = intPosition - 1; HSSFRow sourceRow = null; HSSFRow targetRow = null; HSSFCell sourceCell = null; HSSFCell targetCell = null; HSSFSheet sourceSheet = null; HSSFSheet targetSheet = null; Region region = null; int cType; int i; int j; int targetRowFrom; int targetRowTo; if ((pStartRow == -1) || (pEndRow == -1)) { return; } sourceSheet = wb.getSheet(pSourceSheetName); targetSheet = wb.getSheet(pTargetSheetName); System.out.println(sourceSheet.getNumMergedRegions()); // 鎷瘋礉鍚堝茍鐨勫崟鍏冩牸 for (i = 0; i < sourceSheet.getNumMergedRegions(); i++) { region = sourceSheet.getMergedRegionAt(i); if ((region.getRowFrom() >= pStartRow) && (region.getRowTo() <= pEndRow)) { targetRowFrom = region.getRowFrom() - pStartRow + pPosition; targetRowTo = region.getRowTo() - pStartRow + pPosition; region.setRowFrom(targetRowFrom); region.setRowTo(targetRowTo); targetSheet.addMergedRegion(region); } } // 璁劇疆鍒楀 for (i = pStartRow; i <= pEndRow; i++) { sourceRow = sourceSheet.getRow(i); if (sourceRow != null) { for (j = sourceRow.getLastCellNum(); j > sourceRow .getFirstCellNum(); j--) { targetSheet .setColumnWidth(j, sourceSheet.getColumnWidth(j)); targetSheet.setColumnHidden(j, false); } break; } } // 鎷瘋礉琛屽茍濉厖鏁版嵁 for (; i <= pEndRow; i++) { sourceRow = sourceSheet.getRow(i); if (sourceRow == null) { continue; } targetRow = targetSheet.createRow(i - pStartRow + pPosition); targetRow.setHeight(sourceRow.getHeight()); for (j = sourceRow.getFirstCellNum(); j < sourceRow .getPhysicalNumberOfCells(); j++) { sourceCell = sourceRow.getCell(j); if (sourceCell == null) { continue; } targetCell = targetRow.createCell(j); targetCell.setCellStyle(sourceCell.getCellStyle()); cType = sourceCell.getCellType(); targetCell.setCellType(cType); switch (cType) { case HSSFCell.CELL_TYPE_BOOLEAN: targetCell.setCellValue(sourceCell.getBooleanCellValue()); System.out.println("--------TYPE_BOOLEAN:" + targetCell.getBooleanCellValue()); break; case HSSFCell.CELL_TYPE_ERROR: targetCell .setCellErrorValue(sourceCell.getErrorCellValue()); System.out.println("--------TYPE_ERROR:" + targetCell.getErrorCellValue()); break; case HSSFCell.CELL_TYPE_FORMULA: // parseFormula榪欎釜鍑芥暟鐨勭敤閫斿湪鍚庨潰璇存槑 targetCell.setCellFormula(parseFormula(sourceCell .getCellFormula())); System.out.println("--------TYPE_FORMULA:" + targetCell.getCellFormula()); break; case HSSFCell.CELL_TYPE_NUMERIC: targetCell.setCellValue(sourceCell.getNumericCellValue()); System.out.println("--------TYPE_NUMERIC:" + targetCell.getNumericCellValue()); break; case HSSFCell.CELL_TYPE_STRING: targetCell .setCellValue(sourceCell.getRichStringCellValue()); System.out.println("--------TYPE_STRING:" + i + targetCell.getRichStringCellValue()); break; } } } } /** * POI瀵笶xcel鍏紡鐨勬敮鎸佹槸鐩稿綋濂界殑錛屼絾鏄湁涓涓棶棰橈紝濡傛灉鍏紡閲岄潰鐨勫嚱鏁頒笉甯﹀弬鏁幫紝姣斿now()鎴杢oday()錛?/p>
* 閭d箞浣犻氳繃getCellFormula()鍙栧嚭鏉ョ殑鍊煎氨鏄痭ow(ATTR(semiVolatile))鍜宼oday(ATTR(semiVolatile))錛?/p>
* 榪欐牱鐨勫煎啓鍏xcel鏄細鍑洪敊鐨勶紝榪欎篃鏄垜涓婇潰copyRow鐨勫嚱鏁板湪鍐欏叆鍏紡鍓嶈璋冪敤parseFormula鐨勫師鍥狅紝 * parseFormula榪欎釜鍑芥暟鐨勫姛鑳藉緢綆鍗曪紝灝辨槸鎶夾TTR(semiVolatile)鍒犳帀銆?/p>
* @param pPOIFormula * @return */ private static String parseFormula(String pPOIFormula) { final String cstReplaceString = "ATTR(semiVolatile)"; //$NON-NLS-1$ StringBuffer result = null; int index; result = new StringBuffer(); index = pPOIFormula.indexOf(cstReplaceString); if (index >= 0) { result.append(pPOIFormula.substring(0, index)); result.append(pPOIFormula.substring(index + cstReplaceString.length())); } else { result.append(pPOIFormula); } return result.toString(); } }