使用 Excel 对象快速设置数字格式
Posted
技术标签:
【中文标题】使用 Excel 对象快速设置数字格式【英文标题】:Setting number format using Excel object quickly 【发布时间】:2017-08-08 16:39:28 【问题描述】:我正在将 46 列的 12,000 条记录作为生产报告写入 Excel 文件。填充数据时不显示工作表。
以前的 *** 信息教会我使用对象数组将值放入范围内以提高速度。我曾希望这也适用于格式化值。
代码片段:
objExcel.Calculation = XlCalculation.xlCalculationManual
objExcel.ScreenUpdating = False
dcel = objWS.Range(objWS.Cells(rowdatastart, 1), objWS.Cells(rowdataend, nProdReportCol.ProdReportColCount - 2))
dcel.Value = aobj
dcel.NumberFormat = bobj
objExcel.ScreenUpdating = True
objExcel.Calculation = XlCalculation.xlCalculationAutomatic
aobj 和 bobj 是适合范围的 object(,) 数组。 bobj 包含诸如“h:mma/p”之类的字符串以将时间显示为“12:23a”,以及“0.00”以将数字显示为“53/25”。
“dcel.value = aobj”需要半秒钟。 “dcel.NumberFormat = bobj”需要 38 秒。
对我错过/误解的内容有什么建议吗?我宁愿 7 秒的报告(启动 excel、写入、保存、关闭 excel)而不是 45 秒,因为我希望数字/日期/时间按照我的选择显示。
【问题讨论】:
不适用于格式。也许您可以创建范围对象,以便可以一次格式化所有需要某种bobj
格式的单元格;或者您可以使用条件格式一次设置整个范围。由于您的代码正在运行,这可能是Code Review 上的最佳选择
【参考方案1】:
如果每列都有自己的格式,请尝试按整列格式化。此外,对于每一列,不要使用数组,如果格式相同,则可以只使用单个字符串。
对每一列都这样做。
请尝试并提供反馈。
【讨论】:
【参考方案2】:经过更多的实验,我找到了与 S Meaden 相同的解决方案。由于 46 列中只有 14 列不是“常规”,因此我收集了日期、时间和 2 位十进制数字的列号。遍历每一个,为 12000 条记录和 1 列生成一个范围,设置格式。所有列都需要大约半秒时间。
奇怪的是,使用 46 个对象数组设置一行 46 个单元格所花费的时间比一列中的 12000 个单元格要长得多,但你就是这样。
谢谢大家。
【讨论】:
以上是关于使用 Excel 对象快速设置数字格式的主要内容,如果未能解决你的问题,请参考以下文章