Tag: com

在互操作后让Excelclosures

我有一个应用程序,从Excel电子表格中吸取一些数据。 我无法把它清理得很好。 EXCEL.EXE继续运行。 我读过其他职位,说你需要对所有的COM对象Marshal.ReleaseComObject() 。 我相信我正确地做到了这一点。 为了使事情更清洁,我已经删除了错误检查代码(与Excel没有关系),但是这是代码: public override MarketPriceItem[] GetMarketPrices() { string[] files = Directory.GetFiles(ConfigurationManager.AppSettings["XXSpreadsheets"]); Excel.Application app = new Excel.Application { Visible = false }; List<MarketPriceItem> prices = new List<MarketPriceItem>(); Excel.Workbooks workbooks = app.Workbooks; foreach (string filename in files) { Excel.Workbook wb = null; wb = workbooks.Open(filename); Excel.Worksheet sheet = wb.Sheets[1]; cell = sheet.Cells[1, […]

AutoHotkey的ComObjActive句柄到特定的工作表

在.ahk脚本中创build当前活动Excel工作表的句柄最简单的方法是: Xl := ComObjActive("Excel.Application") 但是,如果切换到另一个工作簿,这将成为新的“ 当前活动工作表 ”,并且AutoHotkey尝试通过COM在新工作簿中使用工作表和单元格的方法:当然,devise用于处理特定工作表和单元格的脚本不起作用在不同的工作簿上。 你知道如何创buildCOM句柄到特定的工作簿,而不是当前活动表吗? 目标应该是允许用户在工作簿之间循环,而无需Xl对象丢失以前的句柄并转到新的句柄。 例 从头开始打开一个Excel工作簿,并在名为“ Sheet1 ”的工作表的A1单元格中键入1234 ; 然后使用以下内容创build一个新的.ahk脚本: #Persistent Xl := ComObjActive("Excel.Application") SetTimer, xlRead, 5000 Return xlRead: { value := Xl.Sheets("Sheets1").Range("A1").Value MsgBox, %value% } Return 上面的脚本应该每隔5秒在消息框中显示“1234”。 在运行时,打开一个新的工作簿,并在名为“ Sheet1 ”的单元格A1中键入5678 ,并等待5秒钟:根据我的试验,AutoHotkey只需将句柄切换到新的活动工作表并显示一个消息框,其内容是“5678”。 任何方式来保持它链接到第一张? 当然,假设你可以把Excel文件保存到硬盘上,并用COM可以引用的正确名称。

为什么Excel.WorkSheet.Copy引发具有HRESULT的types为“System.Runtime.InteropServices.COMException”的第一次机会exception的exception:0x800A03EC

我在.NET中玩Excel Interop,我遇到了“Excel._WorkSheet.Copy(Type.Missing,Type.Missing)”的COMException。 行为非常奇怪:我从基于.xls的模板中复制工作表,并用指定的工作表(可能由用户从GUI中select)生成新的工作簿。 只要遇到Excel._Worksheet WorkSheet.Copy(Type.Missing,Type.Missing),就会抛出以下COMException。 “发生了types为”System.Runtime.InteropServices.COMException“的第一次机会exception。 附加信息:来自HRESULT的exception:0x800A03EC“ 以不同的方式尝试之后,我将手动指定的工作表复制到另一个新创build的Excel实例,并将此工作簿作为源代码提供给相同的代码。 在这里,它工作得很好! 它创build了一个精确的副本,打开一个新的Excel实例,我根本没有例外。 我不知道为什么会发生这种行为? 它是否与该工作表中的内容有关,如果是这样,相同和精确的工作表被复制到另一个新创build的空白工作表,一切工作正常。 我必须为用户提供的指定工作表生成报告,所以我必须从哪里打开模板化的工作簿,我需要复制那些指定的工作表,然后这些工作表将填入指定的数据。 我正在使用下面的代码: Excel._Worksheet WorkSheet = null; Excel.Application excel = new Excel.Application(); excel.Visible = true; excel.DisplayAlerts = false; _ExcelWorkbook = excel.Workbooks.Open(a_WorkbookName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,true); WorkSheet = (Excel.Worksheet)_ExcelWorkbook.Sheets[1]; WorkSheet.Copy(Type.Missing, Type.Missing); // throws COM Exception of […]

尝试在c#中更改工作表名称时出现奇怪的错误

这里是抛出错误的代码: string[] sheetNames = new string[] {"Raw"}; for (int s = 1; s <= sheetNames.Count(); s++) { Excel.Worksheet newSheet = new Excel.Worksheet(); newSheet.Name = sheetNames[s]; newWorkbook.Worksheets.Add(newSheet); } 我得到一个Unable to cast COM object of type 'WorksheetClass' to interface type '_Worksheeet'exception。 我不知道这意味着什么。 感谢所有的帮助

Excel COM对象忽略打印区域

当用Excel COM对象打开Excel工作簿时 app = gencache.EnsureDispatch("Excel.Application") doc = app.Workbooks.Open(filepath) 所有的打印区域都被丢弃,但是当文件正常打开时,可以通过VBA进行访问。

确定单元是否存在于Powershell Excel COM的指定范围内

例如,我期待确定以下逻辑: if (B2 in A1:B20) # if cell B2 is within the range A1:B20 { return $true } 有没有在Excel中的function,可以用于这样的事情? 我读了= COUNTIF()函数,但无法得到它的工作。 再次,这是使用PowerShell中的Excel COM对象。 谢谢

为COM Interop添加一个.NET EXE作为VBA参考(在Excel中)

如何在Excel(VBA)中使用我的C#项目,当它是可执行forms? 在Visual Studio中,如果我转到我的项目设置并将“输出types”更改为“类库”,则可以成功添加对Excel VBA中的项目的引用(通过浏览到参考部分中的DLL)。 但是,当我的“输出types”设置为“Windows应用程序”,如果我试图添加引用(在Excel VBA中)到新生成的EXE文件,我收到以下错误: 无法添加对指定文件的引用 如何在Excel VBA中引用我的.NET EXE? (我使用exe而不是DLL的目的是让我的应用程序既可以用作Windows应用程序,也可以用作COM对象)

Powershell Excel – 从命名范围复制

努力掌握如何使用Powershell将数据自动插入到Excel中。 到目前为止,我已经设法将正确date的列插入到符合我们集群名称的表中。 我现在希望从现有的电子表格中的命名范围中select值,然后将值过滤到单元格中。 我已经能够find很多关于创build一个范围和命名的东西,但没有什么我可以真正理解的,以帮助我解决现有的范围。 我的COM理解是有限的,但我正在慢慢拼凑在一起 – 怀疑我错过了一些基本的东西。 我以为我接近以下几点: [void]$SrcWorkSheet.Range("ClusterName",11).Copy() 但是,这似乎回到了一个错误,表明2007年造成这个问题的落后兼容性。 Exception from HRESULT: 0x800A03EC 我最终希望用我正在循环的variablesreplace“ClusterName”,因此它可以在多个工作表中重复使用。

用ctrl + q发送excel文件

我有一个Excel文件,我需要按CTRL + Q使一个VBA代码(macros)运行。 有没有办法做到这一点与Python? 有点像: with open (my_file,"wb") "press ctrl+q" close file 谢谢!

来自ALBPM的COM集成 – 无法find“{00020906-0000-0000-C000-000000000046}”的IDispatch

我正在尝试使用Office COM组件来创buildWord和Excel文档。 不幸的是,我无法做到这一点,因为我得到一个错误。 在模块“{00020905-0000-0000-C000-000000000046}”,v8.3中找不到“{00020906-0000-0000-C000-000000000046}”的IDispatch 我试图重新安装Office,我的应用程序(ALBPM)和我的界面(combsvc),但它不工作。 我想知道如何安装IDispatch,或者如何知道它是否安装在正确的模块中。 有些时候,错误说: 找不到“{000209FF-0000-0000-C000-000000000046}”的IDispatch …而不是00020906-0000-0000-C000-000000000046 我使用的代码生成这些错误是: wordAppl.visible = false wordDocs = wordAppl.documents contratoTemplate = "C:\\albpmFiles\\mandatory\\aTemplate.doc" // .doc template convenioTemplate = "C:\\albpmFiles\\mandatory\\ConvenioModificatorio.doc" // .doc template saveContrato = "C:\\albpmFiles\\temp\\" // where to save. saveConvenio = "C:\\albpmFiles\\temp\\" contratoName = "NewContact.doc" wordDoc = open(wordDocs, fileName : contratoTemplate) bookmark = item(wordDoc.bookmarks, index : "atrDescripcion") insertAfter bookmark.range […]