Tag: com

使用VB.NET处理Excel COM对象的正确方法是什么?

我有以下代码(从在线教程获得)。 代码正在工作,但我怀疑处理Excel COM对象的方式有点不正确 。 我们是否真的需要调用GC.Collect? 或者什么是最好的方式来处置这个Excel COM对象? Public Sub t1() Dim oExcel As New Excel.Application Dim oBook As Excel.Workbook = oExcel.Workbooks.Open(TextBox2.Text) 'select WorkSheet based on name Dim oWS As Excel.Worksheet = CType(oBook.Sheets("Sheet1"), Excel.Worksheet) Try oExcel.Visible = False 'now showing the cell value MessageBox.Show(oWS.Range(TextBox6.Text).Text) oBook.Close() oExcel.Quit() releaseObject(oExcel) releaseObject(oBook) releaseObject(oWS) Catch ex As Exception MsgBox("Error: " & […]

有没有办法阻止Excel自动将Application.ScreenUpdating设置为True

我有一个COM(C ++)API,用于侦听来自服务器的数据更新,并将这些更新写入工作表。 这些更新在VBA代码中处理,可以每秒多次到达。 为了以最有效的方式将这些更新写入表单,我使用以下前提: Application.ScreenUpdating = False Application.Calculation = xlCalculationManual <UPDATE CODE> Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic 实际上,我安排了一个程序来定期执行ScreenUpdating = False约20秒,然后设置为true,这样数据就可以更新,然后再次设置为false。 我发现这比仅仅因为我收到的更新频率高而设置ScreenUpdates + Calculation更好。 问题: 我已经在这里读过,excel在每个禁用它的方法的末尾设置了ScreenUpdating = True ,这不是我所需要的。 问题: 有没有办法强制Excel不能自动启用ScreenUpdating ?

使用COM Interop复制Excel工作表失去单元格颜色

我已经尝试过使用COM Interop合并工作表的各种方法。 这是我最后的结果(为了简洁,省略了不必要的代码): public bool CombineWorkBooks(string exportFilePath, IEnumerable<string> filesToMergeFrom, bool deleteRawFiles) { var success = false; Excel.Application xlApp = null; Excel.Workbook mergeToWorkbook = null; Excel.Workbooks mergeToWorkbooks = null; Excel.Sheets mergeToWorksheets = null; Excel.Worksheet defaultWorksheet = null; try { if (filesToMergeFrom == null) { return false; } xlApp = new Excel.Application { DisplayAlerts = false, Visible […]

.NET和CreateObject,它的内存COM对象使用?

我有一个VB.NET应用程序使用CreateObject来使用Excel并将大量数据转储到其中。 我们正在摆脱内存exception,我们的应用程序在这一点上通常打1GB的内存。 不过,我不能把所有的数字加起来。 这就是数据传递给Excel的方式: worksheet_object.Range("A1").Resize(rows, cols).Value = an_array 该应用程序是在屏幕上的数据(数据网格)400MB左右,当它崩溃时,已经使用了额外的600MB,尽pipeExcel的CSV只有200MB,CSV只有68MB。 我意识到在内存数组可能会有所增加,但600MB如何得到吞噬将数据传递给Excel,除非Excel以某种方式使用我的应用程序内存? 我试图找出,如果Excel通过CreateObject运行在自己的内存空间或使用我的应用程序内存空间,绘制一个完整的空白。 ProcessExplorer将它们显示为单独的进程,所以我不知道该怎么想。 我们发现运行的应用程序为64位,而不是32解决了这个问题,但并不是所有的客户将有64位的办公室。 所以我的问题是:这一行怎么可以使用600MB,有没有更好的方法将数据传递给Excel。

PowerShell中的Excel COM对象

SharePoint Online有一个大多数未公开的方法来填充pipe理员推送给其用户的SharePoint Online网站列表。 基于某些registry项的存在/值,客户端工作站知道何时向SharePoint Online询问SharePoint网站的更新列表。 我遇到的问题是启动该过程的唯一方法是FILE – Open Office应用程序中的FILE – Open或FILE – Save对话框(在我的情况下,Excel 2013)。 [我很想在这方面做错,但是我找不到任何其他的方法。] 打开该对话框后,它将检查registry项中的时间戳和URL,如果一切都很酷,则会抓取已发布SharePoint网站的更新列表。 我试图写一个简单的PowerShell脚本,人们可以运行,以强制这个过程。 我的问题很简单 – 如何closures我在下面的代码的最后一行中打开的对话框? $global:excel = new-object -com Excel.Application $excel.visible = $true sleep 1 $excel.GetOpenFilename() 我的脚本永远不会离开GetOpenFilename()方法,直到用户手动点击取消。 我想按编程方式按Cancel 。 有什么build议么? 我是否以错误的方式去做这件事? 有谁知道什么底层的方法被调用来填充SharePoint站点文件夹,当这个对话框打开,有什么办法,我可以直接在我的脚本中调用?

Powershell将数据粘贴到现有工作表中

我有一个脚本,从现有的.csv文件中获取数据并将其复制到现有的工作簿(xlsx)中。 问题:它总是在工作簿中创build一个新工作表。 我想将数据添加到我目前的工作表,并开始在A5而不是顶部。 这是我的 $source = 'C:\Scripts\monthly.csv' # source's fullpath $target = 'C:\Scripts\template.xlsx' # destination's fullpath $xl = new-object -com excel.application # creates Excel COM object in powershell $xl.displayAlerts = $false # don't prompt the user $wb2 = $xl.workbooks.open($source, $null, $true) # open source, readonly $wb1 = $xl.workbooks.open($target) # open target $sh1_wb1 = $wb1.sheets.item('triarqnew') # […]

使用Matlab来创build具有范围内X和Y值的Excel图表

我有大约20列的数据,每行〜20,000行。 所有的计算都在Matlab中完成,然后创build图表。 不幸的是,我需要整个输出在Excel文件中,包括几个可编辑的图表。 使用xlswrite我创build了Excel文件,现在我正在努力按照自己的方式创build图表。 我尝试使用这个代码,但有几个错误,无法select图表的X和Y值。 Excel = actxserver('Excel.Application'); WB = Excel.workbooks.Open('D:\…\Test.xlsx'); Charts = WB.Charts; Chart = invoke(Charts,'Add'); invoke(Chart, 'SetSourceData', Excel.Range('Sheet1!$B$2:$B$16')); %% here an error occurs 错误: 使用COM.Excel_Application / Range时出错。 对象返回的错误代码:0x800A03EC“ 我还没有find任何解决scheme通过在Matlab中的ActiveX对象添加图表。 我在这个主题find的任何post都过时或无益。 总结 ,我的问题是: 如何使用Matlab在Excel中插入图表(使用一般的,最新的ActiveX代码结构)。 我怎样才能selectXValue和YValues(范围) 我怎样才能访问图表标题,轴线,线条外观和图例 我正在使用Excel 2016和Matlab R2017a。 编辑: 在这个星期里,我开发了一个自己的解决scheme,但仍然不能很好地工作,但是接近我想要的。 你可以看看这个代码: 重要的只是图表1。 我想将XValue设置为B列 ,将YValues设置为sheet1(Tabelle1)的H-P列 。 %%%%% general Code to insert a Chart in […]

如果应用程序没有正确closures,则不会发布作为Com Server的Excel

我正在使用正在侦听Excel事件的C ++(EXE)中的Excel自动化。 一旦用户打开Excel应用程序,我可以通过AccessibleObjectFromWindow函数引用_Application指针。 之后 – 我可以连接到IID_IConnectionPointContainer并获取各种事件。 我的问题如下:如果我的程序崩溃(或者如果我停止debugging器),我无法正确清理_Application指针,所以即使用户closures程序,Excel.EXE仍在运行。 这是有道理的,因为_Application引用计数仍然是1。 但是,如果用户再次打开Excel.EXE – >它启动没有任何加载项。 用户需要手动添加色带。 此行为将继续,直到Excel.EXE手动终止。 有没有人遇到过这样的问题? 有没有办法清理COM对象指针后,我的应用程序崩溃?

MS Excel和COM托pipe的C#2委托中exception的行为

大家早, 这里的语言理论问题的位…我已经在网上发现了一些参考文献,提示C#中的exception处理和委托在某些情况下有一些不同的行为,但是我找不到关于这个问题的具体文档。 我们最近有一些大的问题,例如在一个Microsoft Excel插件的委托内,导致MSVC运行时崩溃。 删除代表解决了这个,但我现在好奇,找出血淋淋的细节。 作为核心代码的简要例子: Delegate del; // initialized elsewhere try { del.DynamicInvoke(); } catch(Exception e) { /* Parsing of exception to generate user-friendly message here */ } 上面的构造允许一个集中的error handlingforms,从纯粹的代码angular度来看是简洁明了的。 每个公开公开的函数都被声明为一个委托并通过上面的片段执行。 在一个简单的控制台应用程序中,从委托抛出一个exception或只是一个普通的意外错误(例如,“意外地”调用空指针上的ToString())按预期方式工作,并按照需要处理错误。 抛出MS Excel,你会遇到硬崩溃。 单步执行代码会显示错误发生的位置,但是没有任何堆栈展开的情况发生在一个破坏的大火球中的任何事情发生之前。 我的假设是,承载.NET运行时(以及我们的代码)的COM正在做一些与正常的.NET代码执行不同的事情。 这终止了终点,而Excel并不知道这一点,而这又反过来试图通过COM来访问终点,只是发现它已经消失了,而Excel却不知所措。 这只会发生在Excel + COM +代表的组合中,但是我并不真诚地知道哪一个在这个行为中更有影响力……任何想法?

如何使WPF应用程序作为可embeddedMS Excel的OLE对象?

我想让我的WPF应用程序作为一个OLE对象,可以从MS-Excel插入和启动。 当我打开Excel-2003并转到Insert-> Object时,在Create New选项卡中显示OLE对象列表。 我想注册我的WPF应用程序作为一个OLE对象,以便它也显示在列表中。 用户可以从Excel文件中插入和启动应用程序。