使用 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 对象快速设置数字格式的主要内容,如果未能解决你的问题,请参考以下文章

Excel中灵活运用运算(乘)快速将文本格式批量改为数字格式

excel中怎样快速将科学计数变为正常数字

如何将Excel日期快速转化为文本格式?

如何把文本转化为数字

excel单元格格式设置?

数字前面加负数怎么设置