Tag: com

用COM创build新的Excel进程(pywin32)

我正在尝试使用COM / pywin32来创build一个不同于当前正在运行的自治和不可见的Excel进程。 如果我在Excel窗口已经打开的情况下使用下面的代码,它将使前者不可见。 我想这是因为它只是访问相同的过程。 from win32com.client import Dispatch excel = Dispatch('Excel.Application') excel.Visible = False excel.WorkBooks.Open('C:/someFile.xls') 我需要这个的原因,是因为我想在不影响当前工作的情况下在后台刮一个不同的Excel文件。 另外,我不知道如何closures其中的一个进程。 如果你要build议一个新的图书馆,我也想知道如何在COM中处理这个问题。

需要骨架代码来从PythonWin调用Excel VBA

我需要从python脚本调用Excel工作簿中的VBAmacros。 其他人已经提供了Excel的工作簿的macros。 macros从外部数据库获取更新的值,并执行一些相当复杂的数据按摩。 我需要从这个按摩的结果,我真的不想在我的Python脚本中复制这个,如果我可以避免它。 所以,如果我可以从我的脚本中调用macros并获取按摩结果,那将是非常好的。 关于COM的一切我从“Win32上的Python编程”中学到了。 好书,但对我手头的工作还不够。 我搜查了一下,但还没有find如何做到这一点的好例子。 有没有人有任何好的例子,或者一些如何解决/调用VBAmacros的骨架代码? Excel COM接口上的一般参考(书籍,网页链接等)也可以在这里find帮助。 谢谢。

如何在.NET中清除COM引用时应用程序将保持运行?

