淺談Java中利用JCOM實現仿Excel程式設計

vjvj110發表於2022-05-10

在JAVA中使用JCOM和JXL注意要點:   (1)在你的lib下要有jdom-1.0.jar,jxl-2.5.5.jar,jcom-2.2.4.jar,jcom.dll。   (2)要把jcom.dll同時放到你JDK的bin目錄下或者放到系統盤的windows下(推薦放到JDK的BIN下)   把上面的JAR包都放好後開始寫應用中的工具類(申明一下在JCOM中得到的都是IDispatch物件,以下還會丟擲一個JComException的異常)   (1)首先應該判斷一個傳進來的路徑是Word 或是 Excel 還是其他的東東。 if(path.endsWith(".doc")){ ...... }   注:如果是excel字尾是".xls";   (2)然後你要有兩個物件: ReleaseManager rm = new ReleaseManager(); IDispatch xlsApp=null;   注:ReleaseManager相當於一個容器,與你機器上的所有JCOM組建互動,根據你傳的引數他會去尋找你機器上的所有JCOM能操作的組建;   IDispatch 可以理解為一個物件,所有的東東都是物件;   (3)你要讓他知道你要和EXCEL互動你得這樣做 xlsApp = new IDispatch(rm, "Excel.Application");   (4)接著要得到一個Workbooks(工作薄) IDispatch excel = (IDispatch) xlsApp.get("Workbooks");  (5)設定當前物件是否可見 xlsApp.put("Visible", new java.lang.Boolean(false));   (6)得到工作薄以後要開啟 IDispatch workbook = (IDispatch) excel.method("open", new Object[] { FilePath(EXCEL存放的路徑) });   (7)判斷檔案是否存在如果存在則刪除 File f = new File(outPath); if (f.exists()) f.delete();   (8)將工作薄另存為 workbook.method("saveAs", new Object[] { outPath, new Integer(9) });   (9)獲得一個工作薄(workbook)下的所有工作表(Sheets) IDispatch sheets = (IDispatch) workbook.get("Sheets");  注:得到的是一個陣列;   (10)獲得工作表(Sheets)的總數 int sheetsCount = Integer.parseInt(sheets.get("Count").toString());   (11)得到每個工作表(Sheets)的名稱 for(int sheetInx=1;sheetInx <= sheetsCount;sheetInx ) { IDispatch sheet = (IDispatch) sheets.get("item", new Object[] { new Integer(sheetInx) }); String sheetName = sheet.get("name").toString(); }   注意:excel都是從1開始遍歷 而不是從0開始 所以for裡面有多種寫法看自己怎麼順手怎麼寫;   遍歷工作表除了傳索引還能傳工作表名稱:IDispatch sheet = ((IDispatch) sheets.get("item", new Object[] { sheetName }));   (12)獲得正在活動的工作表(sheet) IDispatch asheet = (IDispatch) xlsApp.get("ActiveSheet");   注:xlsApp是從ReleaseManager裡面獲得EXCEL物件的一個IDispatch物件   如果是獲得sheets要先獲得工作薄(Workbook)然後用工作薄(Workbook)獲得他下的所有工作表(sheets)   (13)獲得工作表裡面的所有行總數(6萬多行吧) IDispatch row = (IDispatch)cursheet.get("Rows"); int rows = Integer.parseInt(row.get("Count").toString());   (14)獲得工作表裡面的所有列總數(256列) IDispatch col = (IDispatch)sheet.get("Columns"); int cols = Integer.parseInt(col.get("Count").toString());   (15)獲得工作表裡面可視的所有行總數 IDispatch row = (IDispatch) ((IDispatch)cursheet.get("UsedRange")).get("Rows"); int rows = Integer.parseInt(row.get("Count").toString());   (16)獲得工作表裡面可視的所有列總數 IDispatch col = (IDispatch) ((IDispatch)cursheet.get("UsedRange")).get("Columns"); int cols = Integer.parseInt(col.get("Count").toString());   (17)獲得行列以後要獲得裡面的內容(這裡用的rows 和 cols就是上面所得的) String cellVal=""; String cellTxt=""; String hasFormula= ""; String cellFormula=""; for(int i=0;i<1rows;i ){="" for(int="" j="0;j<1cols;j" idispatch="" cells="(IDispatch)" cursheet.get("cells",="" new="" object[]="" {="" integer(i="" 1),new="" integer(j="" 1)="" });="" cellval="cells.get("value").toString();" celltxt="cells.get("text").toString();" hasformula="cells.get("HasFormula").toString();" cellformula="cells.get("FormulaR1C1").toString();" }=""   注:這個遍歷的時候也是從1開始;=""   cells.get("value")獲得的是浮點數格式="" 如果你輸入的是1,得到的會是1.0;=""   cells.get("text")獲得的是本身,你輸入什麼獲得的就是什麼;=""   cells.get("hasformula")判斷是否是公式,如果單元格里是公式則返回真(true),如果不是公式則返回假(false);=""   cells.get("formular1c1")獲得公式,獲得單元格里公式的內容;=""   (18)保護工作表="" asheet.method("protect",=""  password,="" java.lang.boolean(true),="" java.lang.boolean(true)=""   注:protect後有n多引數="" 第1--3個分別是="" password,drawingobjects,contects。=""   (19)解工作表保護="" asheet.method("unprotect",="" password="" });  (20)在finally裡面寫關閉="" if="" (xlsapp="" !="null)" ((idispatch)="" xlsapp.get("activeworkbook")).put("saved",="" java.lang.boolean(true));="" 儲存工作薄="" xlsapp.method("quit",="" null);="" quit="" 是關閉的是整個excel="" xlsapp="null;" rm.release();="" rm="null;"   (21)關閉根據情況也寫在finally="" 裡面="" workbook.method("close",=""   注:workbook.method("close",="" null);關閉的是workbook裡的工作表;=""   xlsapp.method("quit",="" null);關閉的是整個工作薄=""   注意:=""   關閉的時候一定要加上="" 就是releasemanager的例項="" 如果你開啟excel不加上面兩句的話在程式裡面還執行著excel.exe="" ----------------------------------------------------------------=""   如有不對請多多指教!!謝謝  查閱關於java的全部文件=""    在JAVA中使用JCOM和JXL注意要點:   (1)在你的lib下要有jdom-1.0.jar,jxl-2.5.5.jar,jcom-2.2.4.jar,jcom.dll。   (2)要把jcom.dll同時放到你JDK的bin目錄下或者放到系統盤的windows下(推薦放到JDK的BIN下)   把上面的JAR包都放好後開始寫應用中的工具類(申明一下在JCOM中得到的都是IDispatch物件,以下還會丟擲一個JComException的異常)   (1)首先應該判斷一個傳進來的路徑是Word 或是 Excel 還是其他的東東。 if(path.endsWith(".doc")){ ...... }   注:如果是excel字尾是".xls";   (2)然後你要有兩個物件: ReleaseManager rm = new ReleaseManager(); IDispatch xlsApp=null;   注:ReleaseManager相當於一個容器,與你機器上的所有JCOM組建互動,根據你傳的引數他會去尋找你機器上的所有JCOM能操作的組建;   IDispatch 可以理解為一個物件,所有的東東都是物件;   (3)你要讓他知道你要和EXCEL互動你得這樣做 xlsApp = new IDispatch(rm, "Excel.Application");   (4)接著要得到一個Workbooks(工作薄) IDispatch excel = (IDispatch) xlsApp.get("Workbooks");  (5)設定當前物件是否可見 xlsApp.put("Visible", new java.lang.Boolean(false));   (6)得到工作薄以後要開啟 IDispatch workbook = (IDispatch) excel.method("open", new Object[] { FilePath(EXCEL存放的路徑) });   (7)判斷檔案是否存在如果存在則刪除 File f = new File(outPath); if (f.exists()) f.delete();   (8)將工作薄另存為 workbook.method("saveAs", new Object[] { outPath, new Integer(9) });   (9)獲得一個工作薄(workbook)下的所有工作表(Sheets) IDispatch sheets = (IDispatch) workbook.get("Sheets");  注:得到的是一個陣列;   (10)獲得工作表(Sheets)的總數 int sheetsCount = Integer.parseInt(sheets.get("Count").toString());   (11)得到每個工作表(Sheets)的名稱 for(int sheetInx=1;sheetInx <= sheetsCount;sheetInx ) { IDispatch sheet = (IDispatch) sheets.get("item", new Object[] { new Integer(sheetInx) }); String sheetName = sheet.get("name").toString(); }   注意:excel都是從1開始遍歷 而不是從0開始 所以for裡面有多種寫法看自己怎麼順手怎麼寫;   遍歷工作表除了傳索引還能傳工作表名稱:IDispatch sheet = ((IDispatch) sheets.get("item", new Object[] { sheetName }));   (12)獲得正在活動的工作表(sheet) IDispatch asheet = (IDispatch) xlsApp.get("ActiveSheet");   注:xlsApp是從ReleaseManager裡面獲得EXCEL物件的一個IDispatch物件   如果是獲得sheets要先獲得工作薄(Workbook)然後用工作薄(Workbook)獲得他下的所有工作表(sheets)   (13)獲得工作表裡面的所有行總數(6萬多行吧) IDispatch row = (IDispatch)cursheet.get("Rows"); int rows = Integer.parseInt(row.get("Count").toString());   (14)獲得工作表裡面的所有列總數(256列) IDispatch col = (IDispatch)sheet.get("Columns"); int cols = Integer.parseInt(col.get("Count").toString());   (15)獲得工作表裡面可視的所有行總數 IDispatch row = (IDispatch) ((IDispatch)cursheet.get("UsedRange")).get("Rows"); int rows = Integer.parseInt(row.get("Count").toString());   (16)獲得工作表裡面可視的所有列總數 IDispatch col = (IDispatch) ((IDispatch)cursheet.get("UsedRange")).get("Columns"); int cols = Integer.parseInt(col.get("Count").toString());   (17)獲得行列以後要獲得裡面的內容(這裡用的rows 和 cols就是上面所得的) String cellVal=""; String cellTxt=""; String hasFormula= ""; String cellFormula=""; for(int i=0;i

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31495967/viewspace-2893164/,如需轉載,請註明出處,否則將追究法律責任。

相關文章