【问题标题】:Running .vbs file from Java从 Java 运行 .vbs 文件
【发布时间】:2021-08-27 05:43:54
【问题描述】:

我编写了一个 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 但没用

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

【问题讨论】:

  • Apache poi 在这里无法提供帮助,因为它不会以任何方式与ExcelWindows 操作系统交互。
  • 尝试从module.vbs 中删除SubEndSub 行或添加一行Call ExcelMacro()

标签: java excel vba pdf apache-poi


【解决方案1】:

我昨天问了这个问题后想通了。 我尝试了其他方法来编写 .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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多