Tag: excel interop

在C#中使用大型Excel范围的最有效的方法?

我正在C#中使用Excel Interop,并且正在编写代码来对具有数万行数据的表进行一些复杂的操作。 它趋于运行非常缓慢。 我经常将数据存储在某种variables中,在最终将结果写入工作表之前,我会执行一些中间计算。 我相信这不是一个好方法,但是我经常发现自己构build了一个临时工作表,当我的代码完成执行时,这个临时工作表会被删除,这样我就可以在数据上使用Range属性的Excel方法,而不是试图实现类似方法在一个数组中。 大多数情况下,这涉及到多列sorting,删除重复项等等。这些列几乎总是有许多不同types的数据(string,整数,数字有两位小数 – 尽pipe存储在这些单元格中的实际数据types不似乎总是很直接(例如100000000.01似乎有时是双精度型,其他时间是十进制)处理所有不同的数据types的最简单的方法似乎只是使用Excel范围,这就是为什么我的代码经常创build临时工作表,然后在我的代码中删除它们。 处理这些情况的适当和有效的方法是什么?

Range.Formula是一个COM对象吗?

换句话说,我需要释放它与Marshal.ReleaseComObject() ? 我知道Range是,它需要被释放,但我不知道Formula 。

自动填充使用一半的核心

我在Excel中自动填充一些列(一次一个)。 这些列使用我在ExcelDna中编写的UDF。 使用taskmanager,我注意到只有一半的内核正在使用。 Excel设置设置为“使用此计算机上的所有处理器”。 所以我不明白为什么只有一半的核心在使用。 思考?

Excel Interop:你可以听取范围值的变化吗?

是否有可能,如果是的话,如何从C#中使用MS互操作库收听Excel范围内的更改? 我知道如何读取命名范围内的值,但不知道如何聆听并自动获取更改。 通过谷歌,并没有发现任何解决这个问题…

实例化一个Excel函数

我到处寻找如何在C#应用程序中使用excel函数告诉我执行以下操作: 从COM选项卡中添加以下使用语句:使用IExcel = Microsoft.Office.Interop.Excel 然后声明并初始化一个IWorkSheetFunction对象IExcel.IWorksheetFunction iwf = new IExcel.IWorksheetFunction(); 现在你可以使用函数,如int result = iwf.Math.Sum(1,2); 我的问题是,虽然intellisense正在检测IExcel,它不显示IWorksheetFunction。 但是它显示WorksheetFunction。 无论哪种方式,它不让我实例化它作为一个对象。 我得到错误:无法创build抽象类或接口的实例“Microsoft.Office.Interop.Excel.WorksheetFunction” 有任何想法吗?

Excel Interop:退出Excel应用程序实例会使testing失败?

我想封装Excel Interop的使用,使它更容易在一个可重用的库中使用。 到目前为止,我已经写了一些testing,一起运行良好,除了在每个testing之间,我强迫Excel,以便它不必处理testing文件,以便能够删除。 一旦我在每次testing之后退出应用程序实例,Excel似乎不再响应,导致Windows显示 “Excel已停止工作,正在寻找解决scheme” 信息。 此消息持续几秒钟,同时Excel正在closures,导致文件挂起发生,我的testing抛出一个exception “由于正被另一个进程使用而无法访问文件…” 信息。 否则,我的每个testing单独运行就好了! 任何线索如何解决这个问题? 我是否过度使用ApplicationClass.Quit()方法? 只有在testing完成后才退出Excel,导致为testing创build的文件不能被删除。 谢谢! =)

在C#中访问打开的Excel工作簿

我需要访问一个已经打开的excel文件。 我以为只是检查.Workbooks属性,它会在那里,但事实并非如此。 什么是正确的方式来参考打开的工作簿? var app = new Microsoft.Office.Interop.Excel.Application(); // the count is 0 =( app.Workbooks.Count == 0; 编辑 我可以通过…获取Excel应用程序的参考 app = (Excel.Application)Marshal.GetActiveObject("Excel.Application"); 但是app.Workbooks.Count仍然是0为什么它不能够获得对打开的工作簿的引用?

OutOfMemoryException当保存/创build/导出excel工作表

开发环境: 操作系统 – Windows 7 64位 CPU – i5 460M 内存 – 8GB .NET框架 – 4.0 Excel-Interop – Microsoft Excel 14.0对象库 我正在使用Excel-Interop从DataGridView (dgv)导出excel文件。 当我保存超过约150,000行 OutOfMemoryExceptionexception 被抛出。 { object[,] valueObjArray = new object[rowCnt, colCnt]; int rowCnt = dgv.Rows.Count; int colCnt = dgv.Columns.Count; for (int rowIndex = 0; rowIndex < rowCnt; rowIndex++) { for (int colIndex = […]

COMException(0x80010108 – RPC_E_DISCONNECTED)closuresExcel.Workbook时

当我运行下面的代码,我得到下面的exception: ''# NOTE: ExcelApp is a Private main form variable Dim ReportBooks As Excel.Workbooks = ExcelApp.Workbooks Dim ReportBook As Excel.Workbook = ReportBooks.Open(localFilename) Dim ReportSheet As Excel.Worksheet = ReportBook.Sheets("Report") ''# Retreive data from sheet ReleaseCOM(ReportSheet) ReportBook.Close(True) ''# Error raised here ReleaseCOM(ReportBook) ReleaseCOM(ReportBooks) ERROR: COMException was unhandled The object invoked has disconnected from its clients. (Exception from […]

使用Microsoft.Jet.OLEDB.4.0 +编辑同时写入Excel

我使用这里描述的代码来更新使用C#的Excel表。 问题是,文件被locking,不能手动编辑,而它正在更新(不像示例代码,我在做不断更新,实时数据馈送)由于这是一个交易应用程序,运营商需要能够添加Excel公式而其他细胞正在更新。 我对此感到陌生,并愿意转向任何其他技术/架构,使之成为可能。 我正在收到一个数据馈送,我只想放入一个excel文件并实时更新,同时可以手动编辑图纸。 我想如果DLL或外接程序是从Excel内而不是Oledb调用,我不会有这样的locking问题。 所以,如果有什么办法可以从excel中调用我的代码,而不是相反的话(如果可能,不要太费力),我欢迎任何build议 编辑:解决scheme 我终于select了RTD技术的Excel,这正是我所期待的。 MS Reference已经有10年的历史了,而且VBA是面向对象的,但它提供了很大的指导,事情自此以后没有什么变化。 如果没有Kenny Kerr的Artcile这个话题,我想我是不会完成的 。 非常感谢他。