问题标签 [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.

0 投票
3 回答
3362 浏览

excel - 我们是否无法在 .NET 4.0 的通用对象中使用互操作对象?

我正在使用 VS 2010 并将我们的应用程序升级到 .NET 4。该应用程序以 Excel 为基础构建,我们希望利用 .NET 的一些改进来使用 Excel。但是我遇到了一个奇怪的错误,这似乎是由在通用字典中使用 Excel 互操作对象引起的。这是生成的错误:

这是有问题的实际财产:

我们不能在通用对象中使用互操作对象吗?如果是这样,这是 .NET 4.0 中的一个严重限制。我尝试将 Embed Interop 属性设置为 false,但这似乎并没有改变任何东西。请让我知道是否有任何解决方法。

0 投票
3 回答
4741 浏览

c# - 如何访问“Series.Values”(Excel 图表)中的值

我正在使用Microsoft.Office.Interop.Excel命名空间,并且正在创建一个图表。在某个时刻,我想检索某个系列的值。在MSDN上,它说Series对象具有属性Values。这将返回一个Range对象或一个array of values,我假设一个object[]. 在我的代码中,我有以下声明:

我收到一条InvalidCastException消息:Unable to cast object of type 'System.Object[*]' to type 'System.Object[]'.

当我使用 Visual Studio 2008 进行调试时,我可以检查它的类型,series.Values它会显示object{object[1..7]}. 这意味着(据我所知)它被声明为 anobject但它的实际类型是object[1..7]. 但object[1..7]不是我可以转换为的类型,也不是object[*].

我怀疑(或猜测)它可能与数组从 1 而不是 0 开始的事实有关(可能是因为 VB)。我什至不知道你可以在 c# 中定义一个基于 1 的数组...

0 投票
3 回答
1723 浏览

c# - 哪些 Excel 互操作对象要自己清理,哪些要由 GC.Collect() 清理

问题:

我想问一个问题以回应Mike Rosenblum这个问题的回答。问题是关于清理 Excel 互操作对象。建议的几种解决方案(例如,包装器,不使用多个点,终止 excel 进程),但我最喜欢Mike Rosenblum对这个问题的解决方案(关于该主题的冗长文章)。

它基本上说的是您不必太担心所有浮动的参考。你只保留一些主要的(比如ApplicationClass,WorkbookWorksheet)。您首先调用垃圾收集来清理所有浮动的对象,然后通过调用显式清理您仍然拥有的主要引用Marshal.FinalReleaseComObject(按重要性相反的顺序)。

现在我有两个问题。
第一:我如何确定我需要保留哪些对象的引用?在Mike Rosenblum 的示例中,他只保留Ranges,和. 第二:如果有更多的对象,我如何确定清理它们的顺序(即“重要性顺序”)?WorksheetsWorkbooksApplicationClasses

提前致谢。


更新1:

有人建议MattC,对于订单,唯一重要的是应用程序最后发布。尽管在我的参考资料中有以下句子:“您还应该按重要性相反的顺序释放您的命名参考资料:首先是范围对象,然后是工作表、工作簿,最后是您的 Excel 应用程序对象。” 意味着有更多的排序。

nobugz建议将所有内容设置为null然后进行垃圾收集就足够了,但这似乎与Mike Rosenblum 文章中的以下引用相矛盾:“你会认为,你可以设置所有变量 =Nothing然后GC.Collect()在最后调用,这有时确实有效。但是,Microsoft Office 应用程序对释放对象的顺序很敏感,不幸的是,设置变量 =Nothing然后调用GC.Collect()并不能保证对象的释放顺序。

更新 2:

一些额外的信息:在我自己的应用程序中,我用图表做了很多事情。我正在设置很多属性等。据我所知,有很多地方可以创建新的 COM 对象。我试图确保我从不使用双点,并且我试图调用Marshal.FinalReleaseComObject我完成的所有对象。我没有使用包装方法,因为它会引入大量嵌套。
EXCEL.exe我的应用程序完成工作后没有关闭。但是......当我告诉我的应用程序再次执行相同的工作时,它确实关闭了。当然是新EXCEL.exe开的没有关门的。现在我已经删除了所有Marshal.FinalReleaseComObject调用,并且应用程序的工作方式完全相同。EXCEL.exe停留,直到我告诉我的应用程序重做工作,但随后一个新的开始EXCEL.exe并停留。

编辑:另外,当我告诉我的应用程序做其他非 COM 相关的工作时,一段时间后EXCEL.exe消失了,但现在没有新的EXCEL.exe出现。

不知道我能从中得出什么结论......

0 投票
2 回答
7773 浏览

c# - C# Excel - 管理列属性

场景是生成一个包含约 150 个数据列的 excel 报告。现在我需要管理列属性,如宽度、背景颜色、字体等。

我使用的方法依赖于反射。我有一个类,它有大约 150 个列标题文本常量。另一个用于存储列属性的自定义属性类。这些属性应用于常量。

在使用反射创建列期间,我正在访问所有常量以创建标题文本(类中的常量排序定义列排序)和列属性的属性。

编辑:获取常量的代码

主要目标是使 excel 文件生成通用/不易维护。该方法是否可行,或者还有其他更好的选择。

编辑 2:常量类

0 投票
14 回答
128872 浏览

c# - 将列表中的值导出到excel

嗨,我有一个包含值列表的列表容器。我希望将列表值直接导出到 Excel。有什么办法可以直接做吗?

0 投票
2 回答
1985 浏览

c# - 动态加载程序集并创建其类型的变量

我正在尝试动态加载程序集并创建其类型的变量:

我从过去 2 天开始着手解决这个问题,任何帮助我如何声明 Excel 类型的变量(这是我需要创建的类型)

任何帮助都会非常感谢

0 投票
1 回答
14681 浏览

c# - Microsoft Office 互操作 Excel 12.0 在 IIS 7 中不起作用

我正在使用 Microsoft Office Interop Excel 12.0 组件在我的 ASP .NET Web 应用程序中创建数据透视表 Excel 工作表。当我在调试/发布模式下从 Visual Studio 2008 运行它时,它会正确创建 excel 文件。

但是当我在 IIS 7 中部署解决方案时,首先我遇到了一些权限问题,我通过在 DCOMCNFG 文件中授予权限来解决这些问题。现在我在尝试打开 Excel 文件时收到以下错误:

Microsoft Office Excel 无法打开或保存更多文档,因为没有足够的可用内存或磁盘空间。• 要提供更多可用内存,请关闭不再需要的工作簿或程序。• 要释放磁盘空间,请从要保存到的磁盘中删除不再需要的文件。

这些是我用来打开和关闭 excel 应用程序对象的代码

0 投票
1 回答
28688 浏览

vb.net - 关闭 Excel.Workbook 时出现 COMException (0x80010108 - RPC_E_DISCONNECTED)

当我运行以下代码时,出现以下异常:

注意:所有数据似乎都已正确检索。

请帮助我诊断并克服此错误。

0 投票
2 回答
9029 浏览

.net - 在使用 C#.NET 生成的 Excel 工作表中显示页码

有谁知道如何在使用 C# 代码生成的 Excel 表中包含或输入页码。

我使用 Microsoft.Office.Interop.Excel 中可用的库来生成文件。

但是,默认情况下,在输出中我看不到页码。我知道通过

excel选项(查看->页眉和页脚...),但我想通过C#自动化这个。

这可能吗,如果是,请分享相同的片段。

感谢不断学习者

0 投票
1 回答
167 浏览

c# - VSTO 中的 UDF,无需创建单独的项目

有什么方法可以在我的 Excel 2007 加载项中实现 UDF 而无需创建单独的项目?即使这需要使用肮脏的技巧,我也想知道。实际上,我想知道任何现有的方法来做到这一点。

所以,如果我不能......我听说了一些关于这个问题的官方 MS 响应,但我无法在任何地方找到它。有人可以提供链接吗?

谢谢。