我正在开发一个启动Excel的新实例的.NET程序,做了一些工作,然后结束,但必须让Excel运行。 稍后,当程序再次运行时,它将尝试挂钩到前一个实例。 在这种情况下处理COM对象释放的最好方法是什么? 如果我第一次没有在应用程序对象上执行“ReleaseComObject”,那么第二次运行得到活动对象,最后释放com对象,我有内存泄漏吗? 以下简化代码说明了我正在尝试做的事情: private Microsoft.Office.Interop.Excel.Application xlsApp; private Microsoft.Office.Interop.Excel.Workbook xlsWb; public void RunMeFirst() { //Start a new instance System.Type oSEType = Type.GetTypeFromProgID("Excel.Application"); xlsApp = Activator.CreateInstance(oSEType); xlsWb = xlsApp.Workbooks.Open("C:\\test1.xls"); //Do some stuff xlsWb.Close(false); Cleanup(ref xlsWb); //Do not quit Excel here //No Cleanup of xlsApp here? Is this OK? System.Environment.Exit(0); } public void RunMeSecond() { //Hook […]

与Microsoft.Office.Interopunit testing在生成服务器上失败

我写了一个unit testing。 被testing的代码引用了Microsoft.Office.Interop.Excel.dll。 testing在我的机器上运行良好,但在构build服务器上失败。 它在Excel应用程序实例化的行上失败: var application = new Application { Visible = Visible }; 错误是: System.Runtime.InteropServices.COMException: Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered 这是否意味着我必须在我的构build服务器上安装可再分发的主互操作程序集? 如果是这样,我是否也需要在生成服务器上安装Excel? 编辑: Microsoft.Office.Interop.Excel.dll是包含在我的解决scheme,它是从那里引用。

在Excel中访问数据 – 来自python的Reuter

我正在使用集成在Excel中的路透社来检索市场数据。 对于任务自动化,我目前使用VBA,但现在我想切换到Python。 包的pyxll没有多大的帮助,因为原理是相同的VBA(我需要在Excel中,然后单击运行button…)所以我正在考虑使用win32com从外部访问Excel对象与COM对象。 但是,当我这样做的时候: from win32com.client import Dispatch xlApp = Dispatch("Excel.Application") 这段代码打开了一个没有Reuter插件的Excel实例(因此我不能使用Reuter函数来检索数据)。 我不知道如何从python访问Excel-Reuter实例? 我Com Explorer了一下Com Explorer来浏览这个服务,但是我没有看到任何其他的服务

VSTO:操作COM对象(“一个点好,两个点不好”)

来自Excel VBA背景,我会经常写代码,如: Range("myRange").Offset(0, 1).Resize(1, ccData).EntireColumn.Delete 我现在正在转移到VSTO,并且一直在阅读关于RCW计数器等,以及需要显式释放COM对象。 基本的build议似乎是:不要将Excel对象的引用链接在一起(如上所述) – 因此“一个好点,两点差”。 我的问题是,我是否正确,上面的代码是不是在VSTO去的路? 如果是这样,这是否意味着我需要明确声明上面的链(偏移量,resize和整个列)暗示的3个范围? 或者甚至如此: rng.Columns.Count rng是一个声明的范围? 我应该为rng.Columns分配一个名称以获得范围中的列数?

使用Powershell将Excel工作表从一个工作簿复制到另一个工作簿

我想将工作表从一个工作簿复制(或移动)到Powershell的另一个工作簿。 我曾经这样做过,不记得如何。 我想我使用CopyTo()函数。 刚刚开始。 $missing = [System.Type]::missing $excel = New-Object -Com Excel.Application $wb1 = $excel.Workbooks.Add($missing) $wb2 = $excel.Workbooks.Add($missing) # Now, to copy worksheet "Sheet3" from $wb2 into $wb1 as second worksheet. # How?

Excel互操作COM不closures

我有一些代码打开电子表格,读取一些值,然后closures工作表。 我需要为多个文件做这个。 我遇到的问题是Excel应用程序实例没有退出,因此,当我运行我的进程的几个文件,我结束了几个excel.exe进程运行。 任何想法如何让Excelclosures? static void ParseFile(string file) { try { System.Console.WriteLine("parsing:" + file); Excel.Application excel = new Excel.Application(); Excel.Workbook wb = excel.Workbooks.Open(file); Excel.Worksheet ws = wb.Worksheets[1]; for (int i = 2; i < 27; i++) { log(ws.Cells[i, 1].Text); } wb.Close(false); excel.Quit(); excel = null; ws = null; wb = null; } catch (Exception ex) […]

加载所有COMtypes的Exceldynamic?

我想探索这个dynamic使用Excel的path。 我想在我的C#应用​​程序中使用Excel,而不包括dll和东西。 如果所需的Excel版本已安装并运行,我将首先检查。 首先,我想获得所有我需要的types,但是我无法得到它们: // works Type typeExcel = Type.GetTypeFromProgID("Excel.Application"); object excel = Activator.CreateInstance(typeExcel); object workbooks = typeExcel.InvokeMember("Workbooks", BindingFlags.GetProperty, null, excel, null); // this doesn't work, returns null Type typeWorkbooks = Type.GetTypeFromProgID("Excel.Workbooks"); 没有正确的types,我不能调用成员。 那么我做错了什么? 如何加载我需要的所有types,并知道它们在那里? 我目前的Excel版本是2003年。 原因如下:如果我包含目标系统上没有安装的COM库,我的应用程序不会启动。 如果我dynamic加载它们,我可以检查它们的存在并通知用户有关缺less的function。

Powershell – 添加赶上,如果没有Excel进程

有没有办法只添加一个if / else catch $excelId = get-process excel | %{$_.Id} | ?{$before -notcontains $_} 如果没有excel进程运行? 例如,如果Excel正在运行,则获取进程ID,如果没有,则忽略它。 Get-Process:找不到名称为“excel”的进程。 validation进程名称并再次调用该cmdlet。 在run.ps1:3 char:24 + $ before = @(get-process <<<< excel |%{$ _ .Id})+ CategoryInfo:ObjectNotFound:(excel:String)[Get-Process],ProcessCommandException + FullyQualifiedErrorId:NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand 我的代码行3-5如下: $before = @(get-process excel | %{$_.Id} ) $excel=new-object -com excel.application $excelId = get-process excel | %{$_.Id} | ?{$before -notcontains $_}