淺談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
- 淺談程式設計程式設計
- 淺談程式設計思想程式設計
- 淺談設計模式及python實現設計模式Python
- Java網路程式設計和NIO詳解7:淺談 Linux 中NIO Selector 的實現原理Java程式設計Linux
- Java網路程式設計和NIO詳解7:淺談Linux中NIOSelector的實現原理Java程式設計LinuxiOS
- 淺談非同步程式設計非同步程式設計
- 淺談Windows API程式設計WindowsAPI程式設計
- 淺談函數語言程式設計與 Java Stream函數程式設計Java
- 淺談Java 8的函數語言程式設計Java函數程式設計
- 淺談java之設計模式(1)Java設計模式
- 淺談Swift網路程式設計最佳實踐Swift程式設計
- 淺談Delpih中的windowsAPI程式設計初步(1)(轉)WindowsAPI程式設計
- 淺談許可權管理的設計與實現
- 淺談業務中臺前端設計前端
- 淺談Java、PHP、C++程式設計的優缺點JavaPHPC++程式設計
- 淺談程式設計正規化程式設計
- 淺談物件導向程式設計物件程式設計
- 淺談程式設計師創業程式設計師創業
- 淺談產品模型(Profile)在程式設計中的作用模型程式設計
- 淺談Node中module的實現原理
- 淺談雲巴實時通訊的程式設計模型程式設計模型
- 淺談PHP物件導向程式設計PHP物件程式設計
- 白板程式設計淺談——Why, What, How程式設計
- 淺談如何提高程式設計效率?程式設計
- 淺談PHP程式碼設計結構PHP
- 淺談Javascript物件導向程式設計JavaScript物件程式設計
- 【Java基礎】淺談常見設計模式Java設計模式
- 淺談java中的反射Java反射
- 淺談Java中的HashmapJavaHashMap
- 淺談軟體開發中的防禦式程式設計程式設計
- 淺談 TCP/IP 網路程式設計中 socket 的行為TCP程式設計
- 淺談:合格的Java程式設計師應該具備的能力Java程式設計師
- 談一談如何降低設計在實現中的損耗!
- 淺談程式設計師的“內卷化”程式設計師
- SpringBoot 非同步程式設計淺談Spring Boot非同步程式設計
- 談響應式web設計程式碼實現Web
- JAVA實現網路程式設計之併發程式設計Java程式設計