Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 打开选项时获取Excel对象_Vb.net_Excel Interop - Fatal编程技术网

Vb.net 打开选项时获取Excel对象

Vb.net 打开选项时获取Excel对象,vb.net,excel-interop,Vb.net,Excel Interop,我从这个microsoft页面获得了以下代码 关闭选项后一切正常 当选择严格时,一切都不顺利 那么,如何解决选项严格时出现的错误呢 小心!我想从同一个excel实例中获取特定的excel文件。+1用于努力使用选项Strict On.) 但是,代码使用的是所谓的后期绑定,这要求您关闭选项Strict。但是,您可以通过创建新的代码文件并使用定义来包含需要后期绑定的代码,来最小化Option Strict Off的范围 您可能可以通过使用带有选项Strict On的VB来获得,但这会非常快,而

我从这个microsoft页面获得了以下代码

关闭选项后一切正常

当选择严格时,一切都不顺利

那么,如何解决选项严格时出现的错误呢


小心!我想从同一个excel实例中获取特定的excel文件。

+1用于努力使用选项Strict On.)

但是,代码使用的是所谓的后期绑定,这要求您关闭选项Strict。但是,您可以通过创建新的代码文件并使用定义来包含需要后期绑定的代码,来最小化Option Strict Off的范围

您可能可以通过使用带有选项Strict On的VB来获得,但这会非常快,而且可能非常慢

还有一种使用本机API的高级技术,称为COM反射,该技术应与Option Strict On一起使用。这项技术在文章:[基本本能-使用反射检查COM对象]。()

早期绑定(Option Strict On)的典型方法是添加对Excel主互操作程序集的引用。这种技术也有一些批评者,但迄今为止是最简单的方法


编辑:下面演示如何使用Excel PIA和早期绑定打开与OP原始代码直接类似的工作簿

Dim wbPath As String = "*** replace with path to your workbook ***"
Dim wb As Excel.Workbook = CType(GetObject(wbPath), Excel.Workbook)
'or 
'Dim wb As Excel.Workbook =  CType(Marshal.BindToMoniker(wbPath), Excel.Workbook)

Dim app As Excel.Application = wb.Application
app.Visible = True
wb.Windows(1).Visible = True

作为补充说明,如果您知道早期绑定是有效的,那么就不需要依赖
Interop.Excel
早期绑定。您可以将错误通知更改为警告,然后仍然编译并运行

' Imports Microsoft.Office.Interop.Excel

Dim fileName = "c:\vb\test.xls"   
If Not IO.File.Exists(fileName) Then MsgBox(fileName & " does not exist") : Exit Sub 

Dim obj = GetObject(fileName, "Excel.Application")
Dim wb = TryCast(obj, Workbook)

wb.Application.Visible = True 
wb.Windows(1).Visible = True 

@KramKramer,我添加了一个使用Excel PIA的示例。是否需要将Excel PIA安装到计算机上?Excel PIA是否得到Office 2007的支持?@KramKramer,签名的可再分发文件是Office安装过程的一部分,并安装在GAC中。您可以通过添加引用对话框的COM选项卡添加Microsoft Excel 12.0对象库(Excel 2007)来生成它们;我就是这样做的。如果您使用的是VS2010或更新版本,则所需的零件将自动嵌入到部件中。这就避免了在程序中打包外部DLL的需要。您说过“这种技术有一些缺点”。你认为我应该相信这个密码吗?@KramKramer,我应该对此进行扩展,因为这是我最讨厌的。一些人声称,使用PIA将您绑定到特定的Excel版本。这是错误的。他们认为Excel版本绑定实际上是对GAC中特定PIA版本的绑定。如果使用“将互操作库嵌入程序集”,则不会遇到此问题。这不是不信任编码技术的理由。
Dim wbPath As String = "*** replace with path to your workbook ***"
Dim wb As Excel.Workbook = CType(GetObject(wbPath), Excel.Workbook)
'or 
'Dim wb As Excel.Workbook =  CType(Marshal.BindToMoniker(wbPath), Excel.Workbook)

Dim app As Excel.Application = wb.Application
app.Visible = True
wb.Windows(1).Visible = True
' Imports Microsoft.Office.Interop.Excel

Dim fileName = "c:\vb\test.xls"   
If Not IO.File.Exists(fileName) Then MsgBox(fileName & " does not exist") : Exit Sub 

Dim obj = GetObject(fileName, "Excel.Application")
Dim wb = TryCast(obj, Workbook)

wb.Application.Visible = True 
wb.Windows(1).Visible = True