setFormulaArray 太慢了

     2023-02-24     289

关键词:

【中文标题】setFormulaArray 太慢了【英文标题】:setFormulaArray too slow 【发布时间】:2021-06-08 07:02:33 【问题描述】:

我正在尝试编写一个 python 包装器,该包装器旨在从 csv(或 mysql)读取多个记录并更新工作表预定义范围的值,该范围由值单元格和公式单元格组成,我的目的是仅更新值单元格并保持范围内的公式单元格不变。

为了做到这一点,我首先尝试逐个设置单元格值,使用if跳过公式单元格,但是由于单元格超过10000个所以速度很慢,然后我尝试了setDataArray这是足够快但公式被值覆盖,然后我创建了一个数组并将值和公式设置到数组中并使用setFormulaArray 将值和公式放入范围内,该函数是我需要的,因为它需要多个分钟完成

我知道setFormulaArray 会更新公式,但我不需要这样做,但是由于 API 中没有选项可以跳过公式,我只能使用相同的公式来更新特定的原始公式细胞。

在使用setFormulaArry 时是否有任何解决方案可以提高性能,或者是否有任何解决方案可以仅更新值单元格并跳过某个范围内的公式单元格? 下面是我的代码

import uno
import time


#to open the libreoffice calc file
local_ctx = uno.getComponentContext()
smgr_local = local_ctx.ServiceManager
resolver = smgr_local.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", local_ctx)
url = "uno:socket,host=localhost,port=2083,tcpNoDalay=1;urp;StarOffice.ComponentContext"

uno_ctx = resolver.resolve(url)
uno_smgr = uno_ctx.ServiceManager
desktop = uno_smgr.createInstanceWithContext("com.sun.star.frame.Desktop", uno_ctx )
PropertyValue = uno.getClass('com.sun.star.beans.PropertyValue')
inProps = PropertyValue( "Hidden" , 0 , True, 0 )
document = desktop.loadComponentFromURL("file:///D:/salse.ods", "_blank", 0, inProps )


# get the sheet and read original data and formula from the sheet
sheets = document.getSheets()
xs = sheets["salse"]
cursor=xs.createCursor()
cursor.gotoStartOfUsedArea(False)
cursor.gotoEndOfUsedArea(True)
cra=cursor.getRangeAddress()


rng=xs.getCellRangeByPosition(cra.StartColumn,cra.StartRow,cra.EndColumn,cra.EndRow)
ft=rng.getFormulaArray()

#some code here to change values in ft.... 


# bellow took more than one minutes
rng.setFormulaArray(ft)

这只是对 setFormulaArray 性能的测试

【问题讨论】:

欢迎来到 SO!为什么您认为“API 中没有选项可以跳过公式”? crngs=cursor.queryContentCells(7) 呢?然后.getCells().createEnumeration().hasMoreElements().nextElement()... 见herehere... 或只使用MRI 感谢您的回答,我的意思是 "there is no option to skip formula"setting values 时,理想情况下,我期待像@ 987654335@,遇到公式单元格时会自动跳转到下一个数值单元格。但是它对您的建议很有帮助,我测试了queryContentCells(7),它返回了分割的范围,然后我可以在每个子范围上调用setDataArray,它不是那么完美,但可以提高性能。谢谢。 【参考方案1】:

更新1:

我仍然找不到理想的解决方案,但是,我的解决方案是为工作簿中的每个工作表创建一个相同的工作表,并在原始工作表中添加对完全相同单元格上新创建工作表的引用,例如:

example

sheetA 是原始工作表

sheetA-1 是新创建的

然后修改 sheetA 中的数据单元格以引用 sheetA-1

然后setDataArray更新sheetA-1中的整个范围,sheetA中对应单元格中的数据会自动变化

【讨论】:

for循环太慢了

