使用VBA调用jar传递参数,并获取返回值

2023-05-16

目录

■VBA代码

■Java代码

■运行效果

Excel

Log效果 (通过VBA调用jar后,运行,生成的Log)

■课题

■课题原因(直接原因) 

●log4j的配置

■课题验证

■课题解决(其他 方式二 实现)

■另外一种方式启动执行jar (方式一:   RetVal = Shell(cmdStr))---无法获得返回值

■另外一种方式启动执行jar (方式二:WshShell对象 , Run方法)---可以获得返回值

■代码简介

WshShell对象 , Run方法,  详细介绍

■相关知识

1.Maven打包生成jar

2.log4J配置使用

3.Maven工程做成

4.使用Git,管理代码版本

■更多知识

1.Java知识整理

2.软件开发中使用单词

3.VBA操作相关内容整理


■VBA代码


Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)


Private Sub CommandButton1_Click()

 
    Dim cmdStr
    cmdStr = "java -jar G:\MyTool\VBA_Jar\jar\tool.jar " & """" & ActiveSheet.Range("C4").Value & """"
      
    Set WshShell = CreateObject("WScript.Shell")
    Set oExec = WshShell.Exec(cmdStr)
     
    Dim exitCode
    exitCode = oExec.exitCode
     
    Do While exitCode = 0
        
        Sleep 3000
        exitCode = oExec.exitCode
     
    Loop
     
    Set oStdOut = oExec.StdOut
    
    MsgBox "Return value is : " & exitCode

End Sub

■Java代码

package com.sxz.tool.moveResource;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class StartProcessRun {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		String input = "";
		
		if(args.length == 1){
			input= args[0];
		}
		
		log.info("hello:" + input);
		System.exit(666);

	}

}

■运行效果

Excel

 ===

Log效果 (通过VBA调用jar后,运行,生成的Log)

■课题

当java的处理内容多时,

会一直停留在命令行窗口界面,无法获得正常的返回值。

 强制终了后,返回值是【130】

■课题原因(直接原因) 

根本原因未知

直接原因是因为使用了log4j,(换成logback也有同样的问题。)

●log4j的配置

===

https://blog.csdn.net/sxzlc/article/details/124621551

===

■课题验证

在程序开始的时候,循环出力200次log,实际结果只能出力40次。

■课题解决(其他 方式二 实现)

但是为什么这种方式不行,另外一种方式启动执行jar(方式一)(无法获得返回值),可以正常结束。

另外一种方式启动执行jar (方式一:   RetVal = Shell(cmdStr))---无法获得返回值

按钮对应的函数


Private Sub CommandButton1_Click()

    Call callJar

End Sub

定义在模块中的方法

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandel As Long, ByVal dwMilliseconds As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal blnheritHandel As Long, ByVal dwProcessld As Long) As Long

Public Sub callJar()

    Dim cmdStr
    cmdStr = "java -jar G:\MyTool\VBA_Jar\jar\tool.jar " & """" & ActiveSheet.Range("C4").Value & """"
      
    RetVal = Shell(cmdStr)
    
    processId = OpenProcess(&H100000, False, RetVal)
    r = WaitForSingleObject(processId, -1&)
    r = CloseHandle(processId)

End Sub

另外一种方式启动执行jar (方式二:WshShell对象 , Run方法)---可以获得返回值

这种方式调用,可以获得返回值

不论是是 

    cmdStr = "java -jar G:\MyTool\VBA_Jar\jar\tool.jar " & """" & ActiveSheet.Range("C4").Value & """"

还是

    cmdStr = "cmd /c java -jar G:\MyTool\VBA_Jar\jar\tool.jar " & """" & ActiveSheet.Range("C4").Value & """"

都可以获得返回值

===

Private Sub CommandButton1_Click()
 
    Dim cmdStr
    cmdStr = "java -jar G:\MyTool\VBA_Jar\jar\tool.jar " & """" & ActiveSheet.Range("C4").Value & """"
      
    Set WshShell = CreateObject("WScript.Shell")
    
    Dim endCode As Integer
    endCode = WshShell.Run(cmdStr, True, True)
     
    MsgBox endCode
 
