java - 从 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 但是没用
可能是什么问题,或者我错过了什么?
解决方案
我昨天问了这个问题后才知道。我尝试了其他方法来编写 .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();
}
推荐阅读
- unit-testing - 使用 javax.ws.rs.client 对 inputStream 进行 Java 编写测试
- vba - 使用 Internet Explorer 发表 YouTube 评论
- google-apps-script - 如何使谷歌电子表格的所有工作表在左上角显示 A1?
- msbuild - 无法使用 msbuild 进行 Web 部署,但可以使用 Visual Studio
- javascript - 无法解析对象数组
- python - 在OpenCV2中找到最接近图像中心的轮廓
- laravel - Laravel 中的可填充字段是否有可能被黑客入侵?
- javascript - 阅读文件后如何取消交易?
- python - 基于 facet 在 Seaborn FacetGrid 中自定义标题
- javascript - 使用 Redux 的私有路由