Tag: excel interop

以unserinterfaceonly删除未locking的行/列:= true模式

我用下面的子保护某些单元格: Sub test() ThisWorkbook.Worksheets(1).Cells.Locked = False ThisWorkbook.Worksheets(1).Range("C3:E8").Locked = True Worksheets(1).Protect userinterfaceonly:=True End Sub 我的问题是, 为什么不能删除在locking= False范围的界面中的行 ? 例如,我尝试删除第22行,但这是不可能的。 我以为我把单元格locking到第8行,我可以删除其他单元。 有没有办法做到这一点?

Excel.Interop的打印对话框冻结

这里是我用来显示打印对话框的函数(我在C#上编写)。 当我写的时候它工作的很好。 问题是 – 因为有一天这个代码保持只冻结我的应用程序,而不是任何打印。 我也尝试了显示()所有30缺less参数,但它没有做任何改变。 public bool Print() { var f1 = _application.Dialogs; var f2 = f1[Excel.XlBuiltInDialog.xlDialogPrint]; bool DidntCancel = f2.Show(); return DidntCancel; } 冻结发生在f2.Show()调用中。 我的应用程序窗口不断刷新它的视图,但我不能点击任何东西。 一个试图通过逐步debugging进入Show()方法的汇编程序行,但程序不会去那里,它正好在方法调用的时刻死亡。 任何帮助非常感谢:)

C#Microsoft.Office.Interop.Excel v15慢

我正在处理一个需要编辑excel文件的应用程序,执行各种操作,如: 将工作表中的粘贴部分复制到工作表 添加/编辑值 公式和macros在后台运行 这是一个最初使用Excel 2007开发的应用程序,但是现在我必须使用Excel 2013.不幸的是,我注意到,在安装了Excel 2013的计算机而不是Excel 2007中运行速度几乎慢了10倍。 因此,我创build了一个非常简单的基准testing应用程序,它随机生成数字,并将它们写入1000(行)* 15(列)= 15000个单元格。 结果令人失望,因为在Excel 2007中运行大约需要670毫秒,而在Excel 2013中运行需要大约3257毫秒(这是速度的5倍) 请find提供以上基准结果的代码: static void Main(string[] args) { var stopwatch = new Stopwatch(); stopwatch.Reset(); stopwatch.Start(); var excel = new Application(); excel.Visible = false; excel.DisplayAlerts = false; var workbooks = excel.Workbooks; var workbook = workbooks.Add(Type.Missing); var worksheets = workbook.Sheets; var worksheet = (Worksheet)worksheets[1]; […]

获取给定数据范围的以前的单元格

我尝试获取给定范围的前一个单元格。 到目前为止,我的代码如下所示: 获取选定的范围并将其传递给另一个方法 Microsoft.Office.Interop.Excel._Application app = this.ExcelAppObj as Microsoft.Office.Interop.Excel._Application; Microsoft.Office.Interop.Excel.Range range = null; range = app.get_Range(this.DataRangeTextBox.Text); var caption = ExcelHelper.GetRangeHeaderCaption(range); 以下方法被执行 /// <summary> /// Gets the range header caption of a given range. /// The methode goes through every previous cell of the given range to determine the caption. /// If the caption can not […]

Excel SpecialCells(xlCellTypeBlanks)与合并的单元格失败

Excel SpecialCells(xlCellTypeBlank)包括合并范围内的所有单元格,而不pipe它们是否为空。 我认为这是一个错误,我迫切需要一个解决方法。 重复步骤: (1)在单元格A1和B3中创build一个包含文本的工作表。 现在activesheet.usedrange.cells.count = 6和activesheet.usedrange.specialcells(xlcelltypeblanks).cells.count = 4这些值是预期的。 (2)现在合并单元格A1:A2, activesheet.usedrange.cells.count = 6和activesheet.usedrange.specialcells(xlcelltypeblanks).cells.count = 5 A1和A2现在被认为是空白的。 在这种情况下,我需要find一种方法来select单元格A3,B1和B2。 实际上,我使用.NET Excel Interop来完成这个工作,因此我不希望实际检索单元格值作为testing的一部分,因为这是Excel Interop中巨大的性能损失; 所以我被限制在一个内部的小区selectfunction,如SpecialCells。

在Excel中刷新内部数据连接时出现意外的行为

我遇到了Excel电子表格有一个很大而不方便的问题,这些Excel电子表格有内部数据连接(查询select自己工作簿的范围)。 我将首先展示如何重现问题。 问题:如果我有一些内部连接,并且另一个实例(注意,实例,而不是其他工作簿)已经打开,刷新该连接时,相同的工作簿(具有内部连接)立即在另一个窗口中以只读模式打开。 .. 为什么会发生? 问题是,我正在开发一个.NET自动化应用程序的Excel,这种行为打破了一些stream程的stream程(因为只读文件保持打开状态,有时它会导致在原始工作簿中不刷新) 为了解决这个问题,我开始使用相同的实例,如果它已经打开,但这不是最好的解决scheme,因为我需要通过.NET Interop在同一个实例中运行多个VBAmacros时处理并发。 在这里为那些希望testing我提出的问题的工作手册(只是改变string连接插入新的文件path在您的计算机): Excel文件进​​行testing 我录制了一个video,向您展示更多细节以及如何重现该问题。 请看一下: video 我希望有人知道如何解决这个问题,因为我一直在寻找这几天… 谢谢 观察:Office版本是2013年

从有条件格式化的单元格获取单元格颜色

我可以从正常的单元格读取背景颜色,但是如果单元格具有某种条件格式,从[RangeObject].Interior.Color获取的背景颜色与条件格式化程序给出的背景颜色不同。 我的问题是,有没有一种方法来获得这个特定的属性,或者我必须按照我的方式工作,像程序设置在我的代码中相同的条件,以改变背景颜色,而不是读写?

在一个Excel实例中处理VBAmacros并发

我正在开发一个.NET应用程序在Excel中执行一些自动化任务(运行macros,刷新连接等)。 但由于{这个问题}我只需要在Excel的一个实例中运行所有任务。 如果Excel的一个实例已经打开,我使用它,否则我创build一个新的。 问题是Excel是单线程的,所以当我的应用程序的多个实例同时运行时,我需要处理并发。 在这个地方,我只是捕获COMexception“0x800AC472”,然后重试(睡眠时间为X秒),直到运行的任务结束。 但是,这不是一个非常强大的解决scheme,会出现几个错误,并出现一些死锁问题。 我能否以一种可靠的方式处理Excel并发? 我已经在我的代码中实现了IMessageFilter,但这还不够。 谢谢

Interop.Excel本地化和Range.Formula与Formulalocal

我试图使用Interop.Excel生成Excel文件,但我有2个本地化,我需要运行我的WPF应用程序。 DE-DE和EN-US 对于de-DE本地化,我的程序工作正常(DE MS Office也安装在我的笔记本电脑上),但是当我尝试在en-US服务器上运行它时,我遇到了问题。 以下是源代码片段: cell = "K" + rowCounter; Excel.Range ThisRange = xlWorkSheet.get_Range(cell, System.Type.Missing); string myFunction; if (Thread.CurrentThread.CurrentUICulture.IetfLanguageTag == "de-DE") { myFunction = "=+WENN(I" + rowCounter + "<=J" + rowCounter + ";J" + rowCounter + "-I" + rowCounter + ";\"24:00\"+(J" + rowCounter + "-I" + rowCounter + "))"; ThisRange.FormulaLocal = myFunction; } else […]

Excel COMException Hresult:0x800a03ec当我尝试通过使用Interop的C#代码激活工作簿

我在WPF应用程序中运行多个Excel工作簿,embedded在WebBrowser中。 我正试图实现一种方法来切换工作簿。 这样做的方法是我想通过激活所需的工作簿,如果它已经在正在运行的Excel应用程序的工作簿的列表中。 码: internal void ActivateWorkBook(string wbName) { var xlApp = Marshal.GetActiveObject("Excel.Application") as Excel.Application; ((Excel._Workbook)xlApp.Workbooks[wbName]).Activate(); } 我在Activate()函数中得到exception。 有没有人有这个问题的解决scheme? 我知道我可以通过使用WebBrowsers.Navigate(filePath)在工作簿之间切换。 但是我想用上面的技术来做。