Tag: com

是可以通过COM插入图像到Excel单元格?

我已经使用自动化将值插入单元格,但是我从来没有见过任何文档,例如,显示插入除文本和/或公式之外的任何其他文档。 有没有人能够从外部应用程序插入图像?

从自定义应用程序获取数据到EXcel

我希望能够将自定义应用程序中的一些数据链接到Excel中的单元格。 你会用什么技术来做到这一点? 我主要是一个Unix开发人员,并不深入了解win32技术。 但据我了解DDE是最简单的,即使它是非常古老的技术。 能够将其与其他办公套件(如OpenOffice)一起使用将是一大优势。

Ole Excel Delphidate问题

我有一个Delphi应用程序使用类似于以下代码从Excel电子表格中读取数据: procedure TForm1.Button1Click(Sender: TObject); var xlApp, xlWorkBook, xlWorkSheet, arr: Variant; begin xlApp := CreateOLEObject('Excel.Application'); xlApp.Visible := False; xlWorkBook := xlApp.Workbooks.Open('C:\Temp\Book1.xlsx'); xlWorkSheet := xlApp.WorkSheets[1]; arr := xlWorksheet.Range['E2:E2'].Value; xlApp.Quit; end; 单元格E2:E2中存储在电子表格中的值为10/01/1900(年/月/年)。 但是,返还的价格是09/01/1900,即前一天。 为什么在1900年以后的其他年份的所有date都能正常工作呢?

如何告诉Range.NumberFormat只是把数据原样?

