Tag: excel automation

在Delphi中检测Excel的版本

我正在使用下面的代码来检查用户的计算机上是否存在Excel自动化库: CoInitialize(nil); ExcelExists := true; try TestExcel := CreateOleObject('Excel.Application'); except ExcelExists := false; end; if ExcelExists then begin TestExcel.Workbooks.Close; TestExcel.Quit; TestExcel := Unassigned; end; 这一直工作正常,直到一个用户只有Excel 2003.上面的代码说,他有Excel,但我的Excel自动化不适用于他,我怀疑它不适用于Excel 2003之前的版本。 如何检查安装的Excel版本是否为2007或更高版本? 根据David的回答,我最终把这个放在ifExcelExists声明之后,而且似乎是做了这个工作: S := TestExcel.Application.Version; if (copy(S, 3, 1) <> '.') or (S < '12') then ExcelExists := false; 版本12是Office 2007。

从C#中断运行Excel VBA

我所读到的一切都表明这是不可能的,但也许有人知道我不知道的东西。 我在C#中开发了用于通过COM或.NET接口运行不同程序的中间件。 其他程序允许您asynchronous运行它们,并在必要时中断计算。 其中一个程序选项是Excel,中间件将启动Excel并运行由用户命名的VBA代码。 我想中断从C#运行Excel VBA,因为我可以用其他程序。 似乎没有办法做到这一点,因为运行(macros)调用被阻止,并在VBA代码完成时返回。 有_Run2(macros)和_Wait()调用,这表明可能有一些方法来做到这一点,但这些是内部使用,所以他们故意logging不足。

使用C#保护excel中的列

我试图写入Excel表格中的一些数据,并在写入必要的数据后,我想通过使它们不可编辑来防止单元格编辑。 在这个操作之后,一些数据将会在页面用户的不受保护的单元格上被更新,然后我将使用它们并读取它们来执行一些处理活动。 有人可以帮我一个具体的,如何locking在Excel中编辑一列? 你如何写C#到一个受保护的列? 你如何阅读从受保护的列使用C#? 简单的参考例子将大大帮助我。 PS:如果你对VB.NET更加熟悉,甚至参考如何做到这一点将是有益的。

获取types下拉列表的形状

