1,下载jacob

https://github.com/freemansoft/jacob-project

下载最新版即可

2,本地配置

下载完成后,会得到这几个文件

jacob.jar可引入工程供调用

jacob-xxxxx.dll需放置对应的系统文件夹(C:\Windows\System32),32位系统放入x86.dll文件,64位系统放入x64.dll文件

3,代码调用

将jacob.jar引入工程后,即可开始使用,可直接导入下面的包装方法

public class JacobExcelTool {/*** Excel对象*/private ActiveXComponent xl = null;/*** 工作簿对象*/private Dispatch workbooks = null;/*** 具体工作簿*/private Dispatch workbook = null;/*** 获得sheets集合对象*/private Dispatch sheets = null;/*** 当前sheet*/private Dispatch currentSheet = null;public ActiveXComponent getXl() {return xl;}public Dispatch getWorkbooks() {return workbooks;}public Dispatch getWorkbook() {return workbook;}/*** 打开excel文件** @param filepath 文件路径名称* @param visible  是否显示打开* @param readonly 是否只读方式打开*/public void OpenExcel(String filepath, boolean visible, boolean readonly) {try {// 清空原始变量initComponents();//仅允许同时运行一个线程,其他线程锁住,ComThread.InitMTA(true);可同时运行多个ComThread.InitSTA();// Excel对象if (xl == null) {xl = new ActiveXComponent("Excel.Application");}// 设置是否显示打开excelxl.setProperty("Visible", new Variant(visible));// 工作簿对象if (workbooks == null) {workbooks = xl.getProperty("Workbooks").toDispatch();}// 打开具体工作簿workbook = Dispatch.invoke(workbooks, "Open", Dispatch.Method,new Object[]{filepath, new Variant(false), new Variant(readonly)},new int[1]).toDispatch();} catch (Exception e) {e.printStackTrace();releaseSource();}}/*** 工作簿另存为** @param filePath 另存为的路径*/public void SaveAs(String filePath) {Dispatch.invoke(workbook, "SaveAs", Dispatch.Method, new Object[]{filePath, new Variant(44)}, new int[1]);}/*** 关闭excel文档** @param f 含义不明 (关闭是否保存?默认false)*/public void CloseExcel(boolean f, boolean quitXl) {try {
//            Dispatch.call(workbook, "Save");Dispatch.call(workbook, "Close", new Variant(f));} catch (Exception e) {e.printStackTrace();} finally {if (quitXl) {releaseSource();}}}/*** 释放资源*/public void releaseSource() {if (xl != null) {xl.invoke("Quit", new Variant[]{});xl = null;}workbooks = null;ComThread.Release();System.gc();}/*** 添加新的工作表(sheet),(添加后为默认为当前激活的工作表)*/public Dispatch addSheet() {return Dispatch.get(Dispatch.get(workbook, "sheets").toDispatch(), "add").toDispatch();}/*** 修改当前工作表的名字** @param newName*/public void modifyCurrentSheetName(String newName) {Dispatch.put(getCurrentSheet(), "name", newName);}/*** 得到当前工作表的名字** @return*/public String getCurrentSheetName() {return Dispatch.get(getCurrentSheet(), "name").toString();}/*** 得到工作薄的名字** @return*/public String getWorkbookName() {if (workbook == null) {return null;}return Dispatch.get(workbook, "name").toString();}/*** 得到sheets的集合对象** @return*/public Dispatch getSheets() {if (sheets == null) {sheets = Dispatch.get(workbook, "sheets").toDispatch();}return sheets;}/*** 得到当前sheet** @return*/public Dispatch getCurrentSheet() {currentSheet = Dispatch.get(workbook, "ActiveSheet").toDispatch();return currentSheet;}/*** 通过工作表名字得到工作表** @param name sheetName* @return*/public Dispatch getSheetByName(String name) {return Dispatch.invoke(getSheets(), "Item", Dispatch.Get, new Object[]{name}, new int[1]).toDispatch();}/*** 通过工作表索引得到工作表(第一个工作簿index为1)** @param index* @return sheet对象*/public Dispatch getSheetByIndex(Integer index) {return Dispatch.invoke(getSheets(), "Item", Dispatch.Get, new Object[]{index}, new int[1]).toDispatch();}/*** 得到sheet的总数** @return*/public int getSheetCount() {int count = Dispatch.get(getSheets(), "count").toInt();return count;}/*** 调用excel宏** @param macroName 宏名*/public void callMacro(String macroName) {Dispatch.call(xl, "Run", new Variant(macroName));}/*** 调用excel宏** @param macroName 宏名* @param param     传递参数*/public void callMacro(String macroName, Object param) {Dispatch.call(xl, "Run", new Variant(macroName), new Variant(param));}/*** 单元格写入值** @param sheet    被操作的sheet* @param position 单元格位置,如:C1* @param type     值的属性 如:value* @param value*/public void setValue(Dispatch sheet, String position, String type, Object value) {Dispatch cell = Dispatch.invoke(sheet, "Range", Dispatch.Get, new Object[]{position}, new int[1]).toDispatch();Dispatch.put(cell, type, value);}/*** 单元格读取值** @param position 单元格位置,如: C1* @param sheet* @return*/public Variant getValue(String position, Dispatch sheet) {Dispatch cell = Dispatch.invoke(sheet, "Range", Dispatch.Get, new Object[]{position}, new int[1]).toDispatch();return Dispatch.get(cell, "Value");}/*** 清空原始变量*/private void initComponents() {workbook = null;currentSheet = null;sheets = null;}
}

其中重点介绍几个方法

单元格写入

/*** 单元格写入值** @param sheet    被操作的sheet* @param position 单元格位置,如:C1* @param type     值的属性 如:value* @param value*/
public void setValue(Dispatch sheet, String position, String type, Object value) {Dispatch cell = Dispatch.invoke(sheet, "Range", Dispatch.Get, new Object[]{position}, new int[1]).toDispatch();Dispatch.put(cell, type, value);
}

宏程序调用

/*** 调用excel宏** @param macroName 宏名*/
public void callMacro(String macroName) {Dispatch.call(xl, "Run", new Variant(macroName));
}

这套代码亲测有效,大家使用过程中有啥问题欢迎评论

jacob调用Excel VBA宏相关推荐