End Sub

■代码简介

===

Run的后两个参数,一个是cmd窗口的风格,一个是是否等待执行完成。



最后一个参数很有用,
如果你希望等待本次cmd执行的程序结束后,再执行run后面的语句,
设置这个参数为true,否则后面的语句将不等待cmd窗口完成,直接运行。


另外,如果你使用exec 方法的时候,
如果希望等待cmd中程序执行完后,再执行后面的语句
需要类似下面的代码
===
    Do While exitCode = 0
        
        Sleep 3000
        exitCode = oExec.exitCode
     
    Loop
===

===

 ===

WshShell对象 , Run方法,  详细介绍

   ' 虽然第二个参数是数字,但是写True也好用,空白时,令行窗口一闪而过,True时,不显示 
   endCode = WshShell.Run(cmdStr, True, True)

===

VBS
keywords: Run方法, WshShell对象
 
object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])

【参数】
object 
WshShell 对象。 
strCommand 
表示要运行的命令行的字符串值。包括要传递到可执行文件的所有参数。 
intWindowStyle 
可选。表示程序窗口外观的整数值。
请注意,并非所有程序都使用此信息。 
bWaitOnReturn 
可选。布尔值,表示在继续执行脚本中的下一条语句之前,脚本是否等待执行完程序。
如果设为 true,则在执行完程序后才执行脚本,Run 方法返回由程序返回的任何错误代码。
如果设为 false(默认值),则 Run 方法将自动在启动程序后立即返回 0(不是错误代码)。
 
【说明】
Run 方法返回一个整数。Run 方法启动在新 Windows 进程中运行的程序。
可以让脚本等到程序执行完后再继续执行。这允许您同步运行脚本和程序。
strCommand 参数内的环境变量自动扩展。
如果某个文件类型已正确注册到某个程序中,则对该类型的文件调用 Run 方法时将执行该程序。 例如,如果您的计算机系统中装有 Word,则对 *.doc 文件调用 Run 方法时将启动 Word 并加载该文档。
【intWindowStyle 说明 】
0 隐藏一个窗口并激活另一个窗口。 
1 激活并显示窗口。如果窗口处于最小化或最大化状态,则系统将其还原到原始大小和位置。第一次显示该窗口时,应用程序应指定此标志。 
2 激活窗口并将其显示为最小化窗口。 
3 激活窗口并将其显示为最大化窗口。 
4 按最近的窗口大小和位置显示窗口。活动窗口保持活动状态。 
5 激活窗口并按当前的大小和位置显示它。 
6 最小化指定的窗口,并按照 Z 顺序激活下一个顶部窗口。 
7 将窗口显示为最小化窗口。活动窗口保持活动状态。 
8 将窗口显示为当前状态。活动窗口保持活动状态。 
9 激活并显示窗口。如果窗口处于最小化或最大化状态,则系统将其还原到原始大小和位置。还原最小化窗口时,应用程序应指定此标志。 
10 根据启动应用程序的程序状态来设置显示状态。

===

■相关知识

1.Maven打包生成jar

POM 打包 Jar,指定Main方法的类,指定使用的JDK_sun0322的博客-CSDN博客_pom打包指定main

2.log4J配置使用

https://blog.csdn.net/sxzlc/article/details/124621551

3.Maven工程做成

Maven的Pom文件 ( Eclipse中创建Maven工程, 使用注意点,DevOps相关)_sun0322的博客-CSDN博客_eclipse的pom文件在哪

4.使用Git,管理代码版本

Eclipse中的Git使用之Branch创建,Merge_sun0322的博客-CSDN博客

■更多知识

1.Java知识整理

Java8新特性学习_001_(Lambda表达式,函数式接口,方法引用,Stream类,Optional类)_sun0322的博客-CSDN博客

2.软件开发中使用单词

工作中使用到的单词(软件开发)_sun0322的博客-CSDN博客_https://10.59.142.4/integration

