首页 > 解决方案 > 从 Java 运行 .vbs 文件

问题描述

我编写了一个 Java 程序,它创建了一个至少有 4 张工作表的 Excel 工作簿并在其中加载了一些 vb 模块(通过加载带有 vb 模块的 template.xlsm)现在我想将此 Excel 工作簿转换为 PDF,所以我有这段代码Excel 宏 VBA

Dim saveLocation As String
saveLocation = Application.ThisWorkbook.path
Dim ws As Worksheet
    For Each ws In Application.ThisWorkbook.Worksheets
        With ws.PageSetup
            .Zoom = False
            .FitToPagesWide = 1
            .FitToPagesTall = False
            .Orientation = xlLandscape
            .CenterVertically = True
            .CenterHorizontally = True
            .PaperSize = xlPaperTabloid
        End With
    Next
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:=saveLocation

End Sub 

我从 Excel VBA 执行它并且它工作正常但是,我想要的是在它被创建后直接从 Java 运行它所以我在编写 Excel 工作簿(用 Java)之后做了如下

我从 Java 将以下代码写入具有 VBS 扩展名 (module.vbs) 的文本文件

Sub ExcelMacro()
 Dim objExcel 
 Dim objWorkbook 
 Set objExcel = CreateObject("Excel.Application") 
 Set objWorkbook = objExcel.Workbooks.Open("PATH\Cost Sheet_233.xlsm")
 objExcel.Run "'Cost Sheet_233.xlsm'!Module3.SaveActiveSheetsAsPDF" 
 objWorkbook.Save 
 objWorkbook.Close 
 objExcel.Quit 
End Sub

然后我执行了以下命令

try {
 Runtime.getRuntime().exec( new String[] { "C:\\Windows\\System32\\wscript.exe", filePath + "\\module.vbs"} );
 }
catch (Exception ex) 
{
 ex.printStackTrace();
 }

输出是/应该是包含所有 Excel 工作表的 PDF 文件再次,当我从 Excel VBA 运行代码时,它工作正常。module.vbs 和宏中的一个都可以正常工作并生成 PDF 文件,但 Java exec 语句不是当然,路径也正确 100%(存在 wscript.exe)我也尝试了 cscript.exe 但是没用

可能是什么问题,或者我错过了什么?

标签: javaexcelvbapdfapache-poi

解决方案


我昨天问了这个问题后才知道。我尝试了其他方法来编写 .vbs 文件,当我从 Java 调用它时,以下方法似乎有效

Set objShell = CreateObject("WScript.Shell")
Dim cur
cur="Path"
WScript.Echo cur

ExcelMacroExample
Sub ExcelMacroExample()

    Dim xlApp
    Dim xlBook
    Dim xlsFile
    xlsFile=cur & "\Cost Sheet_274.xlsm"
    Set xlApp=CreateObject("Excel.Application")
    Set xlBook =xlApp.Workbooks.Open(xlsFile)
    xlApp.Run "SaveActiveSheetsAsPDF"
    xlBook.Save
    xlApp.Quit

End Sub

这是运行 .vbs 文件的 Java 代码

try {
  Runtime.getRuntime().exec(new String[] { "C:\\Windows\\System32\\wscript.exe", filePath + "\\module.vbs" });

} catch (Exception ex) {
  ex.printStackTrace();
}

推荐阅读