国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

淺談Java中利用JCOM實現仿Excel編程

2019-11-17 05:54:27
字體:
來源:轉載
供稿:網友
  在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<rows;i++){
for(int j=0;j<cols;j++){
IDispatch cells = (IDispatch) cursheet.get("Cells", new Object[] { new 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(" password, new java.lang.Boolean(true), new java.lang.Boolean(true)
});
  注:Protect后有N多參數 第1--3個分別是 password,DrawingObjects,Contects。

  (19)解工作表保護

asheet.method("Unprotect", new Object[] { password });
  (20)在finally里面寫關閉

if (xlsApp != null) {
((IDispatch) xlsApp.get("ActiveWorkbook")).put("Saved", new java.lang.Boolean(true)); //保存工作薄
xlsApp.method("quit", null); //quit 是關閉的是整個EXCEL
xlsApp = null;
}
rm.release();
rm = null;
  (21)關閉根據情況也寫在finally 里面

workbook.method("close", null);
xlsApp.method("quit", null);
xlsApp=null;
rm.release();
rm = null;
  注:workbook.method("close", null);關閉的是Workbook里的工作表;

  xlsApp.method("quit", null);關閉的是整個工作薄

  注重:

  關閉的時候一定要加上

//rm 就是ReleaseManager的實例
rm.release();
rm = null;
假如你打開EXCEL不加上面兩句的話在進程里面還運行著EXCEL.EXE
//----------------------------------------------------------------

  如有不對請多多指教!!謝謝



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江川县| 广东省| 星子县| 固阳县| 永安市| 屯留县| 兰州市| 娄底市| 读书| 平安县| 崇明县| 宁陵县| 岳阳市| 永平县| 曲松县| 武强县| 融水| 南涧| 青海省| 电白县| 洪雅县| 凤阳县| 大厂| 祥云县| 桂林市| 景洪市| 建昌县| 连江县| 博白县| 崇州市| 天镇县| 镇宁| 博客| 日喀则市| 绩溪县| 孝义市| 桃源县| 定结县| 志丹县| 吴桥县| 临沂市|