Excel 互操作:_Worksheet 还是 Worksheet?

2023-12-11

我目前正在撰写有关动态类型的文章,并给出了 Excel 互操作的示例。我以前几乎没有做过任何 Office 互操作,这表明了这一点。这MSDN Office 互操作教程对于 C# 4 使用_Worksheet界面,但还有一个Worksheet界面。我不知道有什么区别。

在我的极其简单的演示应用程序(如下所示)中,两者都可以正常工作 - 但如果最佳实践决定其中之一,我宁愿适当地使用它。

using System;
using System.Linq;
using Excel = Microsoft.Office.Interop.Excel;

class DynamicExcel
{
    static void Main()
    {
        var app = new Excel.Application { Visible = true };
        app.Workbooks.Add();

        // Can use Excel._Worksheet instead here. Which is better?
        Excel.Worksheet workSheet = app.ActiveSheet;

        Excel.Range start = workSheet.Cells[1, 1];
        Excel.Range end = workSheet.Cells[1, 20];
        workSheet.get_Range(start, end).Value2 = Enumerable.Range(1, 20)
                                                           .ToArray();
    }
}

我试图避免对 COM 或 Office 互操作性进行全面深入的研究,只是强调 C# 4 的新功能 - 但我不想做任何非常非常愚蠢的事情。

(上面的代码中也可能有一些非常非常愚蠢的东西,在这种情况下请让我知道。使用单独的开始/结束单元而不是仅仅“A1:T1”是故意的 - 更容易看出它确实是一个范围20 个细胞。其他任何情况都可能是偶然的。)

那么,我应该使用_Worksheet or Worksheet,为什么?


如果我没记错的话——我对此的记忆有点模糊,自从我拆开Excel PIA以来已经很长时间了——它是这样的。

事件本质上是对象在发生某事时调用的方法。在 .NET 中,事件是委托,简单明了。但在 COM 中,将一大堆事件回调组织到接口中是很常见的。因此,给定对象上有两个接口 - “传入”接口,您希望其他人调用您的方法,以及“传出”接口,您希望在事件发生时调用其他人的方法。

在非托管元数据(类型库)中,对于可创建对象,定义了三件事:传入接口、传出接口和组件类,它表示“我是一个可创建对象,它实现了此传入接口,并且输出接口”。

现在,当类型库自动转换为元数据时,遗憾的是,这些关系被保留了。如果有一个手工生成的 PIA,使类和接口更符合我们在托管世界中的期望,那就更好了,但遗憾的是,这并没有发生。因此,Office PIA 充满了这些看似奇怪的重复,其中每个可创建的对象似乎都有两个与之关联的接口,并且它们上有相同的东西。其中一个接口代表组件类的接口,其中之一代表该组件类的传入接口。

_Workbook 接口是工作簿组件类上的传入接口。 Workbook 接口是代表组件类本身的接口,因此继承自_Workbook。

