(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)判断文件是否存在如果存在则删除
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就是上面所得的)
for(int i=0;i
for(int j=0;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("Protect",
new Object[] {
});
注: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
//---------------------------------------------------------------- //源代码片段来自云代码http://yuncode.net