使用 Excel 对象快速设置数字格式

Setting number format using Excel object quickly

我正在将 12,000 条 46 列的记录作为生产报告写入 excel 文件。工作表在充满数据时不显示。

以前的 Whosebug 信息教会我使用对象数组将值放在范围内以提高速度。我曾希望这也适用于格式化值。

代码片段:

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 秒。

对我的 missed/misunderstood 有什么建议吗?我宁愿 7 秒的报告(开始 excel、写入、保存、关闭 excel)而不是 45 秒,因为我希望 numbers/dates/times 按我的选择出现。

如果每列都有自己的格式,请尝试对整列进行格式化。同样对于每一列不要使用数组,如果格式相同那么你可以只使用一个字符串。

对每一列都这样做。

请尝试并提供反馈。

经过更多的实验,我找到了与 S Meaden 相同的解决方案。由于 46 列中只有 14 列不是 "General",我收集了日期、时间和 2 位小数的列号。遍历其中的每一个,为 12000 条记录和 1 列生成一个范围,设置格式。所有列都需要大约半秒的时间。

奇怪的是,使用 46 个对象数组设置一行 46 个单元格比在一列中设置 12000 个单元格花费的时间要长得多,但就是这样。

谢谢大家