Tag: com interop

如何通过COM Interop在Excel中获取特定范围?

我有以下问题。 我必须通过COM互操作来读取一个excel文件。 我是使用COM interop编程的新手。 我用这个search一个特定的string: this.sheet = (Excel.Worksheet)this.excelApp.Workbook.Sheets.Item[this.sheetname]; this.sheet.Activate(); Excel.Range firstRow = this.sheet.Range["A1", "XFD1"]; Excel.Range foundRange = firstRow.Find( this.StringISearch, Type.Missing, Type.Missing, Excel.XlLookAt.xlWhole, Excel.XlSearchOrder.xlByColumns, Excel.XlSearchDirection.xlNext, false, false, Type.Missing); 不,我想用foundRange作为起点来获得另一个范围。 像这样的东西 Excel.Range MyRange = this.sheet.Range[foundRange + 2 rows, + 1 column & lastRow]; 我没有办法做到这一点。 有一个吗?

C#Excel互操作,在Excel的单元格文本中放置一个换行符

我正在使用互操作书写一个Excel工作表。 在工作表中,我需要将一组句子放到一个单元格中。 文本应该以换行方式。 我怎样才能做到这一点? 提前致谢。

互操作程序集embedded到.NET 4.0中时缺lessExcel get_Range

我build立一个引用COM interop DLL的程序集。 如果通过在引用的属性(VS2010)中将Embed Interop Types设置为True来embeddedCOM互操作types,则在运行时会发生错误“对象不包含get_Range的定义”。 如果COM互操作types没有embedded,则不会发生错误。 有谁知道为什么应该省略一个特定的方法,Worksheet.get_Range或如何解决这个问题或有任何其他相关的见解? 我应该感激任何帮助。 interop dll包含对Worksheet.get_Range(object,[object])的引用。 在我的调用程序集上使用reflection器时,没有提及Worksheet下的get_Range。 我embedded的互操作程序集是从Excel9.olb生成的。 我不使用PIA作为应用程序的目标多个Excel版本。

Excel互操作加载XLL和DLL

我使用了Bloomberg API(使用简单的调用如= BDP(“MS股权”,“请求”))。 我也有一个C#应用程序,用于打开使用Bloomberg API的excel文件(通过interop)。 我读过这里 ,当你通过interop加载excel的时候没有加载插件。 我甚至尝试使用在那里build议的代码。 但是,这似乎只适用于XLL和XLAM文件,它看起来像彭博社也使用DLL文件没有得到加载。 有什么办法让所有这些插件通过互操作加载?

在excel工作簿中使用interop抛出错误写长文本?

我正在写长文本(1K到2K字符长,普通的XML数据)到Excel工作簿中的单元格。 下面的语句抛出从HRESULT:0x800A03EC COM错误exception range.set_Value(Type.Missing, data); 如果我复制粘贴相同的XML手动到Excel中,它只是工作正常,但同样不能正常工作。 如果我把文字去掉像100/300字符这样的文字就可以了。

在Windows 10上使用Excel互操作不能打开超过11个Excel实例

在C#中使用Excel Interop,在具有16GB内存的Macbook Pro上的windows 10下,我无法打开超过11个Excel实例。 在第11个实例之后,我在“popup”中得到以下错误: “不能使用对象链接和embedded” 这是我使用的代码: List<Application> apps = new List<Application>(); for (int i = 0; i < 15; i++) { Application a = new Application(); apps.Add(a); } 每个Excel进程大约有15K的内存,远不及机器上的16GB … 我正在使用.NET Framework 4.5.2,Windows 10,MacBook Pro与16GB的内存和Excel个人。

无法将“microsoft.Office.Interop.Excel.ApplicationClass”types的COM对象转换为“microsoft.Office.Interop.Excel.Application”

这是我第一次尝试从一个C#控制台应用程序中从Excel中捕获一些数据。 我得到错误“无法将types为”microsoft.Office.Interop.Excel.ApplicationClass“的COM对象转换为”microsoft.Office.Interop.Excel.Application“。 这段代码使用了“Microsoft Excel 12.0 Object Library”,并且引用了Microsoft.Office.Interop.Excel。 不过,我无法克服这个错误 – 我相信它有自己的快速解决scheme。 我挖了一点这个网站,并遇到了这个解决scheme: Interoptypes不能embedded 但是,我不明白,所以不能执行build议的解决scheme。 我的.Net版本是4.5。 很感谢任何forms的帮助。 提前致谢。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using Excel = Microsoft.Office.Interop.Excel; namespace deneme { class Program { static void Main(string[] args) { Excel.Application xlApp = new Excel.Application(); xlApp.Visible = true; // <– […]

