【发布时间】:2021-10-22 11:05:01
【问题描述】:
我正在尝试从用户使用文件对话框选择的 Excel 文件中的 Vision 加载项中读取单个单元格值,然后在 Excel 中选择一个 Excel 单元格。
用户可以选择多个单元格的范围。但是我只会读取第一个单元格。
下面是VBA code from Visio Guy为VB.NET改编的。
我尝试了 Stackoverflow 上的答案 here 中给出的几种解决方案,不幸的是,这些解决方案给我带来了这些错误:
抛出异常:mscorlib.dll 中的“System.Reflection.TargetInvocationException” 抛出异常:mscorlib.dll 中的“System.Runtime.InteropServices.COMException” 抛出异常:Microsoft.Office.Tools.Common.Implementation.dll 中的“System.Reflection.TargetInvocationException”
为了测试,我确实添加了一个 Range.Copy(),它清楚地显示选择并复制了正确的 Range,如果我进行粘贴,则单元格内容显示为通过此处所示的代码选择的内容。
如何可靠地将所选 Excel 单元格中的 Excel 单元格值读取到 Visio 中?感谢您分享您的见解和经验!
Sub GetExcelCellValue()
Dim XlApp As Object
Dim XlWrkbook As Excel.Workbook
Dim XlSheet As Excel.Worksheet
Dim rng As Excel.Range
Dim docPath As String
docPath = Application.ActiveDocument.Path
XlApp = CreateObject("Excel.Application")
' msoFileDialogFilePicker = 3
With XlApp.FileDialog(3)
.Filters.Clear
.Filters.Add("Excel Files", "*.xls, *.xlsx, *.xlsm")
.InitialFileName = docPath
.Show
XlApp.Workbooks.Open(FileName:= .SelectedItems(1))
End With
XlWrkbook = XlApp.Workbooks(1)
XlSheet = XlWrkbook.Worksheets("Sheet1")
XlApp.Visible = True
rng = XlApp.InputBox("Select a single cell", "Obtain Range Object", Type:=8)
Dim FirstRow As String
Dim FirstCol As String
Dim FirstValue2 As String
FirstRow = rng.Row
FirstCol = rng.Column
rng.Copy()
'FirstValue2 = Convert.ToString(rng.Cells(FirstRow, FirstCol))
FirstValue2 = Convert.ToString(rng.Worksheet.Cells(FirstRow, FirstCol).Value2)
'Transfer Excel contents to Visio shapes on active page
MsgBox("This is the first cell: " & FirstValue2)
XlApp.Quit
End Sub
【问题讨论】:
-
在 Visio 中粘贴时希望发生什么?是否希望 Visio 中的 Excel 对象或 Excel 单元格的内容成为 Visio 中形状中的文本?
-
HappyMoose 是的,我正在寻找以字符串形式获取 Excel 单元格的内容,谢谢!
标签: .net excel vb.net vsto visio