【问题标题】:How to read an Excel cell value as string from a Visio add-in如何从 Visio 加载项中读取 Excel 单元格值作为字符串
【发布时间】: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


【解决方案1】:

粘贴到 Visio 会很困难,因为当您使 Excel 可见时,Visio 会失去焦点。但是,您可以轻松地将新形状添加到 Visio 中的活动页面,并将形状上的文本设置为您从第一个单元格中获得的文本:

Dim newShape As Visio.Shape

Set newShape = Visio.ActivePage.DrawRectangle(1, 1, 2, 0.5)
newShape.Text = FirstValue2

【讨论】:

  • 奇怪的是它与复制粘贴解决方案一起工作得很好,但是用你的方法 Jeremy,这更有意义,因为剪贴板无论如何都要慢得多,我仍然得到例外。
  • @DotNETAfficionado 您在哪一行得到异常?
猜你喜欢
  • 2012-05-23
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多