VB.NET如何调用Microsoft Excel?(WPS存在时)

我想用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中打开“设置”应用程序。
点击“应用”。
点击“默认应用程序”。
点击“按应用程序设置默认值”。
找到WPSExcel应用程序,并将其从默认应用程序列表中取消选择。
找到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应用程序对象wwTranspose方法,将数组转置为垂直数组,这是Excel中常用的一种形式。这可能会解决您在WPS中遇到的问题。