  1. Excel VBA 宏自动创建表格

    Excel VBA 宏 - 自动创建表格 应朋友的需求,编写了一个 VBA 宏,用于自动创建工作簿,实现了排版布局.冻结表头.条件格式.自动求和.单元格保护等功能. 分别创建了 4 个工作簿 1-12 ...

  2. python调用excel的宏_在 Excel 中使用 Python 开发宏脚本

    文 | varlemon 编辑 | EarlGrey 推荐 | 编程派公众号(ID:codingpy) 之前发文介绍过一个叫GridStudio的神器,可以在网页版应用中将 Python 与表格处理结 ...

  3. python调用excel的宏_Python – 运行Excel宏

    我想使用Python在Data.csv中的工作表上运行MacroBook.xlsm中包含的宏. 通常在excel中,我打开了两个文件并将焦点移到Data.csv文件并从MacroBook运行宏. py ...

  4. python调用excel的宏_Excel Python 调用Excel-ExcelVBA程序开发-ExcelHome技术论坛 -

    不知大家是否知道Python这一非常强大的脚本语言. 现在介绍通过它是如何操作Excel的. 首先,安装好Python后,需要下一个win32com的补丁.用Google搜一下就可以找到了. 具体操作 ...

  5. pywin32\win32com 运行 Word、Excel VBA宏最简单的方法

    简单粗暴:doc.Application.Run('批处理VBA') 高手应该看懂了,看不懂的,看下面代码: from win32com.client import Dispatch# 打开Word软 ...

  6. PYTHON 调用EXCEL VBA 函数:使用win32com模块

    import win32com.clientdef excel_VBA():xls=win32com.client.Dispatch('Excel.Application')xls.Workbooks ...

  7. JAVA利用Jacob将EXCEL转成PDF

    网上也有很多类似的文章,不过转成PDF后图片模糊的一塌糊涂,下面的代码经过改良 1.EXCEL中转换 成PDF后,其中图片也与手工操作转换一样 2.JACOB调用EXCEL后,在系统进程中不会留下EX ...

  8. 详解xlwings包,用Python代替Excel VBA

    详解xlwings包,用Python代替Excel VBA <代替VBA! 用Python轻松实现Excel编程>demo 主要内容 Python语法基础 Excel对象模型:OpenPy ...

  9. c调用python gensim包_Jupyter Notebooks嵌入Excel并使用Python替代VBA宏

    以前,Excel和Python Jupyter Notebook之间我们只能选择一个.但是现在随着PyXLL-Jupyter软件包的推出,可以将两者一起使用. 在本文中,我将向你展示如何设置在Exce ...

最新文章

  1. 利用Visio 2007图形化项目进度和项目跟踪
  2. Lua学习笔记(5): 表
  3. 出现警告defaultlib library conflicts with use of other libs; use /NODEFAULTLIB:library .
  4. viiv个人计算机,欢娱尽情 欢跃平台PC导购
  5. go学习笔记-运算符
  6. JavaScript常用算法 1
  7. 基于jAVAWeb停车场管理系统
  8. 服务器imm装系统,通过IMM With Remote Console为服务器安装操作系统
  9. duet display连接不上怎么办
  10. 用DIV+CSS技术设计的网上书城网页与实现制作(大一Web课程设计)
  11. 万能账号密码使用详解,黑客常用的入门级操作
  12. 数学概念: 导数和切线方程
  13. 数据科学家也良莠不齐 蹩脚数据科学家的10个迹象
  14. 天水市师院计算机系好吗,天水师范学院专业排名及介绍 哪些专业最好
  15. 马甲线怎么画?如何画出好看的腹肌?
  16. 微信小程序 老男孩课程(day1-2.5 到django不会了..要学Pythone)
  17. C语言中sort函数的用处
  18. 什么是web前端开发工程师?主要做什么的?
  19. 唱歌如何更好听? KTV调音师帮你忙
  20. 【2018-11-30】中证500指数的估值详情

热门文章

  1. 用python写一个聊天小程序!和女朋友的专属聊天工具!
  2. Oracle新建的用户看不到表,Oracle 创建用户及数据表的方法
  3. 传感与RFID在血液管理分析中运用
  4. C++ List的用法(整理)
  5. 如何下载hotspot源码
  6. 单片机怎么入门,发展前景如何?
  7. css实现文字、图片变大变小效果
  8. 【FICO】同client下不同公司代码之间复制会计科目
  9. python pip下载速度慢的解决方法
  10. 企业中台管理模式_中小企业的完整形式是什么?