长话短说,如果可以方便的话,我会使用 Workbook; _Workbook 是一些实现细节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Excel 互操作:_Worksheet 还是 Worksheet? 的相关文章

  • OpenGL纹理渲染与原始不匹配

    我正在尝试使用 OpenGL 渲染纹理 我用作测试的纹理是白色背景上的一堆黑色矩形 如下所示 然而 在渲染时 纹理似乎被复制并叠加在其自身之上多次 我使用以下方法设置场景 std string vertexSource ShaderLoad
  • C++ Singleton 类 getInstance (作为 java)[重复]

    这个问题在这里已经有答案了 可能的重复 谁能给我提供一份 C 中的 Singleton 示例吗 https stackoverflow com questions 270947 can any one provide me a sample
  • 使用 QTextCursor 选择一段文本

    使用 Qt 框架选择文本片段时遇到问题 例如 如果我有这个文件 没有时间休息 我想选择 ime for r 并从文档中删除这段文本 我应该如何使用 QTextCursor 来做到这一点 这是我的代码 QTextCursor cursor n
  • 将内核链接到 PTX 函数

    我可以使用 PTX 文件中包含的 PTX 函数作为外部设备函数 将其链接到另一个应调用该函数的 cu 文件吗 这是另一个问题CUDA 将内核链接在一起 https stackoverflow com questions 20636800 c
  • ObservableCollection 上的“Cascade”绑定,包含其他 ObservableCollection

    我有一个项目需要显示合同列表 Class Affaire 每个合约都有一个阶段列表 类别阶段 我使用绑定在 2 个不同的 ListView 中显示它们中的每一个 问题是当我从 ListView 中删除一个 Phase 时 显示 Phases
  • 在 C 中声明和初始化数组

    C 有没有办法先声明然后初始化数组 到目前为止 我一直在初始化一个这样的数组 int myArray SIZE 1 2 3 4 但我需要做这样的事情 int myArray SIZE myArray 1 2 3 4 在 C99 中 您可以使
  • CMake - 未定义参考

    我正在尝试将 gtest 包含到我的项目中 问题是我在 GTest 中收到未定义的引用错误 我正在尝试在 Gtest 中测试 Node 类 在节点的构造函数中 我使用类记录器 尽管我已将库记录器添加到 gtest target 中 但我仍然
  • F# 内联如何工作?

    对于 F 我的理解是您可以使用 inline 关键字在调用站点执行类型专门化 那是 val inline a gt b gt c when a or b static member a b gt c 约束条件是 a or b必须有一个静态成
  • 在 DefaultHttpContext 上使用 FeatureCollection 时,响应对象为 null

    我正在测试一些 net Core 中间件 并希望使用整个 asp net Core http 管道来运行中间件 而不是模拟它 问题是 当我使用特征集合时 不知何故 响应对象没有在 httpRequest 中设置 并且它在请求本身上是只读的
  • .NET 中 IEqualityComparer 中 GetHashCode 的作用是什么?

    我试图了解 IEqualityComparer 接口的 GetHashCode 方法的作用 下面的例子取自MSDN using System using System Collections Generic class Example st
  • 整数与双精度算术性能?

    我正在编写一个 C 类来使用整数执行 2D 可分离卷积 以获得比双对应更好的性能 问题是我没有获得真正的性能提升 这是 X 过滤器代码 对于 int 和 double 情况都有效 foreach pixel int value 0 for
  • “volatile void function( ... )” 做了什么?

    我见过从语法角度来看 C 函数中 volatile 关键字有多少种用法 https stackoverflow com questions 7643528 how many usage does volatile keyword have
  • 使用 for 循环创建链表

    这是我的结构 struct ListItem int data struct ListItem next 假设链表的第一个节点的 data 0 我想编写一个 for 循环来创建大小为 5 的链表 但我不知道如何工作 我尝试了以下方法 int
  • 如何从句柄确定进程是 32 位还是 64 位?

    如何从使用 OpenProcess 获取的进程句柄中获取信息 无论进程是 32 位还是 64 位 是的 IsWow64Process 毫无用处 令人烦恼 它的真正意思是 启用了 32 位模拟 如果您在 32 位操作系统上运行 则返回 fal
  • 在发送传出请求之前将新的 SoapClient 绑定到特定 IP 地址

    假设应用程序所在的计算机具有 SoapClient 具体来说 我正在使用 Microsoft Web Service3 Messaging SoapClient 它通过发送传出请求并获取 SoapEnvelope 作为回报 完善的流程 与远
  • 派生类的聚合初始化

    以下代码无法使用 Visual Studio2017 或在线 GDB 进行编译 我期望它能够编译 因为迭代器只是一个具有类型的类 并且它是从公共继承的 这是不允许的还是在 VS2017 中不起作用 template
  • 没有运算符“<<”与这些操作数匹配[重复]

    这个问题在这里已经有答案了 不知道发生了什么事 我查看了与此问题类似的其他帖子 但到目前为止没有解决方案有帮助 这是带有错误部分注释的代码 在某一时刻 它说 不起作用 而在代码的其余部分中 它说 include
  • Selenium WebDriver 在按钮单击事件上无法正常工作。这里有什么问题呢?

    I am using following code to scrape data from a website I have following interface 这是 HTML div class es content div
  • 为什么 32 位 .NET 进程的引用类型的最小大小为 12 字节

    我正在读专业 Net 性能 https rads stackoverflow com amzn click com 1430244585本书有关参考类型内部结构的部分 它提到 对于 32 位 net 进程 引用类型具有 4 字节的对象头和
  • 如果单元格以文本字符串开头...公式

    我有一个公式 用于检查单元格是否以文本 A 开头返回 拾取 B 代表收集 和 C 代表预付 但它似乎不能正常工作 A 和 C 均返回预付费 LOOKUP LEFT A1 A B C Pick Up Collect Prepaid 我不知道l

