淺談Java中利用JCOM實現仿Excel程式設計
在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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 淺談VueUse設計與實現Vue
- Java網路程式設計和NIO詳解7:淺談 Linux 中NIO Selector 的實現原理Java程式設計Linux
- 淺談設計模式及python實現設計模式Python
- 淺談非同步程式設計非同步程式設計
- 淺談函數語言程式設計與 Java Stream函數程式設計Java
- 淺談java之設計模式(1)Java設計模式
- 淺談Java、PHP、C++程式設計的優缺點JavaPHPC++程式設計
- SpringBoot 非同步程式設計淺談Spring Boot非同步程式設計
- 淺談程式設計正規化程式設計
- 淺談許可權管理的設計與實現
- 淺談產品模型(Profile)在程式設計中的作用模型程式設計
- 淺談PHP物件導向程式設計PHP物件程式設計
- 淺談業務中臺前端設計前端
- 淺談:合格的Java程式設計師應該具備的能力Java程式設計師
- 淺談Node中module的實現原理
- 淺談軟體開發中的防禦式程式設計程式設計
- 淺談程式設計師的“內卷化”程式設計師
- 淺談java中的反射Java反射
- 淺談Java中的HashmapJavaHashMap
- 淺談C++物理設計:實用巨集C++
- 好程式設計師技術分享淺談JavaScript中的閉包程式設計師JavaScript
- 淺談高可用設計
- 淺談程式設計師職業生涯規劃程式設計師
- 淺談react diff實現React
- 淺談Laravel中的設計模式(三) Container 容器Laravel設計模式AI
- 淺談 SpringMVC 中各層職責的設計SpringMVC
- 利用swoole_process和eventloop實現php非同步程式設計OOPPHP非同步程式設計
- 談談Java常用類庫中的設計模式 - Part ⅠJava設計模式
- 淺談Innodb的鎖實現
- 深入淺出 Java 併發程式設計 (1)Java程式設計
- 深入淺出 Java 併發程式設計 (2)Java程式設計
- 使用Java實現多執行緒程式設計Java執行緒程式設計
- Socket程式設計入門(基於Java實現)程式設計Java
- 淺談分散式任務排程系統Celery的設計與實現分散式
- 淺談RASP技術攻防之實戰[程式碼實現篇]
- Java利用Scanner 加Swich實現計算器Java
- 淺談Java中的內部類Java
- 淺談java中的併發控制Java