问题标签 [excel-interop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 您可以使用 Excel Interop 一次性粘贴一块单元格,而无需使用剪贴板吗?
我正在尝试将数据从 DataSet 传输到 Excel 工作簿。不幸的是,我需要比通过 ADO.NET 简单地链接到 Excel 并使用标准 SQL 来选择和插入数据来获得更多的控制,所以我使用的是 excel 互操作。
我的原始算法涉及遍历数据集的所有表/行/项目,并Formula
在 Excel 中单独设置每个单元格的。这行得通,但是传输所有数据需要将近半分钟的时间。
我决定尝试不同的解决方案:将每个表转换为制表符分隔的字符串(使用 和 的组合StringBuilder
,string.Join()
将字符串复制到剪贴板,并使用互操作调用 ExcelWorksheet
对象上的粘贴命令。
这也有效,并将时间缩短了 50% 以上,但我对使用剪贴板传输数据有点偏执。如果用户在传输过程中开始做其他涉及剪贴板的事情会发生什么?我还想知道如果我可以直接粘贴一个字符串而不是使用剪贴板作为中介,它是否会更快。
所以,这是我的问题......是否有一些可用的命令允许我直接从 C# 字符串在 Excel 中“粘贴”一个数据块,而无需使用剪贴板?
excel - 如何使用 COM 互操作在 windows 窗体中显示 Excel 窗口
我想在我的 .net Windows 应用程序中显示一个 excel。如何使用 COM 互操作来做到这一点
任何帮助表示赞赏。
请帮忙 ...!!
谢谢你
约汉
excel - 保持 Excel COM 对象处于活动状态
我目前正在使用Excel 2003 Interop机制来操作一些Ranges。
有时我将一些范围存储在我的addin中,作为类的属性,但是当我稍后尝试访问它们时,COM 对象有时是随机的、无效的,并且COM 对象的每个属性都会引发“ COMException ”当我尝试访问它们时。
我已经说过Excel分配的对象和插件正在使用的对象之间没有紧密的联系:因此Excel可以随时释放“真正的” Range 对象,即使从.Net/C#的角度来看我仍然参考他们。
所以,我想知道是否有任何方法可以让我的 Range 对象保持活动状态,以便以后以安全的方式使用它们?
备注:我可以使用一种解决方法,例如存储代表Ranges的字符串,例如“A1”,而不是Ranges本身,但这会使代码不那么干净。
在此先感谢您的帮助。
c# - 在 Interop.Excel 中使用 workbook.SaveAs() 将 .xslm 转换为 .xslx,执行没有问题,但不保存文件
Interop.Excel 版本 12
办公室 Excel 2007
我一直在编写代码以打开 .xslm 文件,然后将其转换(保存)为 .xslx。在这之间,我确实需要做一些处理,但这没关系。以下是代码:
此代码执行没有问题(没有任何异常),但没有文件以 .xslx 扩展名保存。我发现它适用于某些文件,但不适用于其他文件。比如说,它不适用于名为 PF1.xslm 的文件。我可以在 Office Excel 中打开 PF1.xslm 并将其保存为 .xslx。因此,同样的假设也可以以编程方式工作。
.net - 从 vb.net 中的 SQL 数据表生成 Excel 文档
在我的项目中,我有一个汇总数据表,我想将其导出到 Excel 文档中,为此我部署了以下代码:
当我尝试执行该行时:
我得到的错误是:
Exception has been thrown by the target of an invocation
在这一点上我不知道是什么问题。有没有人可以帮助我?
c# - Excel 模板:合并数据和保存工作簿
我第一次涉足 Excel 互操作,但在飞速发展之后却碰壁了。
我有一个 Excel 模板,其中一张是评估表,另一张包含如何进行评估的指导说明。
我还有一个 XML 文件,其中包含正在评估的项目的详细信息。
我需要将项目名称、申请编号和公司名称合并到第一张表中,然后使用文件名 [Application No] - [Project Title].xlsx 保存该表。
第一部分工作正常。我已经加载了 XML,代码正在将数据放入应有的形式中。
我的问题是储蓄部分。我找到了 .SaveAs 方法,它创建了几个文件......但它们不会打开。然后我得到一个 HRESULT 错误 0x800A03EC - 搜索网络对此没有任何解释。有些东西告诉我 this.SaveAs() 指的是工作表而不是工作簿,但我只是在那里猜测。
我希望我做了一些愚蠢的事情,这很容易解决。
供参考的是我的代码,但就像我说的那样,我不确定它有多大用处。
有谁知道如何保存这些文件?
谢谢阅读
编辑 -
我找到了这篇文章
C# 和 Excel 互操作问题,保存 excel 文件不流畅
并更改了代码以包含其建议
但它也在做同样的事情。
我到了最后期限,所以我想我将不得不手动开始复制、粘贴和保存:(
c# - 新 Excel 工作表上的 DragDrop 给出“对象引用未设置为值”
我正在使用 devExpress。Office 2007。c#。当我将结果拖放到 1/2/3 excel 工作表中时,工作正常,但是将结果拖放到新工作表上会使对象引用未设置为值的实例。建议?
excel - 将数据写入excel
我想使用 c# 在 excel 文件中写入数据,但我想逐个单元格地写入数据。如何做到这一点..
c# - 从 C# 导出到 Excel
我正在尝试从 c# 将数据写入 Excel,但在调试时出现异常:
无法将“System.__ComObject”类型的 COM 对象转换为接口类型“Microsoft.Office.Interop.Excel.Range”。此操作失败,因为 IID 为“{00020846-0000-0000-C000-000000000046}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:Интерфейс не поддерживается(HRESULT 异常:0x80004002 (E_NOINTERFACE))
代码 :
c# - Excel 互操作在装有 Office 2007 的机器上工作,但在装有 Office 2010 的机器上失败
我有一个 C# WPF (.NET 4.0) 应用程序,它使用 Excel 互操作从 Excel 文件中读取数据。
当我在具有 Excel 2007 的开发机器上运行此应用程序时,它运行良好。当我在另一台安装了 Excel 2010 的机器上运行它时,它失败并显示以下错误消息:
System.Runtime.InteropServices.COMException (0x80040154):检索具有 CLSID {00024500-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败,原因是以下错误:80040154 未注册类(HRESULT 异常:0x80040154(REGDB_E_CLASSNOTREG) ))。
尝试创建Microsoft.Office.Interop.Excel.Application
对象时发生故障,如下所示:
我的项目有一个参考Microsoft.Office.Interop.Excel.dll
(版本 14.0.0.0,运行时版本 v2.0.50727),它位于:
C:\Program Files\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14\Microsoft.Office.Interop.Excel.dll
我尝试使用引用的 dll 上的默认设置运行应用程序:
- 复制本地 = False
- 嵌入互操作类型 = True
- 特定版本 = True
我还尝试在引用的 dll 上使用以下设置运行应用程序:
- 复制本地 = True
- 嵌入互操作类型 = False
- 特定版本 = True
但是在装有 Office 2010 的机器上,这些尝试都没有奏效。
其他注意事项:装有 Office 2010 的机器是 64 位 w/Windows 7。我的开发机器是装有 Windows XP 的 X86。
问题
是什么导致“类未注册”异常,我该如何解决?
编辑
为了回应 Alex 的回答,我尝试将应用程序构建为 Any CPU、X86 和 X64,但没有任何区别。我仍然收到相同的“类未注册”错误。
编辑 2
刚刚在装有 Office 2010 的 32 位计算机上尝试了该应用程序。没有错误。因此,可能是特定机器出了问题,或者可能是 64 位和 Office 2010 的组合。
编辑 3
好的,现在我已经在另一台装有 Office 2010 的 64 位计算机上对其进行了测试。再次没有错误。我认为这意味着特定机器有问题,这不是我的软件的错。啊编程。