- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 FSharp 的 Microsoft Office PIA。当我尝试像这样从 Microsoft Word 获取 SynonymInfo 时:
#r "Office.dll"
#r "Microsoft.Office.Interop.Word.dll"
open Microsoft.Office.Interop.Word
let application = ApplicationClass()
let synonymInfo = application.SynonymInfo("bracket")
let meaningList = synonymInfo.MeaningList :?> string[]
我遇到了这个异常:
System.InvalidCastException: Unable to cast object of type 'System.String[*]' to type 'System.String[]'.
是 COM 对象的转换导致的吗?我怎样才能正确转换这个? * 是元组吗?如果是这样 string[,] 也不起作用...
谢谢
最佳答案
Office 互操作返回一个数组,其中索引不是从 0 而是(可能)从 1(好旧的 Visual Basic 时代!)这就是类型 中的
.*
的含义字符串[*]
您甚至可以从 F# 创建这样的数组:
let array = System.Array.CreateInstance(typeof<int>, [| 10 |], [| 1 |])
不幸的是,Int32[*]
是与 Int32[]
不同的类型,因此转换失败:
// System.InvalidCastException: Unable to cast
// object of type 'System.Int32[*]' to type 'System.Int32[]'.
array :?> int[]
您需要以另一种方式将 1 索引数组中的数据转换为其他结构。我示例中的 array
类型实现了非泛型 IEnumerable
,因此您应该能够编写如下内容:
array |> Seq.cast<int> |> Array.ofSeq
如果您的情况下值的类型是obj
,您需要先将其转换为接口(interface):
(thing :?> IEnumerable) |> Seq.cast<string> |> Array.ofSeq
您还可以使用类似这样的方式获取包含索引值对的数组:
[| for i in array.GetLowerBound(0) .. array.GetUpperBound(0) ->
i, array.GetValue(i) :?> int |]
关于f# - FSharp 和 Microsoft Office PIA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36447260/
它可能只是在这里遗漏了一些东西,但是,当我为 Excel 互操作编写一些代码时,事情就是这样。 我添加了对 Excel Com 库的引用。 VS 创建一个 PIA - Microsoft.Office
在 .NET 远程处理中使用 PIA 有什么好处?我在一次采访中被问到这个问题,我的回答是关于 COM 对象的,但有人坚持认为它在使用 .NET 远程处理时在连接方面有好处,我搜索了网络,但我找不到
我构建了一个应用程序,它使用 COM Interop 生成 Excel。它在我和我们用户的计算机上运行良好:Office 2007、Windows XP SP2。现在我将其迁移到另一台机器上,Offi
首先,我的问题与 Is Office 2007 PIA deployment possible without Office 2007? 我还没有打算使用 PIA。理想情况下,IT 工程师希望在升级
我目前正在调查 TFS 2012 自动构建/构建代理 我的情况是: 构建 Office 2007 插件的遗留解决方案 测试构建 Controller 两个测试构建代理,一个在 Windows 7 和
我正在使用 Office 2007 PIA 并尝试从 x 个用户选择的文档中生成一个大文档。大多数这些文档可能是 word 文档,但我们希望支持任何文件类型。 文本文档在使用 InsertFile.
我有一个 C# 程序,它做了一些 Word 和 Excel 自动化,它使用了 Office 2003 Primary Interop Assemblies。我部署它的方式是将 Interops 包含在
我已经成功完成了与 MS Word 集成的 Windows 窗体应用程序 - 该应用程序写入 Word 模板中的合并字段。我使用 MS Word 2007 制作了该模板,但以兼容模式将其保存为 97-
我正在使用 FSharp 的 Microsoft Office PIA。当我尝试像这样从 Microsoft Word 获取 SynonymInfo 时: #r "Office.dll" #r "Mi
我目前正在开发一个 C# 项目,需要访问 Outlook。开发是在两台不同的机器上完成的,其中一台安装了 Office,另一台没有安装。我previously询问如何针对 Outlook com 对象
我正在使用 FSharp 的 Microsoft Office PIA。当我尝试像这样从 Microsoft Word 获取 SynonymInfo 时: #r "Office.dll" #r "Mi
我正在使用 Office PIA 将应用程序集成到 Word 中。 有多个 word 文档,当您打开它们时会运行一个宏。我的目标是锁定当前文档,但在宏运行之后。有没有办法做到这一点?认为这样的事情应该
我无法访问 .Count 的 Sheets 属性。我正在使用 Excel 互操作。我处于 Debug模式,我正在尝试这个: ?xlSheets.Count 这导致: (1) : error BC304
我正在为 Office 2010 创建插件,需要在安装时检测是否安装了 Office 2010 PIA。 我已经在 2003 年和 2007 年这样做了,但是找不到 2010 年的组件 ID 有谁知道
我看到了一些关于 Office 2007 PIAs 的其他问题。 , 特别是: Can you install Office 2007 PIA's without office? (3) Is Off
编辑: 看起来 Jon Skeet 有一些类似的问题:How does the C# compiler detect COM types? 如何获取主互操作程序集中给定接口(interface)的 C
我目前正在尝试在使用 Microsoft.Office.Interop dll 的 TeamCity 上构建。由于我安装了 Office,这将在本地构建并正常工作,但是当尝试在 TeamCity 上构
Office 2007 PIA 是否也需要安装 Office 2007? 我可以使用 VSTO 3.0 部署 Office 2007 PIA(不安装 Office 2007)吗? 编辑:我有一个生成
我的开发机器上有 Office 2007。我正在为带有 Office 2003 的客户服务器构建一个小型应用程序,该应用程序需要进行一些互操作。我的程序将在夜间批处理中作为计划任务运行。 无论我做什么
我一直在使用 Office 2007 PIA 在我的 C# 应用程序中运行 PowerPoint 文件。 我知道这需要在机器上安装 Office 2007。 我想知道,可以用 OpenOffice.o
我是一名优秀的程序员,十分优秀!