Tag: 性能

total = total + ActiveCell.Value不适用于每个循环

我有这个代码,我想在另一个工作表中查找一些单元格,如果他们匹配条件,然后添加一个相邻的单元格总数,返回到单元格函数被调用。 Function collectUtfall(A1 As String, Ax As String) Dim rng As Range Dim total As Long: total = 0 Set rng = Sheets("Utfall").Range("M2:O272") Dim cell As Range For Each cell In rng If StrComp(cell.Offset(0, 1).Text, Ax, vbTextCompare) = 0 Then total = total + ActiveCell.Value Else End If Next collectUtfall = total End Function 问题是执行时出现“循环引用”错误。 […]

如何通过Java更新Excel表格的字符集

我从数据库中提取俄罗斯字符,并生成一个Excel表。 但不幸的是,在提取excel表中,我必须手动将字符集更改为“UNICODE(UTF-8)”,否则我无法看到俄罗斯字符。 有没有人知道如何通过Java更新这个字符集(我不是要求转换的价值)? 让我知道是否需要从我的结尾提供任何东西。

运行一个缓慢的公式macros

我的macros的工作方式不错,但数据量不是太多((<5-10列),看起来是减慢macros的两个额外的列公式引用的数据,特别是与此代码。 lastrow = cells(rows.count,7).end(xlup).row for i = 5 to lastrow cells(i,8).formular1c1 = "=100*ln(rc[-1]/r[-1])" next i for i = 22 to lastrow cells(i,9).formuar1c1 = "=stdev(r[-20]c[-1]:rc[-1])*(251)^.5" next i 我发现这篇文章中的macros观问题带来了反复出现的问题。 有没有人知道这个问题的解决办法? 或者提供一些加快macros观的提示?

Excel – VBA – 访问图表轴 – 速度问题

我正在运行下面的代码400次。 我有60张图表。 执行时间是300秒。 如果我删除这一行 minVal = 0.02 * (cht.Chart.Axes(xlValue).MaximumScale – cht.Chart.Axes(xlValue).MinimumScale) 速度提高到190秒。 这条线不会影响任何给定的minVal被0覆盖(就testing目的而言)。 我期待着明白为什么访问图表的轴是如此费时,以及解决方法。 Sub quickAdjustLabels() Dim cht As Excel.ChartObject For Each cht In ActiveSheet.ChartObjects isProdChart = 0 If cht.Chart.SeriesCollection(1).ChartType <> 5 Then 'different from pie minVal = 0.02 * (cht.Chart.Axes(xlValue).MaximumScale – cht.Chart.Axes(xlValue).MinimumScale) minVal = 0 For Each myCollection In cht.Chart.SeriesCollection 'if Stack and if […]

用EPPlus保存Excel文件

我最近更新了我的.NET应用程序使用EPPlus库来保存Excel文件(以前使用MS COM互操作库),性能更好(速度提高了大约50%),但实际保存文件的速度很慢(在某些情况下,比使用MS COM互操作时保存调用慢)。 Excel工作簿大约有120万个单元格(大约20000行,分成32个工作表,每个表格平均大约60列),文件大小约为6.2 MB。 获取表格的数据后,创build和保存的过程大约需要15-16秒。 创buildEPPlus ExcelPackage大概需要4秒钟,做一些格式化(单元格注释,下拉等等)大约1秒钟,然后将文件保存大约10秒钟到C:驱动器上的一个位置。 有什么办法来提高创buildExcelPackage或保存Excel文件的性能吗? 这里是创buildExcelPackage对象的方法: Public Shared Function CreateExcelPackageFromDS(ByVal ds As DataSet) As ExcelPackage Dim xlPackage As New ExcelPackage() Dim oBook As ExcelWorkbook = xlPackage.Workbook 'Load each table into worksheet For Each dt As System.Data.DataTable In ds.Tables Dim ws As ExcelWorksheet = oBook.Worksheets.Add(dt.TableName) ws.Cells.LoadFromDataTable(dt, True) ws.Cells.Style.Locked = False Next Return […]

使用RubyXL编写xlsx文件需要花费很长时间处理大量的单元

我在我的Rails应用程序中使用RubyXL gem生成4-5张工作簿。我们正在生成大量的单元格(超过5000(146 * 26))的Excel。 写入该文件需要20多分钟,并消耗大量内存。 其中一张表具有dynamic数据,其中有一些样式,如边界的背景颜色,字体颜色,粗体文本等。我​​正在使用此代码段。 workbook = RubyXL::Workbook.new() sheet = workbook.worksheets[0] cell = sheet.add_cell(row, col, text) cell.change_fill('#fff') cell.change_font_color('#000') cell.change_font_bold(true) 我试图通过删除一些边框样式来减less时间,从而减less了书面的时间,但仍然花费很长时间。 所以我删除了上面提到的其余样式。 之后,现在约1分钟左右。 你能否build议我将样式应用于单元格,以便花费更less的时间,而不会影响性能。 我会很乐意回答任何关于这个问题或者如果我错过了任何问题。

VBA代码 – 跳过一些部分,如果其他人被执行

我已经写了这段代码,但已经消除了之间的额外填充。 根据选定的时间点,它将隐藏适当的行。 容器1将始终被填充,但是,如果没有select另一个容器,我希望它隐藏所有剩余的行而不处理其余的代码。 所以如果容器1和2被选中,它将运行这些代码而不运行其余的代码。 将其重写为循环会非常复杂,因为有很多可能的时间点,所以更多的是跳过与代码无关的问题。 几乎像goto线或什么的? 我不知道! 有没有其他方法可以使这段代码比暂时禁用DisplayPageBreaks,ScreenUpdating和Enable Events更有效? 没有计算在页面上执行,只有行隐藏。 例如,如果Q26是空白的(没有容器2),我希望它到代码的末尾而不处理任何事情,但是我怎么写它,它仍然处理其余的代码。 谢谢你的帮助 If Worksheets("StabDataCapture").Range("q26").Value = "" Then Worksheets("Template").Rows("142:1048576").EntireRow.Hidden = True Else 谢谢你的帮助! Sub Containers() Dim xPctComp As Integer Application.StatusBar = "Container 1: " & _ Format(xPctComp, "##0%") ActiveSheet.DisplayPageBreaks = False Application.EnableEvents = False Application.ScreenUpdating = False 'CONTAINER 1 ROW HIDES '@@@@@@@@@@@@@@@@@@@@@@@@@@@ 60°C @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 'Show/Hide 1@60 […]

Excel 2010的自动化比以前慢了5倍

我们有几个程序通过com自动化生成excel文档,一些用VB6编写,一些用python编写。 无论使用哪种编程语言,这些程序的运行速度都要比旧的Excel版本低5倍。 对python版本进行性能分析显示,额外的运行时间主要用于低级别的comfunction(内置方法绑定和调用),所以每个com调用都会放慢速度。 任何提示,我们如何加快速度,也许在Excel 2010(安全?)设置? 谢谢,托马斯

在Excel中multithreading计算速度很慢

我想知道是否有任何方法来控制Excel的计算,使WB中的几张纸重新计算并行,而其他的不是。 我的问题是,在目前设置的顺序计算过程,我已经花了太长时间。 这个序列是从VBA驱动的,如下所示:1)VBA调用一个插件(excel-dna vb.net插件,控制数据读取器和附加数据库)2)插件将数据返回到表1.表2-3重新计算按顺序(第2页,然后是第3页)3)第4页到第10页按顺序重新计算,但是由于每个页面独立地只与页面2相连,所以它们理论上可以重新计算 – 但如何做到这一点? 4)再次通过1)中描述的通过vba addin调用新数据开始处理) 在笔记本电脑上运行一个数据子集(64位,32位excel,英特尔i7)需要54.6秒。 有趣的是,如果我closuresmultithreading,它需要25.8秒! 更重要的是,如果我在一台超级快速的机器上运行它(2 x Intel Xeon X5570,四核“Nehalem”架构,64位64位excel),它比我的笔记本电脑要慢,multithreading需要230秒,或者没有26秒。 我想知道是否有更好的方法可以利用多核心和multithreading。 缓慢的位似乎是优秀的重新计算,而不是外加速度。 任何build议感激。 编辑:上面的描述有点简化 – 实际上,我还有一个迭代的“calc / paste-vales / recalc”过程,在每张表4-10上运行(迭代继续进行,直到达到某个所需的灵敏度,只有这样计算完整的表格)。 我相信这使得在当前devise下运行一个wb计算是行不通的。 表4-10是相同的(硬编码input参数除外),彼此之间没有计算依赖关系。 如果每个计算过程(提到的迭代过程和表格计算)可以并行而不是按顺序完成,我认为整个过程会更快。 仅供参考,我已经进行了更为明显的精简和testing(分解公式,分离易失性函数等)。 在整个过程中运行整个数据集大约需要16个小时,这就是为什么我急于find一些方法来改进这一点。 谢谢!

导入与链接到Excel电子表格

我目前链接到六个Excel电子表格,主要是因为用户更容易/更好地编辑Excel中的数据(他们从来没有使用Access),并且任何更改都会立即反映出来,包括如果添加了新列然后准备好立即使用查询。 但是,链接而不是导入这些数据会有性能损失吗? 我的一些查询很慢,1-2分钟,有时可能需要2-3分钟才能保存查询。 我如何设置Access以在每次打开数据库时导入这些表单的新版本,是否值得呢?