Tag: 性能

Excel第二次打开后很慢

我有一个excel工作簿,有很多macros。 如果我有Excel应用程序。 完全closures,我打开它,它运行良好。 但是,如果我closures工作簿(不closuresexcel应用程序),然后再次打开它,打开时会出现巨大的延迟,同时还会运行所有不同的macros。 我在开始或背景上没有任何运行。 实际上,我在Workbook_Open例程上放了一个标记….只是为了达到这一点(workbook_open事件),它需要20秒以上! 并没有macros已经运行了! 所以总而言之,如果从头开始(Excel应用程序不运行),需要2-3秒才能打开并准备工作簿。 一切都运行得很快(macros等)… 然后我closures工作簿…如果再次打开(而Excel已经运行)需要15-50秒。 基本上工作中的任何东西(macros运行等)需要10倍的时间 如果我closuresExcel应用程序。 完全打开它,它再次运行(第一次) 我想也许工作簿有什么影响记忆和第二次打开它正在影响它…但我不知道,这只是一个猜测… 有没有人经历过这个?

使用Microsoft.office.Interop.Excel读取Excel时性能下降

从excel中读取Microsoft.office.Interop.Excel和使用Range dataRange = (Range)cSheet.Cells[row, col]; performance很慢。 当我删除Range dataRange = (Range)cSheet.Cells[row, col]; 这是更快。 我错过了什么。 我应该改变什么? int rows = cSheet.UsedRange.Rows.Count; int cols = cSheet.UsedRange.Columns.Count; for (int row = 2; row <= rows; row++) { for (int col = 1; col <= cols; col++) { Range dataRange = (Range)cSheet.Cells[row, col]; } }

Excel – 文件优化

我正在处理一个相当大的Excel文档(〜9MB),其中有60多张,每个文档中都包含很多CUBEVALUE公式。 这个文件需要2分钟才能打开(不包括刷新值),而我读了很多build议,例如: 工作表的拆分(由于这个文件的性质而不可能) 较短的公式,(不可能) 在32位和64位上都testing过(性能不是很明显) 我想知道你们是否遇到过任何优化Excel的开放时间的方法,而不会显着改变其中的内容或任何进一步的build议。

如何提高VBA中XMLparsing的速度?

我有一个大的XML文件,需要在VBA中parsing(Excel 2003&2007)。 xml文件中可能有11,000行“数据行”,每个“行”具有10到20列之间的数据。 这是一个巨大的任务,只是parsing和抓取数据(5 – 7分钟)。 我尝试读取XML并将每个“行”放入字典(键=行号,值=行属性),但这需要很长的时间。 遍历DOM是永恒的。 有没有更有效的方法? Dim XMLDict Sub ParseXML(ByRef RootNode As IXMLDOMNode) Dim Counter As Long Dim RowList As IXMLDOMNodeList Dim ColumnList As IXMLDOMNodeList Dim RowNode As IXMLDOMNode Dim ColumnNode As IXMLDOMNode Counter = 1 Set RowList = RootNode.SelectNodes("Row") For Each RowNode In RowList Set ColumnList = RowNode.SelectNodes("Col") Dim NodeValues As […]

循环遍历ListObject中的行来删除它们是非常缓慢的

我有一个〜500行的ListObject表,我也有一个命名的范围内的4个值。 对于500行,可能会重复(随机)出现30个唯一值,我想删除其值不在指定范围内的所有行。 我有以下的工作,但它比预期的运行速度慢(约2分钟): Sub removeAccounts() Dim tbl As ListObject Dim i As Integer Set tbl = ThisWorkbook.Sheets("TheSheet").ListObjects("TheTable") i = tbl.ListRows.Count While i > 0 If Application.WorksheetFunction.CountIf(Range("Included_Rows"), tbl.ListRows(i).Range.Cells(1).Value) = 0 Then tbl.ListRows(i).Delete End If i = i – 1 Wend End Sub 我不确定是对工作表函数的依赖,还是只是循环放慢行速度。 有没有办法来过滤listobject并放弃其余的? 我正在考虑只是夹一个进度条,让用户可以看到发生的事情…

Excel电子表格列可以像普通数据库表列一样编入索引吗?