用IDisposable清理Excel互操作对象

在我的公司中,发布Excel Interop对象的常用方法是使用IDisposable以下方式: Public Sub Dispose() Implements IDisposable.Dispose If Not bolDisposed Then Finalize() System.GC.SuppressFinalize(Me) End If End Sub Protected Overrides Sub Finalize() _xlApp = Nothing bolDisposed = True MyBase.Finalize() End Sub 其中_xlApp是通过以下方式在构造函数中创build的: Try _xlApp = CType(GetObject(, "Excel.Application"), Excel.Application) Catch e As Exception _xlApp = CType(CreateObject("Excel.Application"), Excel.Application) End Try 客户端使用using-statement来执行有关excel互操作对象的代码。 我们完全避免使用两点规则 。 现在我开始研究如何释放(Excel)互操作对象以及我发现的几乎所有讨论,比如如何正确清理Excel互操作对象或释放Excel对象 ,大多使用Marshal.ReleaseComObject(),但都不使用IDisposable接口。 我的问题是:使用IDisposable Interace发布excel互操作对象有什么缺点吗? 如果是这样,这些缺点是什么。

使用包装对象来正确清理Excel互操作对象

所有这些问题: 通过.NETclosures时Excel 2007挂起 如何正确清理C#中的Excel互操作对象 如何正确清理C#中的互操作对象 与使用它们后C#不能正确释放Excel COM对象的问题斗争。 解决这个问题主要有两个方向: 当不再使用Excel时,终止Excel进程。 注意明确地将每个用于variables的COM对象首先分配给一个variables,并保证每个variables都执行Marshal.ReleaseComObject。 有些人说,2太繁琐了,你是否忘记在代码的某些地方忘记遵守这条规则,总会有一些不确定性。 仍然1似乎肮脏,容易出错,我也想在一个有限的环境试图杀死一个进程可能会引发安全错误。 所以我一直在考虑通过创build另一个模仿Excel对象模型的代理对象模型(对于我来说,实现我实际需要的对象就足够了)来解决2。 原则如下: 每个Excel Interop类都具有包装该类的对象的代理。 代理在其终结器中释放COM对象。 代理模仿Interop类的接口。 最初返回一个COM对象的任何方法都改为返回一个代理。 其他方法只是将实现委托给内部COM对象。 例: public class Application { private Microsoft.Office.Interop.Excel.Application innerApplication = new Microsoft.Office.Interop.Excel.Application innerApplication(); ~Application() { Marshal.ReleaseCOMObject(innerApplication); innerApplication = null; } public Workbooks Workbooks { get { return new Workbooks(innerApplication.Workbooks); } } } public class Workbooks { […]

实时(未保存的)Excel数据和C#对象之间的最快接口

我想知道什么是从一个打开的Excel工作簿读取和写入数据到c#对象的最快方式。 背景是我想开发从Excel使用的ac#应用程序,并使用Excel中保存的数据。 业务逻辑将驻留在C#应用程序中,但数据将驻留在Excel工作簿中。 用户将使用Excel,并在Excel工作簿上点击一个button(或者做类似的事情)来启动C#应用程序。 然后,C#应用程序将从Excel工作簿中读取数据,处理数据,然后将数据写回到Excel工作簿。 可能有许多数据块需要被读取并写回到Excel工作簿,但通常是相对较小的尺寸,例如10行和20列。 有时可能需要处理大量的数据列表,大约50,000行和40列。 我知道用VSTO做这个比较容易,但是我想知道什么是最快的(但仍然健壮和优雅)的解决scheme,并得到速度的想法。 我不介意解决scheme是否推荐使用第三方产品或使用C ++。 显而易见的解决scheme是使用VSTO或interop,但我不知道性能是什么样的,而我目前用来读取数据的VBA,或者是否有其他解决scheme。 这是张贴在专家交stream,说VSTO是比VBA慢得多,但那是几年前,我不知道是否performance有所改善。 http://www.experts-exchange.com/Microsoft/Development/VSTO/Q_23635459.html 谢谢。