我在这里做一些简单的Excel自动化,并在我的代码周围的地方,我有一个开关块,检查CellType(我build立的自定义枚举),并基于这使得一些格式。 这是我的代码: switch (celltype) { case CellType.String: cellRangeFormat = cellrange.get_Range(cell, cell); cellRangeFormat.NumberFormat = ????; break; case CellType.Numeric: cellRangeFormat = cellrange.get_Range(cell, cell); cellRangeFormat.NumberFormat = ";0_);[Red](0)"; break; case CellType.Percentage: cellRangeFormat = cellrange.get_Range(cell, cell); cellRangeFormat.NumberFormat = "#,0.00 %"; break; case CellType.Decimal: cellRangeFormat = cellrange.get_Range(cell, cell); //cellrangeformat.NumberFormat = "#,0.00"; cellRangeFormat.NumberFormat = "#,##0.00_);[Red](#,##0.00)"; break; default: break; } 现在的问题是,在某些列中的值是“000”,虽然我指定CellType为string,Excel将格式化值并显示单元格为空。 如果我select单元格,我会看到它的值为0。 我希望excel停止格式化我的值,如果他们是string,只是粘贴它们。 […]

.NET RTD / COM Excel互操作错误在一个用户的机器上?

我们在各种机器上构build了一个.NET COM / Excel RTD服务器(.NET程序集),这个程序已经使用了很多年了(也就是说我们知道它的工作原理,以及我们的标准安装方法)。 我们有一个用户在不同的机器上安装了这个RTD组件,并且在顺利运行时遇到问题。 我认为这个问题与Interop.Microsoft.Office.Interop.Excel.dll有关,或者与这台机器不兼容,或者不正确的注册。 以下是具体的细节: 尽pipeRTD链接在某种程度上起作用,但我们发现应用程序经常logging下这个错误: RTDServer.NotifyExcel(): Error notifying Excel, ex=System.InvalidCastException: Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Interop.Excel.IRTDUpdateEvent'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{A43788C1-D91B-11D3-8F39-00C04F3651B8}' failed due to the following error: Library not registered. (Exception from HRESULT: […]

使用Excel数据的简单任务不会导致“ContextSwitchDeadlock”

我有一个Excel workbook对象包含一张workbook sheet ,我想将其内容复制到List 。 我有这个方法: private Task GeneratePagesList() { _pages = new List<Model.Page>(); short idCount = 0; var generatePagesListTask = new Task(() => { _pages.Add(new Model.Page() { Url = new Uri(_worksheetRange.Cells[i, j].Value2.ToString(), UriKind.RelativeOrAbsolute), Id = idCount }); }); return generatePagesListTask; } 现在我想要使用这个方法和它返回的Task ,如下所示: public async void ConvertExelDataAsync() { var generatePagesListTask = GeneratePagesList(); generatePagesListTask.Start(); await […]

强制COM服务器保持打开状态

我有一个由VB6 EXE托pipe的COM自动化服务器 。 COM VBA使用Excel VBA : Dim o as MyCOMAPI.MyCOMType Set o = new MyCOMAPI.MyCOMType o.DoSomething 当我在VBA中创build对象时,exe随着COM自动化一起启动,VBA可以使用API​​。 但是EXE很快就被Excelclosures了,我猜测Excel什么时候决定不再需要COM API了。 此行为导致随机错误。 简单的解决scheme是在运行VBA代码之前启动exe; 在这种情况下,所有工作正常,因为exe将不会停止运行,直到用户closures。 你有一些关于Excel VBApipe理托pipeAPI调用方式的信息/文档吗? 有没有办法避免这种行为,并保持exe文件保持打开,直到VBA代码决定停止它?

win32com相当于xlrd的sheet.ncols

xlrd使得知道最后一列是什么非常容易。 有没有一个简单的方法使用win32com? 我曾尝试使用ws.UsedRange.Rows.Count,但这似乎并没有给出正确的答案。

有没有更好的方法(除了COM)来远程控制Excel?

我正在开发一个回归testing工具来validation大量的Excel电子表格。 目前我使用最新版本的pywin32产品通过Python脚本控制它们。 不幸的是COM似乎有一些烦人的缺点: 例如,最轻微的烦恼似乎能够中断与COM服务器的连接,一旦切断似乎没有安全的方式重新连接到Excel应用程序。 COM应用程序对象中没有内置的安全性。 Excel COM接口不允许我安全地远程控制在同一个工作簿文件上运行的Excel应用程序的两个独立实例,即使它们是只读的。 另外当出现问题时,我很less得到任何有用的错误消息……至多我可以除了一个数字错误代码或几乎没有用的消息,如“发生exception”。 知道为什么出问题几乎是不可能的。 最后,COM缺乏控制Excel某些最基本方面的能力? 例如,没有办法保证只closuresCOM客户端连接的Excel进程。 你甚至不能使用COM来查找Excel的PID。 那么,如果我完全放弃COM呢? 有没有其他的方法来控制Excel? 我想要做的就是运行macros,打开和closures工作簿,读写单元格范围? 也许一些.NET专家知道还有一两个尚未冒泡到Python社区的技巧? 那么你的办公室黑客呢? 有没有比COM更好的方法来获取Excel的内部?

VB.NET / COM Server代码方式比Excel VBA代码慢

背景 我有一个客户需要Excel VBA代码,生成的公式值移动到VB.NET。 他在提供财务分析业务,在这种情况下,作为一个Excel加载项交付。 我已经将VBA转换成在单独的DLL中运行的VB.NET代码。 该DLL被编译为一个COM服务器,因为,可调用Excel的.NET UDF必须是。 到目前为止,这么好:Excel单元格有“= foo(Range1,Range2,…)”,VB.NET Com服务器的UDF被调用,并且单元格获得一个与VBA代码值相匹配的值。 问题 VB.NET代码是慢的。 我可以扩展一系列基于VBA的公式并进行即时计算。 我可以延伸一个可比范围的基于VB.NET的公式,计算需要5-10秒。 客户显然较慢,不能接受。 有几种可能性发生在我身上: VBA本地编译速度更快,因为没有交换机 可以为每个UDF调用加载和卸载该DLL 该DLL调用Excel WorksheetFunction方法并需要一个Application对象,并且创buildApplication对象的开销很大 从DLL调用Excel WorksheetFunction方法是昂贵的 我不认为(2)是真实的,因为我把调用追加到共享新,公共新和Finalize函数中的文件,我得到的是: Shared Sub New Public Sub New Finalize 当我打开电子表格时,反复拉伸公式范围,然后closures电子表格。 我不认为(3)是真的,因为文件写入显示Application对象只创build一次。 这个问题 我如何弄清楚什么是花时间? 如何在这个环境中进行configuration? 有明显的增强吗? 在最后一个类别中,我试图通过将Shared对象(用于WorkSheetFunction调用)来减less一个Application对象的创build次数: <Guid("1ECB17BB-444F-4a26-BC3B-B1D6F07D670E")> _ <ClassInterface(ClassInterfaceType.AutoDual)> _ <ComVisible(True)> _ <ProgId("Library.Class")> _ Public Class MyClass Private Shared Appp As Application ' Very […]