3.VBA操作相关内容整理

VBA中 各种数据类型的使用(自定义数据类型Type,数组,数据字典)、读写文件_sun0322的博客-CSDN博客_vba中type类型

===

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用VBA调用jar传递参数,并获取返回值 的相关文章

  • java.util.concurrent同步框架(AQS论文中文翻译)

    java util concurrent同步框架 摘要目录和主题描述一般条款关键字1 介绍 xff1a 需求设计实现4 使用方式5 性能6 结论7 致谢 Doug Lea SUNY Oswego Oswego NY 13126 dl 64
  • POJ2287 田忌赛马---贪心算法

    田忌赛马 题目详见http poj org problem id 61 2287 田忌赛马大家都听过 xff0c 可是如果不是上中下三等马 xff0c 而是很多匹马 xff0c 优劣有很多种分类 xff0c 就不仅仅是321的问题了 这个很
  • 贪心算法详解

    之前讲过动态规划DP xff0c 现在来说说贪心 贪心算法在解决问题的策略上目光短浅 xff0c 只根据当前已有的信息就做出选择 xff0c 而且一旦做出了选择 xff0c 不管将来有什么结果 xff0c 这个选择都不会改变 也就是说贪心对
  • 搜索智能提示suggestion,附近点搜索

    第三十六 三十七章 搜索智能提示suggestion xff0c 附近地点搜索 作者 xff1a July 致谢 xff1a caopengcs 胡果果 时间 xff1a 二零一三年九月七日 题记 写博的近三年 xff0c 整理了太多太多的
  • 多重继承及虚继承中对象内存的分布

    多重继承及虚继承中对象内存的分布 这篇文章主要讲解G 43 43 编译器中虚继承的对象内存分布问题 xff0c 从中也引出了dynamic cast和static cast本质区别 虚函数表的格式等一些大部分C 43 43 程序员都似是而非
  • 【Google】25匹马的角逐

    问题是这样的 xff1a 一共有25匹马 xff0c 有一个赛场 xff0c 赛场有5个赛道 xff0c 就是说最多同时可以有5匹马一起比赛 假设每匹马都跑的很稳定 xff0c 不用任何其他工具 xff0c 只通过马与马之间的比赛 xff0
  • HDOJ 1058 Humble Numbers解题报告【DP】

    Humble Numbers 题目详见http acm hdu edu cn showproblem php pid 61 1058 开始拿到这个题目的时候还纠结了半天 xff0c 英语很差的话这个题是不可能AC的 而我就是其中之一 Hum
  • 背包问题详解

    背包问题 背包问题 Knapsack problem 是一种组合优化的NP完全问题 问题可以描述为 xff1a 给定一组物品 xff0c 每种物品都有自己的体积和价值 xff0c 在限定的总体积内 xff0c 我们如何选择 xff0c 才能
  • 楼教主男人必解八题之 Coins 解题报告

    楼教主男人必解八题之 Coins 解题报告 题目详见http acm hdu edu cn showproblem php pid 61 2844 这个题目和POJ1742是一个题目 xff0c 也是楼教主的男人八题之一 说的是给出N种硬币
  • CentOS7安装MySQL5.7过程以及常用需要修改操作,安装mysqlclient,安装mysql-devel报错问题以及卸载MySQL

    目录 Docker安装运行命令mysql配置 Centos安装下载安装启动修改root用户密码修改远程访问权限1 改表法2 授权法 MySQL密码验证mysqlclient时候报错 OSError mysql config not foun
  • 如何证明程序的正确性?

    什么样的程序才是正确的 xff1f 如何来保证程序是正确的 xff1f 测试 xff1f NO xff01 采用测试方法确实可以发现程序中的错误 xff0c 但却不能保证和证明程序中没有错误 xff01 先来看一些概念 xff0c 有关 程
  • 平摊分析

    平摊分析 我们经常在处理数据结构的时间复杂度的时候 xff0c 大多数操作代价很低 xff0c 可是由于某些个别操作的代价较高 xff0c 导致最后求得时间复杂度的上界不是那么的紧凑 在平摊分析中 xff0c 执行一系列数据结构操作所需要的
  • java中用FTPClient,执行到ftp.storeFile(fileName, inputFile);无反应

    package com aa test import cn hutool core util StrUtil import com nuctech platform tip constant TipConstant import lombo
  • SpringMVC拦截去之HandlerInterceptorAdapter的使用

    定义 HandlerInterceptorAdapter是SpringMVC中的拦截器 xff0c 它是用于拦截URL请求的 xff0c 主要是为了请求的预处理和后续处理 使用方法 编写代码 我们只需要自定义一个拦截器去继承HandlerI
  • EKF之雅克比矩阵(一)

    扩展卡尔曼滤波 EKF EKF之雅克比矩阵 文章目录 扩展卡尔曼滤波 EKF 前言一 什么是线性化 xff1f 二 雅克比矩阵1 矩阵的几何含义2 非线性矩阵与基底的关系3 雅克比矩阵 三 工程中雅克比矩阵如何应用总结 前言 一般的卡尔曼滤
  • Java数据结构与算法-程序员十大常用算法[day13]

    程序员十大常用算法 文章目录 程序员十大常用算法二分查找算法 非递归 分治算法分治算法最佳实践 汉诺塔 动态规划算法KMP算法KMP算法简介KMP实现 贪心算法普利姆算法克鲁斯卡尔算法分析克鲁斯卡尔算法分析 迪杰斯特拉算法弗洛伊德算法回溯算
  • SNMP测试

    SNMP测试 测试环境 xff1a Solaris10 10 10 128 89 Linux xff1a 10 10 151 8 windows 测试方案 xff1a 1 本地测试 2 远程测试 配置文件 xff1a 修改环境变量 在sol
  • apex编译错误解决方案

    这里写自定义目录标题 apex编译错误解决方案 csrc mlp cpp 123 3 note in expansion of macro AT DISPATCH FLOATING TYPES AND HALF AT DISPATCH FL
  • Javaweb项目实践MVC入门到精通

    Javaweb项目实践MVC入门到精通 目标配置环境实体模型 user Dao的实现实体模型 ModelViewController xff1a 转发任务 xff0c 路由器的功能安全sql注入常见问题 目标 这个目标是写一个MVC模型 通
  • C++ 铪铪铪铪 烫烫烫 屯屯屯

    VS中 xff0c Debug模式下 xff0c 对于未初始化的内存 xff1a 1 xff09 若为栈内存 xff0c 默认为一连串 烫烫烫 xff0c 0xcc 2 xff09 若为堆内存 xff0c 默认为一连串 屯屯屯 xff0c

