Tag: com

Excel检测PasteSpecial操作

我正在开发一个评估Excel上用户技能的软件。 因此,用户可以在Excel中做一些操作,正如一系列问题中所提到的,我的工作是使用Excel COM Object编程来validation用户所做的事情。 我能够validation这样的事情; 单元格格式,单元格方向,打印区域,字体types,合并单元格等,但我很努力validation“select性粘贴”操作。 我有一个WorkSheet的Change事件和WorkSheet本身的钩子。 所以我可以捕捉到用户所做的keyStroke以及单元格的实际格式。 但是我无法find一种方式来判断用户是否使用了“仅格式 – 特殊粘贴”。 有没有人可以帮助我呢?

在Excel中正确处理Excel COM对象添加

好吧,我相信这个问题一定要问一百万次,所以对于重复道歉,但我不明白为什么我运行这个应用程序后仍然在我的任务pipe理器中获取COM对象。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Office.Tools.Ribbon; using Excel = Microsoft.Office.Interop.Excel; using Microsoft.Office.Core; using System.Reflection; using System.Runtime.InteropServices; namespace DataDumpTest { public partial class DataDumpRibbon { private Excel.Application _xlApp = null; private Excel.Workbook _wb = null; private Excel.Worksheet _ws = null; private void DataDumpRibbon_Load(object sender, RibbonUIEventArgs e) { } private void LoadOpenFileDialog() […]

通过COM互操作读取Excel

我的同事做了一个开放excel并从中读取价值的脚本。 但它有问题,它读取的价值,因为我在文件中看到它。 我有价值9.12345678取决于它返回9.1,9等等的列大小。 他使用文字特性。 我曾尝试使用价值和Value2但没有效果我不能得到9.12345678。 有任何想法吗 ? 提前致谢。

Excel通过PowerShell的COM对象

我正在通过PowerShell的数据输出到CSV文件。 一般情况下进展顺利。 我已经将数据导出到csv文件。 它包含大约10列。 当我用MS Excel打开它时,它都包含在第一列中。 我想通过几个专栏通过PowerShell(相同的GUI版本提供)分割它。 我可以使循环和东西分裂每一行,然后将值放到适当的单元格,但这将花费太多的时间。 我相信应该有一个优雅的解决scheme,使一个列拆分成多个。 有没有办法让它在一个简单的步骤没有循环? 这是我到目前为止: PS,CSV文件是100%FINE。 分隔符是',' Get-Service | Export-Csv -NoTypeInformation c:\1.csv -Encoding UTF8 $xl = New-Object -comobject Excel.Application $xl.Visible = $true $xl.DisplayAlerts = $False $wb = $xl.Workbooks.Open('c:\1.csv') $ws = $wb.Sheets|?{$_.name -eq '1'} $ws.Activate() $col = $ws.Cells.Item(1,1).EntireColumn

Win32:Python从Excel中获取所有列名称

如何从Excel工作表中使用COM接口(即Python中的Win32 API)获取所有已定义的名称? 我想获得某种字典,例如下面的例子: cols['Stamm_ISIN'] = 2 所以我可以稍后使用它的ID 2来设置一些值: excel.Cells(row, cols['Stamm_ISIN']).Value = 'x' 我有点卡在API文档https://msdn.microsoft.com/en-us/library/office/ff841280.aspx所以它似乎以某种方式是可能的…此外,我无法find任何结果时googeling 🙁

Delphi和Excel – 使用自动填充

在delphi10 /西雅图,与Excel 2013 …我试图: 添加一列(列AJ),并设置其标题文本(代码工程) 将列2的值设置为AutoSum(代码有效) 将第2行的计算复制到所有剩余的行。 (不起作用) 在“复制计算”步骤中,我使用自动填充方法。 我收到一个错误“范围类失败的自动填充方法”。 但我不知道为什么…(注意variablesaws是全局设置为活动工作表的。) const TOTAL_TOUCHES = 'AJ'; … var ColumnHeader : OleVariant; SecondRow : OleVariant; ColRange : OleVariant; myAddr, myAddr2 : String; LastCell : string; begin // This routine adds the header 'Total Touches' and then puts an AutoSum in that column for all rows // Set […]

使用ActXServer在Matlab中粘贴特殊的移调语法

我正在使用Matlab中的代码,将打开Excel电子表格,复制一定范围,并将其粘贴到一个新的工作表中转移我的范围在过程中。 我完全卡在PasteSpecial方法,并不知道如何使其转置我的数据。 我尝试了所有我能想到的:试过类似VBA的语法(Transpose = True),试过(Transpose,1),尝试过([],[],[],1),试过obj.Transpose在括号内的变化)…和其他各种各样的东西无济于事。 如果有人曾经这样做过,请帮助我。 以下是如果我的简化代码,以防万一需要。 先谢谢你! Excel = actxGetRunningServer('excel.application'); set(Excel, 'Visible', 1); Workbooks = Excel.Workbooks; Workbook = Excel.Workbooks.Open('C:\Users\…test.xlsx'); curr_sheet = get(Workbook,'ActiveSheet'); rngObj = ('A1:C3') rngObj.Copy Sheets = Excel.ActiveWorkBook.Sheets; new_sheet = Sheets.Add; new_sheet.PasteSpecial; %This is where I am stuck!

如何在Excel VSTO插件中解决iManage限制

我们开发了一个Excel的VSTO插件,它从Web服务器拉取Excel表格,并允许用户操纵表单上的数据。 它与本地文件的副本一起工作,但我们并不真正关心这个副本。 但是,我们的一些客户也安装了“iManage Integration for Office”,这些客户经历了奇怪的行为。 在这种环境下,我们无法取消closures事件。 更具体地说,如果用户打开我们的文件之一并进行更改,然后closures文件,我们的事件处理程序会触发并提示它们保存对服务器上数据的更改。 如果他们select“取消”,或者如果他们select“保存”,并且由于某种原因保存失败,则我们将取消设置为“true”,以尝试保持文件处于打开状态。 通常这是完美的。 对于那些使用iManage的客户,无论如何都会closures文件。 如果我们的代码保存了文件的本地副本,那么文件就会closures。 如果本地副本尚未保存,则用户从iManage获得提示后会再次收到提示,询问是否要保存该文件。 从这里,用户可以点击取消,文件保持打开状态。 但是用户报告,在第一次点击“取消”之后看到第二个提示是令人困惑的。 而且他们不愿意禁用iManage插件。 我们希望在这种情况下能够保持文件打开状态,最好不要看到iManage提示符。 在为我设置的客户端(Excel 2010)的testing环境中工作时,我尝试了几件事情: 我尝试在工作簿级别BeforeClose和应用程序级别WorkbookBeforeClose设置取消; 没有一个工作(只要启用iManage,文件仍然closures) 我试图确保我的WorkbookBeforeClose的处理程序最后注册,通过注册它在工作簿级别的事件处理程序; 不用找了 我可以使用iManagefunction区手动切换到本地模式,这使一切正常,但我不知道是否/如何通过代码进行更改。 我可以在Globals.ThisAddIn.Application.COMAddIns中findiManage插件; 我尝试设置其Connect = false,但是这给出了一个错误,只有pipe理员可以连接/断开插件。 我可以在closures事件中保存本地文件,然后执行另存为创build第二个副本; 第二个副本现在处于活动状态,iManage将其closures; 然后我重新打开原始的本地文件。 它对用户来说看起来相当不错,但后来我有一堆COM引用旧文件上的单元格,这些都是垃圾。 我可能会循环并序列化它们并用新文件重新创build它们,但编码和运行将耗费大量时间,所以我正在寻找其他想法。 有什么办法可以保持文件的打开,而不会让用户做任何额外的事情? UPDATE 使用iManage 9.3.0.0和Excel 2010,我创build了一个参考Worksite Integration Interfaces Library(Ex)的VBAmacros。 事件发生,但文件仍然closures。 如果我没有设置Saved属性,并且在网格上input,我总是会收到iManage的提示,询问是否要保存。 Private WithEvents oWS As iManageExtensibility Private Sub oWS_DocumentBeforeClose2(ByVal Doc As Variant, IgnoreIManageClose […]

Powershell Excelfind更好的性能替代值

我必须使用COM对象在Excel中通过一个循环(除了与POSH 5一起安装的环境外,没有其他模块允许)。 在每一个循环中,我都必须查看工作表(从variables列表中)一组特定的值,然后根据它们来拉取和追加数据。 我的问题不是那么多的完成,而是每次我在每个工作表中查找Value2时都会遇到性能问题。 随着未来工作表清单的大量增加,以及未来将有越来越多的专栏进行parsing和研究的旧工作表,我该如何使这一工作更加顺利和快速。 我目前做的是以下几点: $Exl = New-Object -ComObject "Excel.Application" $Exl.Visible = $false $Exl.DisplayAlerts = $false $WB = $Exl.Workbooks.Open($excel) Foreach ($name in $names) { $ws = $WB.worksheets | where {$_.name -like "*$name*"} $range = $ws.Range("C:C") $findstuff = $range.find($item) $stuffrow = $findstuff.row $stuffcolumn = $findstuff.column } 这最后一部分是需要很多时间的,每增加一页和多列,我只能看到它在增长,可能需要10-20分钟 可以做些什么来优化呢? 在旁注中:虽然我只需要一行和一列的结果,但在查找值时也有一个小问题,它只显示第一个结果。 如果将来可能需要多个行和列的value2 = $variables ,我该怎么办? (这不太重要,但我问,如果它的相关)

使用VC ++以编程方式从Excel复制单元格

没有 : MFC ATL 使用COM , 纯粹的C ++ ,到目前为止采取的步骤: //steps above omitted _ApplicationPtr application(__uuidof(Excel::Application)); //omitted const BSTR wcharFileName = SysAllocString(L"…"); application->Workbooks->Open(wcharFileName); application->put_Visible(10, true); 题: 如何将一个单元格,例如A4,B4和C4复制到一个数组中?