我想用VB.NET调用Microsoft Excel进行二次开发,下面是我调用Microsoft Excel的部分代码,已经将Microsoft Excel设置为默认应用,当电脑存在WPS时,还是会优先调用WPS中的Excel,我把WPS删除后才会调用Microsoft Excel,为什么WPS的优先级会比Microsoft Excel高,怎么解决?
(添加引用Microsoft Excel 16.0 Object Library)
Imports Microsoft.Office.Interop.Excel
Public ww As Microsoft.Office.Interop.Excel.Application '定义excel应用程序
Public wb As Microsoft.Office.Interop.Excel.Workbook '定义工作簿
Public ws As Microsoft.Office.Interop.Excel.Worksheet '定义工作表
ww = CreateObject("Excel.Application")
wb = ww.Workbooks.Open(strInputPath)'“strInputPath”是数据.xlsx文件的路径
wb.Close() '关闭工作簿
wb = Nothing
ww.Quit() '退出 Excel
ww = Nothing
不用WPS的Excel又是另一个问题,我打算用数组制图表,但不知道为什么用数组给坐标轴赋值会失效?如果WPS和Microsoft Excel都能使用就更好了
Dim Cht1
Cht1 = ws.ChartObjects.Add(0, 0, 350, 200)
With Cht1.Chart
.ChartType = 74 '折线散点图
.SeriesCollection.NewSeries
.SeriesCollection(1).Values = arrY'①
.SeriesCollection(1).XValues = arrX'②
'arrY,arrX为数组,调用WPS的Excel运行时①②无效,调用Microsoft Excel才成功运行
End With
Cht1 = Nothing
该回答引用ChatGPT:在VB.NET中,当系统中存在多个Excel应用程序时,可以通过以下代码来指定要使用的Excel应用程序:
Dim xlApp As Microsoft.Office.Interop.Excel.Application
xlApp = New Microsoft.Office.Interop.Excel.Application()
xlApp.Visible = True
此代码将创建一个新的Excel应用程序实例,并将其指定为要使用的应用程序。请确保正确设置了对“Microsoft Excel Object Library”或相应版本的引用。
如果使用的是CreateObject()函数,则系统将查找所有可用的Excel应用程序,并尝试打开它们。因此,如果电脑上同时安装了多个Excel应用程序,就可能出现调用不正确的Excel应用程序的情况。在这种情况下,建议使用New关键字来创建Excel应用程序实例,如上面的示例代码所示。
第二个问题可能与WPS和Microsoft Excel对VBA的支持程度有关。虽然VBA是一种广泛使用的宏语言,但是不同的Excel软件在VBA支持方面可能会有所不同,尤其是在新功能或操作中。
如果您使用的是WPS的Excel版本较旧,可能会发生无法使用数组给坐标轴赋值的情况。建议您更新到最新版本,以获得更好的VBA支持。
另外,您可以尝试使用其他方式来为坐标轴赋值。例如,您可以将数组数据写入工作表中的某些单元格,然后在代码中引用这些单元格作为坐标轴的值。这种方法可能会更兼容,因为它更符合Excel的常规操作方式。
wps有这么流氓么?抢占了word的prog id?
ww = CreateObject("Excel.Application")
这里如果不行,只能说引用下word class lirbary,然后 ww = new Microsoft.Excel.Application 了
会不会是WPS与Microsoft office冲突,安装WPS破坏了Microsoft office的com组件或导致office的注册表改变
您可以尝试使用ProgID(程序标识符)指定要使用的Excel版本,例如:
ww = CreateObject("Excel.Application.16")
其中,“16”代表您要使用的Excel版本,可以更改为您安装的实际版本号。
如果使用ProgID仍然无法解决问题,您可以尝试通过以下步骤更改文件关联设置以确保Microsoft Excel优先于WPS:
在Windows中打开“设置”应用程序。
点击“应用”。
点击“默认应用程序”。
点击“按应用程序设置默认值”。
找到WPS的Excel应用程序,并将其从默认应用程序列表中取消选择。
找到Microsoft Excel应用程序,并将其选中为默认应用程序。
关于数组给坐标轴赋值的问题,您可以尝试使用以下代码:
Dim Cht1
Cht1 = ws.ChartObjects.Add(0, 0, 350, 200)
With Cht1.Chart
.ChartType = 74 '折线散点图
.SeriesCollection.NewSeries
.SeriesCollection(1).Values = ww.Transpose(arrY)
.SeriesCollection(1).XValues = ww.Transpose(arrX)
End With
Cht1 = Nothing
在这里,我们使用了Excel应用程序对象ww的Transpose方法,将数组转置为垂直数组,这是Excel中常用的一种形式。这可能会解决您在WPS中遇到的问题。