栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

目录

■VBA代码

■Java代码

■运行效果

Excel

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

■课题

■另外一种方式启动执行jar

■相关知识

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:MyToolVBA_Jarjartool.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的处理内容多时,

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

(【TODO】 尝试使用线程。)

也许和处理时间没有关系,程序中,sleep后,也能正常获取返回值。

或许和流处理有关, 强制终了后,返回值是【130】

程序中用到流的地方 文件MD5值的取得

MD5 与 Base64一起使用 加密,计算原理_sun0322的博客-CSDN博客_md5加密base64

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

■另外一种方式启动执行jar

按钮对应的函数

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:SunXuezhiMyToolVBA_Jarjartool.jar " & """" & ActiveSheet.Range("C4").Value & """"
      
    RetVal = Shell(cmdStr)
    
    processId = OpenProcess(&H100000, False, RetVal)
    r = WaitForSingleObject(processId, -1&)
    r = CloseHandle(processId)

End Sub

===

■相关知识

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类型

===

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/886310.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号