java exec 调用vbs_通过java调用VBS,再用VBS执行Excel中的宏的例子 | 学步园

本文介绍了如何通过Java使用`Runtime.getRuntime().exec()`调用VBS脚本来执行Excel宏。在VBS代码中,创建Excel应用程序对象并运行宏。在宏中,针对出现的系列翻倍问题,通过循环删除多余系列,然后重新设置系列名称和值,以确保正确显示数据。整个过程详细阐述了解决问题的思路和步骤。
摘要由CSDN通过智能技术生成

test.vbs文件中vb代码如下:

dim args

set args = wscript.arguments

Dim objXL

Set objXL = CreateObject("Excel.Application")

With objXL

.Workbooks.Open (args(0))

.Application.Run "Bar"

.ActiveWorkbook.Save

.Workbooks.Close

.Application.Quit

End With

Set objXL = Nothing

解释: args(0)是接收下表为0的参数,也就是第一个参数

.Application.Run "Bar"的 bar 是excel文件中宏的名称

java调用vb

Runtime.getRuntime().exec("cmd /c start f:/test.vbs f:/test.xls")

解释: 运行f盘下test.vbs文件,参数为f盘test.xls,在vb文件中.Workbooks.Open (args(0))读取的args(0)则是test.xls。

运行后发现有个问题,图表上会多出几个系列,如本来应该显示6个系列,但是图上却显示12个,翻倍的。由于对vb不熟,花了1天时间才搞明白,先看下边代码吧,这是excel中的宏,生成的图为柱状图:

Sub Bar(chartype As String, title As String)

ActiveSheet.Shapes.AddChart.Select

If chartype = "3D" Or chartype = "3d" Then

ActiveChart.ChartType = xl3DColumn

End If

If IsNull(title) Or IsEmpty(title) Then

Else

ActiveChart.HasTitle = True

ActiveChart.ChartTitle.Text = title

End If

Dim columnNum

columnNum = Range("A1").End(xlToRight).Columns.Column

‘下边 这个循环加上去以后就不会出现系列翻倍的问题了

For a = 1 To ActiveChart.SeriesCollection.Count

ActiveChart.SeriesCollection(1).Select

Selection.Delete

Next a

For i = 2 To columnNum

ActiveChart.SeriesCollection.NewSeries

ActiveChart.SeriesCollection(i - 1).Name = "=" & ActiveSheet.Name & "!$" & Chr(i + 64) & "$" & 1

ActiveChart.SeriesCollection(i - 1).Values = Range(Cells(2, i), Cells(Range(Chr(i + 64) & "2").End(xlDown).Row, i))

Next i

ActiveChart.SeriesCollection(columnNum - 1).XValues = Range(Cells(2, 1), Cells(Range("A2").End(xlDown).Row, 1))

End Sub

可能比较啰嗦,但是本人研究了一段时间才搞出来,网上比较难找

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值