使用jacob打印excel很简单,代码如下:
ActiveXComponent axc = null;
try {
ComThread.InitSTA();
axc = new ActiveXComponent("Excel.Application");
Dispatch.put(axc, "Visible", new Variant(false));
Dispatch workbooks = axc.getProperty("Workbooks").toDispatch();
Dispatch workbook = Dispatch.call(workbooks, "Open", fileFullPath,
new Integer(0), Boolean.FALSE).toDispatch();
Dispatch sheets = Dispatch.call(workbook, "Worksheets").toDispatch();
Dispatch sheet = Dispatch.call(sheets, "Item", new Integer(1))
.toDispatch();
Dispatch.call(sheet, "PrintOut", new Integer(beginPage), new Integer(endPage), new Integer(copys));
Dispatch.call(workbook, "Close", Variant.VT_FALSE);
} finally {
axc.invoke("Quit", new Variant[] {});
ComThread.Release();
}
然而,有时我们要设置纸张大小:
Dispatch pageSetup = Dispatch.call(sheet, "PageSetup").toDispatch();
Dispatch.put(pageSetup, "PaperSize", new Integer(8));//A3是8,A4是9,A5是11等等
哪个纸张大小对应哪个整数值呢?我们可以用如下的方法获取:
int ps = Dispatch.get(pageSetup, "PaperSize").toInt();
System.out.println("ps=" + ps);
然而,有时我们要设置页边距:
Dispatch.put(pageSetup, "LeftMargin", new Variant(left)); //左
Dispatch.put(pageSetup, "TopMargin", new Variant(top)); //上
Dispatch.put(pageSetup, "RightMargin", new Variant(right)); //右
Dispatch.put(pageSetup, "BottomMargin", new Variant(bottom)); //下
Dispatch.put(pageSetup, "HeaderMargin", new Variant(header)); //页眉
Dispatch.put(pageSetup, "FooterMargin", new Variant(footer)); //页脚
注left、top、right、bottom、header和footer是double类型的数值,并且如果单位是厘米的话,需乘以28.35。
然而,有时我们要想知道excel使用了多少行:
Dispatch userRange=Dispatch.call(sheet, "UsedRange").toDispatch();
Dispatch row=Dispatch.call(userRange, "Rows").toDispatch();
int rowCount=Dispatch.get(row,"Count").getInt();
System.out.println("rowCount=" + rowCount);
并在指定的行号上插入一空行:
Dispatch rowSheet = Dispatch.call(sheet, "Rows", new Variant(i)).toDispatch();//这里的i是行号,int类型
rowSheet.call(rowSheet, "Insert");
然而,有时我们要根据不同版本的excel做不同的处理,我们可以这样做:
System.out.println("version=" + axc.getProperty("Version"));
到目前为止,就研究了这么多了。