随机推荐

  • JavaScript 拖放

    我正在寻找有人解释如何在 javascript 中拖放 我想要一条水平线 其中包含一些可自定义的图像 我看过这些的在线教程 但发现它们很难使用 我建议您研究一下 Javascript 框架之一 我们用原型与剧本 您可以在 Scriptacu
  • 如何在android中加载BufferedImage?

    我要加载BufferedImage在我的应用程序中 为此我正在使用ImageIO但我越来越java lang NoClassDefFoundError BufferedImage tgtImg loadImage ImageD2 jpg p
  • Google Apps 脚本仅在一次迭代后就停止了

    我在谷歌应用程序脚本中有一个小函数 必须在 for 循环中执行一些操作 即我有 3 行 其中包含一些值 对于每一行 我必须更新一张表 但不幸的是 我不明白为什么 但在仅仅一个之后循环程序停止了 并且没有return声明 这是代码 funct
  • 在 SwiftUI 中根据浅色或深色模式更改按钮样式修饰符

    我想设置自定义buttonStyle明暗模式按钮的修饰符 如何根据浅色或深色模式更改buttonStyle Modifier 我想为浅色和深色模式的按钮设置自定义修饰符 这是我的按钮代码 Button action print button
  • 从 R 中的数据框创建词云

    我制作了一个示例数据框 我尝试从 项目 栏制作一个词云 Hours lt c 2 3 4 2 1 1 3 Project lt c a b b a c c c Period lt c 2014 11 22 2014 11 23 2014 1
  • Android ListActivity 基于对象状态的行颜色

    我有一个 ListActivity 显示列表中的一堆对象 我想根据 MonitorObject 中两个布尔值的状态更改行的背景和文本颜色 我需要扩展 ArrayAdapter 吗 如果是这样 代码示例将不胜感激 因为我已经尝试了几天但没有成
  • 带样式的自定义 WPF ListView(使用 DataTemplate) - 如何添加标题?

    我有以下代码 行的数据模板
  • 如何通过批处理文件并行读取两个文本文件?

    有没有一种简单且性能良好的方法来并行读取两个 甚至更多 文本文件 因此 有一个循环在每次迭代中读取每个文本文件的一行 A for F不能使用给定多个文件的循环 因为它会依次读取文件 当然 嵌套的这样的循环也没有意义 诀窍是使用STDIN 重
  • iOS 中的语音输出

    是否可以访问用于辅助功能的 iOS 语音合成功能 这是一个使用的示例AVSpeechSynthesizer在 iOS 7 上 AVSpeechSynthesizer synthesizer AVSpeechSynthesizer alloc
  • Rails 检测请求是否为 AJAX

    在我的操作中 我希望仅在从 AJAX 请求调用时才响应处理 我该如何检查 我想做这样的事情 def action model Model find params id respond to do format if wasAJAXReque
  • Vue Getter & Setter 而不是后端响应中的实际值

    我是 Vue 新手 我很难理解为什么我的问题会发生 当我调用后端来检索一些数据时 响应如下 id Getter Setter name Getter Setter season Getter Setter number Getter Set
  • 使用 OpsHub 工具从本地 TFS 迁移到在线 TFS 速度缓慢

    我们有一个 50GB 的本地 TFS 集合 我们希望将其迁移到在线 TFS 我们现在使用 OpsHub Visual Studio Online Migration Utility 进行测试 一些单独的测试项目的转换似乎工作正常 因此现在我
  • Boost 的 lexical_cast 从双精度到字符串精度

    我正在使用一个不幸使用的库boost lexical cast从 a 转换double to a string 我需要能够明确地反映我这边的行为 但我希望这样做而不传播boost 我可以使用以下方法保证相同的行为吗to string spr
  • 通过 OAuth 对 Google API 进行身份验证调用时遇到问题

    当我尝试使用服务器到服务器身份验证调用 Google Directory API 时 收到错误消息 未授权访问此资源 api 我做了什么 在 Google Developers Console 中创建了一个应用程序 下载私钥并查找服务帐户名
  • 如何使用外部 jar 文件为 java 制作 makefile

    我需要制作一个 makefile 用外部 jar 文件编译和执行我的类 我有4节课 sync java FileSynchroniser java DirectoryTracer java and SyncFileTracer java 我
  • 具有自动内存清理功能的图像下载器

    我有一个项目列表 简单的列表框 其中包含主从基础上的图像 如果用户单击列表项目 则会打开详细信息页面 我遇到了非常著名的图像内存泄漏问题 描述here here here and here 一种可能的方法是遍历所有图像当导航自并清洁它们 I
  • 是否可以在 WindowButtonMotionFcn 中使用多个回调?

    我创建了一个类 为构造中的图形添加功能 这个类创建一个监听器WindowMouseMotion事件 但是 为了触发此事件 我必须为该图添加一个虚拟回调函数WindowButtonMotionFcn财产 我首先检查该属性是否已填充 如果不是
  • Java 泛型和泛型类型

    我有一个 ExtA 类 其中包含一个过滤函数来过滤 ArrayList public ExtA
  • leaflet 插件和 leafletProxy 以 polylineDecorator 为例

    另请参考一个问题leaflet 插件和 leafletProxy 我想用折线装饰器插件在 R 的传单中 下列的有关如何使用 R 中的传单插件的说明 如果我将该方法与leaflet 请参阅第一个示例 它按我想要的方式工作 但如果我尝试使用相同
  • Excel 互操作:_Worksheet 还是 Worksheet?

    我目前正在撰写有关动态类型的文章 并给出了 Excel 互操作的示例 我以前几乎没有做过任何 Office 互操作 这表明了这一点 这MSDN Office 互操作教程对于 C 4 使用 Worksheet界面 但还有一个Worksheet