我有一个客户试图使用一个75MB的Excel电子表格作为数据库。 他们抵制移动到其他任何东西。 我不知道索引Excel电子表格的方法,所以我想我会问。 我做了Google的“索引Excel”,但是我没有find任何东西。 Excel中似乎有一个“索引”function,与数据库索引无关(除非我读错了)。 编辑(附加信息):一个水晶报告已被写入这个电子表格,它有40,是40,子报告,都与相同的多标签电子表格。 这很疯狂,但他们是这么devise的。 处理数据的时间非常荒谬,如果数据被编入索引,它仍然会很慢,但是速度会减慢100倍。

我怎样才能加快从C#中创buildExcel电子表格?

我目前正在使用C#COM Interop使用Excel 2007编写大约200个Excel电子表格。 不幸的是我需要大约4分钟的时间来写这200张纸 – 每张纸都有大约1000行,每行8-10列。 我如何加快速度? 我的代码基本上是这样的: var xlApp = new Excel.Application(); xlApp.DisplayAlerts=false; foreach (x in z) { var wb = xlApp.Workbooks.add(XLWBATemplae.xlWBATWorksheet); var ws = (Worksheet)wb.Worksheets[1]; //fill data into sheet wb.SaveAs(fileName); wbClose(); } 澄清:我现在正在填充每个单元格 我会尝试一些你的build议,然后接受最好的解决scheme。

如何在input数值时停止计算Excel-DNA函数

我已经在c#中实现了一些复杂而计算量大的函数。 要在Excel中使用它,我已经通过Excel-DNA创build了一个Excel-AddIn。 现在,当我在Excel中调用函数并开始input值时,即使在完成所有input之前,它也开始计算。 更重要的是,当我点击单元格并更改一些input时,函数也会重新计算。 通常我不介意。 但是由于performance缓慢,它变成了一场考验 有没有办法抑制这种行为? (设置计算手动似乎没有工作)基本上我想要的Excel-DNA公式(重新)只有当F9按下计算。 如果任何人有另一种语言的解决scheme,我会很乐意使用它作为一个灵感,并将其移植到C#。

Excel 2003:为什么创build到其他电子表格的链接需要这么长时间?

我的Excel应用程序创build到其他Excel文件的链接。 创build1个单元的链接大概需要1秒,但是我有几百个单元链接,所以它的速度很慢。 源文件打开或closures的速度没有区别。 但是,我注意到,手动创build链接(例如,通过手动将包含链接的公式复制并粘贴到其他单元格中)在打开源文件时速度更快。 在我的程序中,我将Application.Calculationconfiguration为Manual而不是Automatic。 我尝试完成两种方式的链接(请注意,这不是一个真正的代码,但我希望它显示我的意思): 1.使用范围内的每个Cell的foreach循环将公式链接复制到Range("A1")的外部源: Cell.FormulaR1C1 = Range("A1").FormulaR1C1 2.将公式从Range("A1")复制到另一个范围,而不使用foreach循环: Range("thisIsMyTargetRange").FormulaR1C1 = Range("A1").FormulaR1C1 这两种方法同样缓慢,正如我所说,我已经检查了上述两个方法与源文件打开和closures。 有什么办法可以加速吗? 有没有人知道Excel 2003中的链接机制,以提供有关如何改善链接性能的build议?

使用EPPlus与Spreadsheet Gear读取/写入多个文件时的性能差异

我已经在EPPlus和Spreadsheet Gear之间做了一个简单的性能testing,看看是否有任何显着的差异,可以购买Spreadsheet Gear。 我不是任何应用程序的专家,所以有可能testing不是最有效的方式。 testing执行以下操作:1.打开一个具有1000行和3列的现有Excel文件。 将这三个值保存到保存到List <>中的实体中。 2.打开一个新的Excel对象3.用每列的标题创build一个标题行(粗体)。 4.回写1000个实体。 5.保存新的Excelfile。 如果我一旦EPPlus出来赢家(大约是EPPlus = 280ms,SG = 500ms)运行这个testing。 如果我连续10次运行testing(for循环打开,复制,保存10个单独的时间),Spreadsheet Gear的速度更快(大约每个文件的时间:EPPlus = 165ms,SG = 95ms)。 对于20次testing,近似时间是EPPlus = 160ms / file和SG = 60ms / file。 看起来(至less在某种程度上),电子表格齿轮越来越快,我创build的文件越多。 任何人都可以解释为什么运行连续testing时EPPlus是较慢的? 我可以修改代码来改变它吗? EPPlustestingfunction: var timer = new Stopwatch(); timer.Start(); var data = new List<Item>(); using (var excelIn = new ExcelPackage(new FileInfo(folder + fileIn))) { […]