java 调用宏_通过java代码实现调用excel当中的宏的操作。

import org.junit.Assert;

import org.junit.Test;public classExcelToolsServiceTest {privateExcelToolsService service;

@Testpublic voidtestMacro() {try{

String path= "C:/Users/admin.admin-PC.000/Desktop/vb/合并的模板/合同模板.xlsm";

service = newExcelToolsService();

service.execMacro(path,"文本替换.生成文档");

}catch(Exception e) {

e.printStackTrace();

Assert.fail();

}

}

}

import com.jacob.activeX.ActiveXComponent;

import com.jacob.com.ComThread;

import com.jacob.com.Dispatch;

import com.jacob.com.Variant;

public class ExcelToolsService {

public void execMacro(String excelPath, String macroName, Variant... params) throws Exception {

ActiveXComponent excel = null;

Dispatch workbooks = null;

Dispatch workbook = null;

long start = System.currentTimeMillis();

System.out.println(start);

try {

ComThread.InitSTA();

excel = new ActiveXComponent("Excel.Application");

workbooks = excel.getProperty("Workbooks").toDispatch();

workbook = Dispatch.call(workbooks, "Open", excelPath).toDispatch();

if (null == params || params.length < 1) {

Dispatch.call(excel, "Run", new Variant(macroName));

} else {

Dispatch.call(excel, "Run", new Variant(macroName), params);

}

Dispatch.call(workbook, "Save");

} catch (Exception e) {

e.printStackTrace();

} finally {

if (null != workbook) {// 关闭文档

Dispatch.call(workbook, "Close", new Variant(false));

}

if (null != workbooks) {

Dispatch.call(workbooks, "Close");

}

if (null != excel) {

excel.invoke("Quit", new Variant[] {});

}

// 关闭Excel进程

ComThread.Release();

long end = System.currentTimeMillis();

System.out.println("处理文件[{}]宏[{}],共耗时{}s" + excelPath + macroName

+ ((end - start) / 1000 + 1));

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值