】for循环太慢了【英文标题】:Forloopistooslow【发布时间】:2016-01-0113:01:38【问题描述】:我有以下代码:varCombinatorics=require(\'js-combinatorics\');varfs=require(\'fs\');cp=Combinatorics.cartesianProduct(["4","@","/\\\\","/-\\\\","^","∂","λ","α","(!" 查看详情

iPad 中的洪水填充太慢了

】iPad中的洪水填充太慢了【英文标题】:FloodfillinginiPadtooslow【发布时间】:2011-05-0901:19:28【问题描述】:我在iPad上为我的一个着色应用程序使用洪水填充。该应用程序基本上在图像的黑线内填充颜色,我可以毫无问题地做到这... 查看详情

InAppReview : SKStoreReviewController 太慢了

】InAppReview:SKStoreReviewController太慢了【英文标题】:InAppReview:SKStoreReviewControllerSoSlow【发布时间】:2017-09-2213:03:59【问题描述】:使用SKStoreReviewController进行inAppReview需要时间,直到出现提示,有什么方法可以让它显示得更快?另... 查看详情

插入 WStandardItemModel 太慢了

】插入WStandardItemModel太慢了【英文标题】:InsertinginaWStandardItemModelistooslow【发布时间】:2011-07-0417:59:53【问题描述】:我正在开发一个基于WT构建的应用程序。我们遇到了性能问题,因为它必须在与WStandardItemModel关联的WTableView中... 查看详情

Ucanaccess 太慢了

】Ucanaccess太慢了【英文标题】:Ucanaccessistooslow【发布时间】:2016-04-2708:03:07【问题描述】:我已正确添加了所有必要的JARS:Ucanaccess3.0.4commons-lang-2.6commons-logging-1.1.1hsqldbdjackcess-2.1.3我的数据库是100MB。仅使用Jacksess时,相同的查... 查看详情

为啥使用 information_schema 太慢了?

】为啥使用information_schema太慢了?【英文标题】:Whyisusinginformation_schematoomuchslow?为什么使用information_schema太慢了?【发布时间】:2017-02-2607:34:33【问题描述】:这是我的代码://dbssize$sql=\'SELECTtable_schemaDB_Name,Round(Sum(data_length+inde... 查看详情

获取数百万条记录太慢了

】获取数百万条记录太慢了【英文标题】:FetchingMillionsRecordsgoingtooslow【发布时间】:2018-07-3010:47:29【问题描述】:我正在尝试使用带有Fetching的聚集索引复制其他表中的6000万条记录。但是在2000万张唱片之后,它变得太慢了。我... 查看详情

导航到包含 ScrollView 的 ViewController 太慢了

】导航到包含ScrollView的ViewController太慢了【英文标题】:NavigatingtoViewControllercontainingScrollViewGoingtooSlow【发布时间】:2016-01-1807:55:50【问题描述】:这就是从ViewControllerA推送到ViewControllerB的方式UIStoryboard*mainStory=[UIStoryboardstoryboardW... 查看详情

呈现视图控制器太慢了

】呈现视图控制器太慢了【英文标题】:PresentingViewControlleristooslow【发布时间】:2020-05-2000:08:29【问题描述】:我已经在我的Swift应用中实现了FirebaseGoogle登录。我想在开始时检查它是否已经是登录用户。我是这样做的:overridefun... 查看详情

MySQL查询太慢了

】MySQL查询太慢了【英文标题】:MySQLquerytoomuchslow【发布时间】:2019-05-1423:21:59【问题描述】:我正在尝试查询以获取一些趋势统计数据,但基准测试真的很慢。查询执行时间约为134秒。我有一个名为table_1的MySQL表。在create语句... 查看详情

UIAlertController 在 iOS 9.3 中太慢了

】UIAlertController在iOS9.3中太慢了【英文标题】:UIAlertControlleristooslowiniOS9.3【发布时间】:2016-10-3123:35:19【问题描述】:在iOS9.3中执行任何按钮操作时,UIAlertController太慢。不确定是iOS9.3的问题还是缺少正确配置的内容。UIAlertContro... 查看详情

Vscode typescript 样式的组件太慢了

】Vscodetypescript样式的组件太慢了【英文标题】:Vscodetypescriptstyledcomponenttooslow【发布时间】:2020-10-1008:32:58【问题描述】:当我使用styledcomponent时,我的vscode类型检查太慢了我已经多次搜索过这个问题,但我在hit-hub上发现了一... 查看详情

Alamofire 序列化太慢了

】Alamofire序列化太慢了【英文标题】:AlamofireSerializationisTooSlow【发布时间】:2018-02-1321:27:43【问题描述】:由于某种原因,我需要很长时间进行序列化。我正在使用Alamofire和ObjectMapper来处理请求响应并将数据反序列化为对象。... 查看详情

谷歌云部署太慢了

】谷歌云部署太慢了【英文标题】:GoogleClouddeploysoslow【发布时间】:2017-03-0504:06:30【问题描述】:我正在使用GoogleCloudNodeJS托管。当我将应用程序部署到GoogleCloud时,我感到非常惊讶。每次部署都非常慢。第一次可能会很慢,但... 查看详情

Rails Assets 预编译太慢了~12hrs

】RailsAssets预编译太慢了~12hrs【英文标题】:RailsAssetsprecompileistooslow~12hrs【发布时间】:2014-02-2406:28:11【问题描述】:我是本地预编译资产likethisRAILS_ENV=productionbundleexecrakeassets:precompile,但是12小时太慢了。我不知道会发生什么!... 查看详情

函数 scipy.interpolate.interpn() 太慢了

】函数scipy.interpolate.interpn()太慢了【英文标题】:Functionscipy.interpolate.interpn()muchtooslow【发布时间】:2022-01-1117:37:45【问题描述】:我正在使用scipy.interpolate.interpn()在二维网格上的单个点插入一个值。问题在于,对于这个单点和2D... 查看详情

Swift:tableView.reloadData() 太慢了

】Swift:tableView.reloadData()太慢了【英文标题】:Swift:tableView.reloadData()waytooslow【发布时间】:2015-08-2317:06:01【问题描述】:我正在尝试在我调用以填充我的UITableView的异步请求之后执行tableView.reloadData()调用。该表会在15-20秒后显... 查看详情

javacv视频压缩太慢了

参考技术A可直接按默认设置即可。所有参数都调整好之后,点击开始压缩视频就可以了。视频压缩通常指的是通过特定的压缩技术,比如调节视频的参数等,从而达到缩减视频大小节省空间的目的。 查看详情