package com.zc.epe.common.util;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class TransferTool {
public static void els2pdf(String els,String pdf){
System.out.println("Starting excel...");
ComThread.InitSTA();
long start = System.currentTimeMillis();
ActiveXComponent app = new ActiveXComponent("Excel.Application");
try {
app.setProperty("Visible",false);
Dispatch workbooks = app.getProperty("Workbooks").toDispatch();
System.out.println("opening document:" + els);
Dispatch workbook = Dispatch.invoke(workbooks, "Open", Dispatch.Method,
new Object[]{els, new Variant(false),
new Variant(false)}, new int[3]).toDispatch();
Dispatch sheets = Dispatch.get(workbook,"Worksheets").toDispatch();
Dispatch.call(sheets, "Select");
Dispatch.invoke(workbook, "SaveAs", Dispatch.Method,
new Object[] {
pdf, new Variant(57), new Variant(false),
new Variant(57), new Variant(57), new Variant(false),
new Variant(true), new Variant(57), new Variant(true),
new Variant(true), new Variant(true) },
new int[1]);
Variant f = new Variant(false);
System.out.println("to pdf " + pdf);
Dispatch.call(workbook, "Close", f);
long end = System.currentTimeMillis();
System.out.println("completed..used:" + (end - start)/1000 + " s");
} catch (Exception e) {
System.out.println("========Error:Operation fail:" + e.getMessage());
}finally {
//删除生成的excel文件
//new File(els).delete();
if (app != null){
app.invoke("Quit", new Variant[] {});
}
}
ComThread.Release();
}
public static void main(String[] args) {
els2pdf("F:\\xx(20180119).xls","F:\\xxx(20180119).pdf");
}
}
关键代码见上面表黄色的部分
关键思路 :
jacob是用dll模拟vba代码操作excel,那么可以用vba的语法加上jacob的操作方式进行操作
具体语法参考别人的博客
jacob操作excel、word、AutoCAD分享_PeachShui的博客-CSDN博客
先选择sheet然后另存为,就绕过了对象参数设置(参数设置没看懂.找起来麻烦.).