随机推荐

  • git常用操作命令

    目录 git删除push到远程服务器的commit用户名和邮箱撤销add操作commit message写错了删除已经上传的文件添加文件追踪 git删除push到远程服务器的commit span class token comment 会
  • 魔方矩阵

    看到魔方矩阵 xff0c 好奇 xff0c 好玩儿 xff0c 正好赶上周五 xff0c 就来放松一下 xff0c 总结一下几种魔方矩阵的规律 xff0c 并写一下C 43 43 实现过程 定义 xff1a 平面魔方的一般定义 xff1a
  • 样条插值曲线类型及其优缺点说明

    Spline Types This page gives a breakdown of each spline type how to use each one and the advantages disadvantages of eac
  • caffe layer层详解

    1 基本的layer定义 xff0c 参数 1 基本的layer定义 xff0c 参数 如何利用caffe定义一个网络 xff0c 首先要了解caffe中的基本接口 xff0c 下面分别对五类layer进行介绍 Vision Layers
  • caffe编译中的python问题

    问题 usr include boost python detail wrap python hpp 50 23 fatal error pyconfig h No such file or directory 解决方案 make clea
  • latex图像注释位置

    latex图像注释的位置在左边 不知道谁把模板里的 usepackage caption 给注释掉了
  • pytorch pretrained model

    pytorch pretrained model two methods method 1 比较大小 self span class token punctuation span model span class token operato
  • nodejs之minimist中间件使用

    minimist是nodejs的命令行参数解析工具 xff0c 因其简单好用 xff0c 轻量等特性 xff0c 所以用户使用较多 特性 xff1a short options long options Boolean 和 Number类型
  • RNA-seq 保姆教程:差异表达分析(一)

    介绍 RNA seq 目前是测量细胞反应的最突出的方法之一 RNA seq 不仅能够分析样本之间基因表达的差异 xff0c 还可以发现新的亚型并分析 SNP 变异 本教程 1 将涵盖处理和分析差异基因表达数据的基本工作流程 xff0c 旨在
  • 腾讯、阿里云服务器安装java全流程(yum安装java超简单详细版)

    有些服务器中自带了java xff0c 但不是你想要的版本的话 xff0c 可以先卸载掉 xff0c 然后更换想要的ava版本 因为是有网环境 xff0c 可以使用yum安装 无网环境可以参考我写的另一篇文章 xff1a linux无网环境
  • 某个牛人做WINDOWS系统文件详解

    某个牛人做WINDOWS系统文件详解 超牛 很详细介绍WINDOWS系统文件用途 想各位保存一份以后说定会有用 A ACCESS CHM Windows帮助文件 ACCSTAT EXE 辅助状态指示器 ADVAPI32 DLL 高级Win3
  • Nginx 流量统计分析

    目录 程序简介输出结果环境程序要求例子代码 程序简介 通过分析nginx日志 xff0c 统计出nginx流量 xff08 统计nginx日志中 body bytes sent 字段 xff09 xff0c 能自定义时间间隔 xff0c 默
  • 融资租赁业务系统(财务中台)

    融资租赁业务系统 财务中台 产品白皮书 版本号 xff1a V1 1 李雷 微信号 xff1a yanan122914 平台概述 融资租赁财务中台产品是一套专门针对融资租赁行业设计的融资租赁财务统一解决方案 对租赁公司传统的大单回租 直租
  • Session详解,学习 Session对象一篇文章就够了

    目录 1 Session概述 2 Session原理 3 Session使用 3 1 获取Session 3 2 Session保存数据 3 3 Session获取数据 3 4 Session移除数据 4 Session与Request应用
  • spring框架--全面详解(学习笔记)

    目录 1 Spring是什么 2 Spring 框架特点 3 Spring体系结构 4 Spring开发环境搭建 5 spring中IOC和DI 6 Spring中bean的生命周期 7 Spring Bean作用域 8 spring注解开
  • Caused by: java.lang.NoClassDefFoundError: io/seata/spring/annotation/datasource/SeataDataSourceBean

    在使用Spring Boot整合Seata实现分布式事务的时候报了这个错 当时在pom xml引入的spring cloud alibaba dependencies依赖包是2 2 2 RELEASE lt dependency gt lt
  • setup maven plugin connection

    setup maven plugin connection discover and map eclipse plugins to maven plugin goal executions 今天在创建maven工程时遇到了一个问题 工程在创
  • qt生成的exe到指定路径加载DLL文件

    qt编译生成的exe程序在打包依赖文件后 xff0c 如果同时又有其他dll文件时 xff0c 目录会看起来非常杂乱 我们可以通过将依赖文件放到某个路径下 xff0c 让exe程序在指定路径下加载 xff0c 此时需要用到qt 的qt co
  • PowerShell格式化显示(Format-Table Format-List)

    格式化 Format Format Wide Format List 常用 xff0c 显示的更加详细 Format Table 常用 AutoSize xff08 让表格更加紧凑 xff09 Format Custom 例子 xff1a
  • 使用VBA调用jar传递参数,并获取返回值

    目录 VBA代码 Java代码 运行效果 Excel Log效果 xff08 通过VBA调用jar后 xff0c 运行 xff0c 生成的Log xff09 课题 课题原因 xff08 直接原因 xff09 log4j的配置 课题验证 课题