【问题标题】:Equivalent code of CreateObject in VB.netVB.net中CreateObject的等效代码
【发布时间】:2014-11-15 02:46:33
【问题描述】:

我正在尝试在 vb.net 中绑定/使用对象,例如 excel.application 等。 我主要是vb6 coder,现在转学vb.net。

在 vb6 中,我可以使用 createobject 函数轻松处理该问题

这是vb6代码:

Dim objXLS As Object
Dim objWorkBook As Object
Set objXLS = CreateObject("Excel.Application")
objXLS.Visible = False
Set objWorkBook = objXLS.Workbooks.Open("Excel File Goes Here")
objWorkBook.SaveAs strCurPath & "\Temp.csv", 6
objWorkBook.Close 2
objXLS.Quit
Set objWorkBook = Nothing
Set objXLS = Nothing

我查看了互联网,发现以下解决方案适用于 c#,但不适用于 .net。而且我无法在 vb.net 中使用动态类型/命令。

这是链接:

Equivalent code of CreateObject in C#

也有杂乱无章的方式..但我喜欢用简单的方式(标签绑定左右)

那么,在 vb.net 中使用动态密钥的任何方式或在 vb.net 中的等效项是什么?

【问题讨论】:

  • VB6 CreateObject 的等价物是...CreateObject。您将在 Microsoft.VisualBasic 命名空间中找到它。但是,您应该添加对 MS Excel 对象库的引用以确保强类型变量。
  • @Bjørn-RogerKringsjå,谢谢先生,但我不想使用 Microsoft.VisualBasic 命名空间,因为这不是他们正确学习 vb.net 的正确方法。我已经克服了许多没有该名称空间的问题,现在坚持下去。
  • 哈利路亚!你在正确的道路上。转到项目 > 添加参考 > com > Microsoft Excel(版本)对象库。如果找不到,请搜索并下载。
  • @Bjørn-RogerKringsjå,再次感谢先生,但请注意“Microsoft Excel(版本)对象”,为什么我没有添加直接引用,因为用户可能没有相同版本的 office/excel 库已安装:((可能是我错了)但是无论用户在他们的电脑上安装了什么版本,如何使用我的代码?
  • @user3614957 您似乎将Microsoft.VisualBasic 命名空间与Microsoft.VisualBasic.Compatibility 命名空间混淆了。您可能会避免使用后者,但前者是包含许多实际 VB 特性和功能的正确 VB。如果您打算避免这种情况,则最好避免将 VB 作为一种通用语言。

标签: c# .net vb.net object vb6


【解决方案1】:

VB.Net 方式,没有后期绑定,因为您可以直接从库中创建对象。使用 Marshal 类清理它们,因为其中有一个 COM 对象 - 以相反的顺序。

Dim objXLS As New Excel.Application
Dim objWorkBook As Excel.Workbook = objXLS.Workbooks.Open("Excel File Goes Here")
objXLS.Visible = False
'work with file
objWorkBook.SaveAs strCurPath & "\Temp.csv", 6
objWorkBook.Close 2
objXLS.Quit
Marshall.FinalReleaseComObject(objWorkBook)
Marshall.FinalReleaseComObject(objXLS)

【讨论】:

  • 我只会在 FinalRealeaseComObject 上给你 +1 ;)
  • @OneFineDay,谢谢先生,但我不喜欢使用这种方式,因为最终用户可能安装了也可能没有安装 excel。 (可能是我错了,但是如果没有安装 excel,我使用 createobject 函数并使用错误处理程序来启动)。
  • 我认为没有它CreateObject 也不会工作 - 所以你说它可以吗?
  • @OneFineDay,再次感谢先生,但是先生,有几个问题: 1. 我不认为 Excel.Application 作为 vb.net 中的新对象。我需要添加对 MS Excel 对象库的 COM 引用吗?如果是这样,那么:a) 我有版本 11 (Office 2003),但如果最终用户有 Office 2002/2007/2010 甚至 2013 怎么办? b) 如果我添加了 2003 版库,所有版本都可以正常工作吗? c) 如果最终用户根本没有 ms excel 怎么办?
  • 您需要研究哪个库与哪个版本的 excel 配套。如果用户没有 excel,它将无法工作 - 包装器怎么可能是引擎,所以它仍然需要基础。一旦库就位并导入命名空间,您将看到 Excel 及其类层次结构。
【解决方案2】:

除了一个格式异常,vbscript 和 VB6 代码将在 VB.NET 中运行。例外是所有方法和函数/子都需要括号(而不仅仅是返回值的)。所以 CreateObject 适用于 VBScript/VB6 和 VB.NET。在 VB.Net 中你需要有这些行才能使用 COM,

Imports System
Imports System.Runtime.InteropServices

CreateObject 使用 IDispatch(又名自动化)。你不需要知道一个对象是什么就可以使用它。

【讨论】:

    【解决方案3】:

    VB 中后期绑定的另一种选择(但您应该认真考虑已经给出的非后期绑定答案

    Dim objXLS As Object = System.Activator.CreateInstance(System.Type.GetTypeFromProgID("Excel.Application"))
    

    使用 CreateObject 或 CreateInstance,您需要“Option Strict Off”。

    【讨论】:

      猜你喜欢
      • 2012-11-23
      • 1970-01-01
      • 2013-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多