这是我想要改进的一些可怕的代码: Excel.Shapes theShapes = excelSheet.Shapes; foreach (Excel.Shape aShape in theShapes) { foreach (var groupItem in aShape.GroupItems) { //Console.WriteLine(Microsoft.VisualBasic.Information.TypeName(groupItem)); var s = (Excel.Shape) groupItem; if (s is Excel.OLEObject) continue; try { if (s.FormControlType == Excel.XlFormControl.xlDropDown) { Console.WriteLine("### " + s.Name); } } catch (Exception e) { } } } 有没有办法获得下拉列表更容易? 当我尝试获取FormControlType时,如何避免上述exception?

Excel COM服务器的BUG?

Excel版本15(2013),在Windows 8中。 重现步骤: 以编程方式打开Excel和XLA文件。 确保没有其他工作簿打开。 设置Excel.Application.Visible = True Excel对象被破坏,并在随后的COM消息上产生错误。 如果除了XLA之外还有一个开放的工作簿,一切正常。 但是,如果XLA是唯一的开放书,它就会失败。 问题:这只是我,或者这是一个COM Excel服务器错误?

在VBA中检查条件格式的可选属性时出错

我写了两个VBA子例程: 1)设置条件格式(使用运算符,formula1和formula2作为可选项) Sub setConditionalFormatting(sheetName As String, cellRange As String, CFcellColor As String, CFfontColor As String, CFtype As XlFormatConditionType, Optional CFoperator As Variant, Optional CFformula1 As Variant, Optional CFformula2 As Variant) On Error GoTo Errhandler Dim sheet As Worksheet Dim cell As range Set sheet = Sheets(sheetName) sheet.Select Set cell = range(cellRange) cell.Select 'user defined sub […]

如何获得具有特定string的Excel工作表的列,并将其写入新的Excel文件中

我有excel文件“file1”几张。 我感兴趣的只有一张工作表,“sheet1”有很多列,而我只对这张工作表中具有特定名称的几列感兴趣(excel工作表的第一行包含variables的名称)。我想find匹配(等于)一组特定string的列(例如10个variables名),并将它们与这些列中的所有行一起复制,然后将它们粘贴到一个新的excel文件“file2”中。 我也想用脚本自动生成第二个excel文件(这第二个excel文件只有一个表格)。 我开始为这个编写一些VBA脚本(我刚刚通过一些search学到了一些,所以我不熟悉VBA),但是我得到了一些错误。 我的第一个问题是做这个任务的最好的工具是什么,然后怎么做。 我感谢您的帮助。 这是我非常简单的代码,当我知道列号和#rows(但都改变,这就是为什么我想工作string) Sub ExtractData() Filename = "OriginalFile" Workbooks(Filename).Sheets("sheet2").Range("K1:K206").Copy Range("A1:A206") Workbooks(Filename).Sheets("sheet2").Range("CF1:CF206").Copy Range("B1:B206") Workbooks(Filename).Sheets("sheet2").Range("BRG1:BRG206").Copy Range("C1:C206") Workbooks(Filename).Sheets("sheet2").Range("ESM1:ESN206").Copy Range("D1:E206") Workbooks(Filename).Sheets("sheet2").Range("EWY1:EWZ206").Copy Range("F1:G206") End Sub

从VB.NET应用程序调用Excel时,如何让Excel出现在应用程序的前面?

我有一个VB.NET应用程序,它使用Microsoft.Office.Interop.Excel来简单地打开一个电子表格,抽取一些数据到它,刷新数据透视表中的数据,然后用电子表格呈现给用户。 代码非常简单(error handling未显示): ' Start Excel Application xlApp = New Excel.ApplicationClass ' Get Excel Workbooks xlWorkBooks = xlApp.Workbooks ' Open workbook xlWorkBook = xlWorkBooks.Open(Filename:=sExcelDocFullPath, IgnoreReadOnlyRecommended:=blnIgnoreReadOnly) If Not xlWorkBook Is Nothing Then ' Pump some data over (code not shown) ' Make the first worksheet in the document active CType(xlWorkBook.Worksheets(1), Excel.Worksheet).Activate() 'Return control of Excel to […]

使用VBA自动单击消息框

我为我公司的插件自动化testing用例。 在其中一个testing用例中,当我尝试closures工作簿时,将工作簿保存在本地计算机上之后,我需要点击“是” – 将编辑后的数据保存在我们的数据库中,否 – 放弃编辑或“取消”只需closures消息框。 我曾尝试使用sendKeys,但没有为我工作。 例如:对于通过我的VBA代码点击“否”,我试图发送标签,并input这样的键: Application.Wait (Now() + TimeValue("00:00:10")) Call SendKeys("{TAB}", True) Call SendKeys("{ENTER}", True) 我用各种时间价值尝试过,仍然没有取得任何成就。 如果有人能帮助我,我会很高兴。 提前致谢! 🙂 更新:截至目前,我一直这样做: 'Some tasks… ActiveWorkbook.Save Call Application.Run("workbook.xlsm!Discard") Application.DisplayAlerts = False ActiveWorkbook.Close SaveChanges:=False Application.DisplayAlerts = True 但有没有办法获得消息框的窗口对象引用? 或者无论如何要坚持工作stream程:编辑工作簿 – >保存 – >尝试closures – >select丢弃/提交更改数据库? 注意:通过丢弃/提交对数据库的更改,我的意思是数据更新的服务器。 Excel只是用户的一个界面。 我不希望只保存excel,而是在服务器上调用丢弃/保存更改的操作。

我怎样才能添加一个交互行而不分配给每个button?

这是一个意见的追求,但它是关于Excel VBA事件 我有一个包含销售历史的表格,但我希望用户能够以某种方式与每一行进行交互 ,以便在编辑器中打开销售。 作为来自Javascript的人,我的第一个想法是在单元格上点击或双击事件,但在Excel中,这些事件已经有了它们的function,所以它不是很直观 什么是我可以做到的“超类”方式? 或者,我有什么select? 以前尝试过的人可能会有一个成功的方法来分享? 或者可以在每一行添加一个button吗? 有2000多行,并在不断增长