Tag: 性能

Excel – 获取单元格格式很慢

我正在使用C#从Excel文件中提取数据。 我需要从工作表中获取文本和一些小的格式化数据。 我的testing表有115行和10列。 performance似乎呆滞。 如果我只使用下面的代码拉出文本,则需要大约2秒的时间才能运行。 如果我检查字体(在if(c.Font.Bold == null …..行),它会上升到8秒,如果我得到的边界信息,然后上升到17秒。 问题是,我会有很多很多的工作表,我需要从中提取数据,速度将成为一个问题。 有什么build议,我可以做些什么来加快速度? 我真的很感激任何帮助。 foreach (Range c in oSheet.UsedRange.Cells) { var txt = c.Text; if (c.Font.Bold == null || c.Font.Italic == null || Convert.ToInt32(c.Font.Underline) > 0 || Convert.ToBoolean(c.Font.Bold) || Convert.ToBoolean(c.Font.Italic)) txt = ""; var borderBottom = c.Borders.Item[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom].LineStyle; var borderTop = c.Borders.Item[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeTop].LineStyle; var borderLeft = c.Borders.Item[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft].LineStyle; var borderRight […]

Excel VBA – 当UDF包装VLOOKUP时,奇怪的行为和糟糕的performance

我想编写一个包装VLOOKUP的用户定义函数。 它只需要引用数据应该被导入的列,并且假定ID在列A中并且有less于3000行要search,它将执行VLOOKUP。 Function AutoVlookup( importFrom As Range) As Variant Dim arg1, arg2, arg3, arg4 As Variant Dim arg1Str, arg2Str As String arg1Str = "$A" & Application.Caller.row 'get ID arg1 = Application.Caller.Parent.Range(arg1Str) arg2Str = "$A$1:$" & Split(cells(1, importFrom.column).Address, "$")(1) & "$3000" arg2 = importFrom.Parent.Range(arg2Str) 'get range to search in (in other workbook) arg3 = importFrom.column 'get […]

在C#中更快的Excel文件访问

我的C#应用​​程序从excel文件中获取大量数据并处理,然后将其写回到文件中。 问题是从Excel文件加载数据时,需要一些时间(大约7000字段的Excel需要30秒) 我想让它变得更快,有没有什么方法可以使它在更长的时间内更快? 我用来获取数据的代码是: streamReader = new StreamReader(@"ExcelPath.txt"); string path = streamReader.ReadLine(); //An Excel Application ==(contains)==> [Many] Excel WorkBook ==(contains)==>[Many] Excel WorkSheets==(contains)==>[Many] Ranges Microsoft.Office.Interop.Excel.Application excelapp = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook myworkbook = excelapp.Workbooks.Open(path, 0, false, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true); Microsoft.Office.Interop.Excel.Sheets myworksheets = myworkbook.Worksheets; Microsoft.Office.Interop.Excel.Worksheet myworksheet =myworksheets.get_Item(1); Microsoft.Office.Interop.Excel.Range range = myworksheet.UsedRange; […]

java:ByteArrayOutputStream.toByteArray()的性能

我正在写一个poi工作簿到一个ByteArrayOutputStream为了获取字节,并通过肥皂消息发送它们。 获取ByteArrayOutputStream没有问题,但调用.toByteArray()非常缓慢,并占用了大量的CPU。 我试图转换的工作簿非常大。 有没有人对我如何加快速度提出任何build议? 谢谢你,杰森

如何在Excel VBA中更好地pipe理内存以防止macros变慢?

背景 我inheritance了相当多的Excel VBA代码,这些代码很笨拙,而且运行缓慢。 该代码将用户input模拟成千上万次,然后生成一个输出文件发送给其他用户。 到目前为止,通过消除复制/粘贴,通过在数组中工作,而不是直接访问表单和单元格,通过删除不必要的代码,以及将许多易失性公式重新加工成更好的东西,我在性能上取得了很大的进步。 在进行更改之前,运行此报告以模拟用户input每个用户需要大约65秒(并且大约有4,300个用户)。 这出来了279,500秒(大约77.6小时)。 这是假定一个恒定的速度,macros观开始的速度相同。 事实并非如此。 实际上,这个macros在夜间和夜间进行处理的速度相当缓慢,而且每个用户的时间都超过了120秒。 问题 在我的代码清理和性能改进之后,我得到了每个用户10秒左右的启动macros,这是一个很好的速度。 我昨天晚上让macros观运行一夜,然后在今天上午看到现在每个用户需要花费大约90秒的时间,所以我在一夜之间performance了很大的性能下降。 我的问题是:如何防止macros随时间stream逝而发生减速? 研究 我不是没有想法。 目前,我的想法是,我需要closures和重新打开Excel工作簿,因为他们陷入了垃圾。 我有一个想法是也许使用本地VB.NET应用程序来打开Excel工作簿并运行macros。 每500名左右的用户,我可以在工作簿中的单元格某处写入相关的variables,保存并closures工作簿,然后重新打开它以提取我离开的位置。 这对我来说似乎不是很优雅。 另外,说服别人需要引入“新”技术(VB.NET)可能是困难的。 人们对此很奇怪,更喜欢本地的VBA解决scheme。 有没有更好的方法来pipe理Excel,以便我不必创build一个新的VB.NET应用程序,并执行保存/closures/打开? 我想补充一点,没有特定的违规代码,随着时间的推移,它只会变慢(仍然有效)。

