Tag: 性能

VSTO与VBA相比性能下降

我是新的stackoverflow因此,我会直接从我的问题开始。 我有几年的经验,通过集成的VBA开发macros的Excel,半年前我开始学习新的C#语言。 我喜欢它,这是可能性,我也find了通过Visual Studio直接在C#中开发Office插件(需要VSTO)的选项。 我的问题是,在做了多个testing之后,我试图比较使用C#创build的插件和使用VBA创build的macros的速度(例如,将string“testingstring”粘贴到每个单元格从A1到A10 000单独)。 问题是集成的VBA比使用Visual Studio(C#)创build的Addin快了好几倍。 当时我决定不打扰这个问题,但是后来我遇到了同样的问题,但是这次却不是cca 10秒(VBA)的过程花了2分多钟! 经过对google的研究,我发现VSTO在性能方面并不好,特别是当你需要你的应用程序与Excel交互的时候(所以有办法如何解决这个问题,比如把你的数据保存到dynamic数组中,然后直接填充整个数组放入activesheet); 然而,有些情况下,你只需要与Excel进行交互(就像我必须dynamic解除工作簿中的许多工作表一样…在这里你只需要说ActiveSheet.Unprotect) 我对你们的问题是,有没有什么办法,除了从慢的VSTO,如何创build(也许一些其他软件)Addins的Excel / Word /其他Office产品,很容易部署? 非常感谢你。 问候,罗伯特

以更高的性能将数据从Web导出到Excel

我们正在使用不同的框架,我不能使用.NET GridView。 我们有一个不同的集合types和专门的网格。(不从.NET控件inheritance)我需要将数据从网站导出到MS-Excel。 这是代码。 Me.Response.Clear() Me.Response.ContentEncoding = System.Text.Encoding.GetEncoding(1254) Me.Response.AddHeader("Content-Disposition", "Attachment;filename=Calls.xls") Me.Response.AddHeader("Content-type", "application/ms-excel") For n As Integer = 0 To Calls.Count – 1 Me.Response.Write(Calls(n).ID & Chr(9)) Me.Response.Write(Calls(n).ID & Chr(9)) Me.Response.Write(Calls(n).DateCreated & Chr(9)) Me.Response.Write(Calls(n).Employee.Name & Chr(9)) Me.Response.Write(Calls(n).NetDurationInText & Chr(9)) Me.Response.Write(Calls(n).Result.Name & Chr(9)) Me.Response.Write(vbCrLf) If n Mod 50 = 0 Then Me.Response.Flush() End If Next Me.Response.End() 但排在2000-3000以后,网站反应很慢。 尽pipe每隔50行刷新一次,2k-3k行大约需要5分钟。 […]

使用Excel数据库缓慢加载页面

我正在使用一个包含大约1600行和4列的Excel电子表格来填充数据库,以便在Ruby应用程序中显示。 这导致页面加载时间超过20秒。 我该如何改善performance? 从db \ seeds.rb: oo = Excelx.new("RatingsDB.xlsx") oo.default_sheet = oo.sheets.first 2.upto(oo.last_row) do |line| Rating.create(name: oo.cell(line,'B'), score: oo.cell(line,'C'), when_rated: oo.cell(line,'A'), comment: oo.cell(line,'D')) end 从app \ controllers \ ratings_controller.rb: def index @ratings_by_name = Rating.paginate(:order => 'name ASC', :page => params[:page], :per_page =>10, :conditions => ['name like ?', "%#{params[:search]}%"]) @ratings_by_score = Rating.paginate(:order => 'score DESC', :page […]

使用Range的excel性能

我是VBA的新手,现在我正在开发一个速度绝对一切的项目。 所以当我写代码的时候,我注意到工作表中的很多单元格都被命名为范围,并且在函数中被明确地引用,如下所示: function a() if range("x") > range("y") then end if … (just imagine a lot of named ranges) end function 我的问题是,我应该修改这些函数,以便这些命名范围中的值作为parameter passing: 'i can pass in the correct cells when i call the function function a(x as int, y as int) if x > y then end if … end function 这会加快一点吗? 这些function几乎不断地被调用(除了当进程被有意睡觉时)与RTD服务器通信。

Excel格式化HTML数据并写回到相同的单元性能问题

我有一个包含非格式化的HTML数据的列“A”的Excel。 要格式化这些数据,我遵循以下步骤: 1)从第一个单元格中取出非格式化的html数据并将其粘贴到Internet Explorer上,并将格式化的文本从html页面粘贴到excel 列“E” ( 带有标签的HTML文本在Excel单元格中进行格式化 ) 2)从excel列“E”,从每行读取数据到最后一行,并粘贴到保存格式的原始单元格 ,我使用下面的代码。 Sub ConcatenateRichText(Target As Range, Source As Range) Dim Cell As Range Dim i As Long Dim c As Long i = 1 With Target .Clear For Each Cell In Source .Value = .Value & vbLf & Cell.Value Next Cell .Value = Trim(.Value) End With For […]