有没有一种更有效的方法来加载10,000行Excel到Excel中?

我从Excel中加载数据填充对象,即老师(姓,名,用户名)。 然后将这些教师对象放在一个列表中,进行进一步的操作和分析(即查找匹配和其他模式)。 我的做法是使用xlrd模块从excel中加载数据。 for row in range(11) : lastName = sheet1.cell_value(row,3) firstName = sheet1.cell_value(row,1) userID = sheet1.cell_value(row,0) profList.append(tempProf) 所以这个方法需要我的电脑20秒只做12行,我需要这样做的10,000。 我的问题是,还有另外一种更有效的方式来加载这样的数据吗? 我开放出去的范围,所以如果这个问题听起来很愚蠢,我很乐意听取替代scheme,谢谢

VBA集合增加速度:匹配两个列表,find什么不匹配

我必须大量的Excel表(行7500和16000)。 我需要查看列表1中的项目不在列表2中,列表2中不包含列表1中的项目,然后将这些结果粘贴到第三个表格中。 我决定将这两个列表存储在两个集合中。 到目前为止效果很好。 当我试图循环访问集合来查找与计算机不匹配的内容时,由于文件太大而冻结。 我怎样才能改变我的代码,使其更快? 我觉得有必要有一个更好的方法来做到这一点,而不是循环遍历列表一和列表二中的每一个我。 谢谢! Sub FullListCompareFSvDF() Worksheets("FundserveFL").Activate 'Open New Collection and define every variable Dim FSTrades As New Collection Dim c As Long Dim i As Long Dim z As Long Dim searchFor As String 'enter the items into the list. There are blank rows and so the first IF Statement […]

在Excel VBA中,易失性Offset函数非常慢。 什么是替代scheme?

我在Excelmacros中遇到性能问题。 一个特定的代码运行速度非常慢。 我认为原因是Offsetfunction。 我在网上发现,这是一个易失性函数,重新计算了很多。 奇怪的是我用它作为VBA函数,所以我不知道它是如何影响性能的,因为它不需要重新计算。 这是我如何使用偏移function: For i=0 To 10 For P=0 To 3 For T=0 To 3 Range("C9").Offset(6 * i + T, P).Value = effect(i,P,T) Next Next Next 有没有更快(非易失性)的select?

更快的方式来运行小的VBAmacros?

我正在使用这个需要运行近250ms的小代码:( i是一个循环的增量) Sheets("sheet1").Select val1 = Sheets("sheet2").Range("D" & Sheets("sheet1").Range("A" & i).Value + 1) val2 = Sheets("sheet2").Range("E" & Sheets("sheet1").Range("A" & i).Value + 1) Sheets("sheet1").Range("G" & i).Value = val1 Sheets("sheet1").Range("O" & i).Value = val2 我不知道为什么现在这么久了。 是因为我把数据从一个表格移动到另一个表格? 也许使用一个variant会更快? 你有什么指示我可以做些什么来加快速度? (这个循环完成300-400次,所以总的时间太长。) (不知道这里是否有更好的地方,或在“代码评论”,让我知道如果我错了) 感谢您的帮助! [编辑]这是您的build议更改后的循环,谢谢大家,这减less了30%的时间。 不过对我来说还是太长了,我已经注意到了你的build议,把表格sh1和sh2全部复制到一张表中,我会尽力去实现。 如果您有其他想法,请保留我的发帖=) i = 2 While sh1.Cells(i, 1).Value <> "" val5 = sh1.Cells(i, 1).Value2 + 1 […]

Javascript中的财务计算器运行速度比Excel慢得多

我已经将Excel退休计算器移植到Javascript中。 原始Excel中有35个工作表,其中包含许多recursion计算,所有这些工作表都转换为Javascript。 Javascript运行速度较慢(与Excel瞬时相比1-2秒)。 我正在cachingrecursion计算,以加快速度并防止浏览器中的堆栈溢出。 尝试使JavaScript更快是否现实? Excel如何pipe理如此高效? 我读过一个地方,Excel只是在单元格的先例被修改时重新计算。 即使如此,在我看来,无论需要重新计算多less数据,Excel都是非常即时的。