将WorkSheet.UsedRange分配给PowerShell Excel自动化中的variables时性能会受到影响

我是新来的COM对象的工作,我已经读了我可以了解这个问题,但我似乎无法弄清楚这种行为。 我怀疑在封面下有什么明显的东西,我只是不明白。 我使用LogParser自动处理IIS日志,并在Excel中构build报告。 我开始使用我写的PowerShell模块中的以下代码块来获取最后一列: $used = $WorkSheet.usedRange $lastCell = $used.SpecialCells($xlCellTypeLastCell) if($Axis -eq 'Row'){$tmpLast = $lastCell.Row} if($Axis -eq 'Column'){$tmpLast = $lastCell.Column} Release-Ref $used $ WorkSheet是一个有效的工作表对象。 这个代码块在小工作表上效果很好,但随着工作表的大小增长,执行时间将会越来越长。 如果纸张太大,则会完全挂起。 此外,它会开始挂起我正在尝试使用的其他应用程序,我只是等待它完成,然后才能使用我的电脑。 这不是一个资源问题,因为我在一台配备24GB内存的i7上运行。 当我跨过PowerShell ISE(2.0)中的代码时,发现当我踩到Release-Ref $used时它挂起来了。 我不知道为什么它只会在大型工作表中挂起。 Large由25K行和15-20列定义,对于Excel可以处理的数量并不大。 这是Release-Reffunction: function Release-Ref{ [CmdletBinding(DefaultParameterSetName='Single')] param( [Parameter(Mandatory=$true,Position=0,ParameterSetName='Single')] [System.__ComObject]$ref, [Parameter(Mandatory=$true,Position=0,ParameterSetName='Array')] [System.__ComObject[]]$refs, [Switch]$Final ) if($Final){ [System.GC]::Collect() [System.GC]::WaitForPendingFinalizers() } if($PSCmdlet.ParameterSetName -eq 'Array'){ foreach($ref in $refs){ if($ref […]

性能 – 在单元格中循环 – 在Excel VSTO中用C#压缩“存储为文本的编号”警告

我使用来自数据库的数据填充ListObject,并在插入数据之前对来自VarChar(&similar)的ListColumns进行格式化。 这个效果很好,但现在一些受影响的单元格显示“Number Stored As Text”错误。 答案https://stackoverflow.com/a/21869098/1281429正确地抑制错误,但需要循环所有单元格(因为它是不可能执行范围上的操作)。 不幸的是,对于大范围,这是不可接受的缓慢 。 (NB – 如果你在Excel中手动执行,它是闪电般的) 这是C#中的代码片段(针对特定的列): var columnDataRange = listColumn.DataBodyRange var cells = columnDataRange.Cells; for (var i = 1; i < cells.Count; i++) { InteropExcel.Range cell = cells[i, 1]; if (cell.Count > 1) break; if (cell.Errors != null) { var item = cell.Errors.Item[InteropExcel.XlErrorChecks.xlNumberAsText]; item.Ignore = true; } } 有没有人知道这样做的更快的方式? […]

Excel VBA – 额外的表格导致我的VBA运行速度变慢

我有一个运行速度非常快的macros,当我运行一个与2张交互的VBA子/函数时,但是当我添加其他与子计算无关的工作表时,子执行时间会延长10倍。 我试图禁用其他工作表让我的子/function更快,但我找不到解决scheme。 任何人都可以帮助我? 提前致谢。 这是我的代码,join其他表格的速度变慢的部分: Dim i, j, k As Integer 'Fluxo de Caixa iterators i = 11 j = 10 'DB interators k = 2 'cachFlowRef row rowReference = Range("cashFlowRef").Row Debug.Print timer.TimeElapsed Do Until Cells(i, 2) = "T" If Cells(i, 2) <> "" Then Do Until Cells(rowReference, j).Value = "" If Cells(i, j).Value <> […]

VSTS加载testing – excel报告 – 工作簿类的添加方法失败

我正在使用Visual Studio VSTS进行负载testing,我正在尝试创buildExcel报告。 当点击“创buildexcel报告”button时,打开新的excel表格,出现以下错误 Add method of Workbooks class failed. 我如何解决这个问题? 我的环境详情: Windows 7 SP1 32位(安装在c://) Visual Studio终极2013(安装在d://) 微软Office 2010 这是因为兼容性问题或由于视觉工作室安装在d://? 任何人都可以请帮忙?

使用Excel Interop在工作表中列出所有validation对象,而不必在每个单元格上迭代

我想知道是否有可能列出所有Excel.Validation对象的特定工作表没有迭代每个单元格。 迭代每个单元花费很多时间。 有时,validation约束应用于大范围(未命名)。 我想要 : 快速列出所有的约束对象 更改约束(Validation.Formula1) 是否有可能没有迭代每个单元格? 这段代码需要很多时间: foreach (Excel.Range cell in mySheet.UsedRange) { string newFormula1 = …; cell.Validation.Modify(Formula1: newFormula1); } 其实,我正在寻找mysheet.ValidationList对象。 谢谢。