2017-08-08 116 views
1

我正在将具有46列作为生产报告的12,000条记录写入Excel文件。充满数据时不显示工作表。快速设置使用Excel对象的数字格式

上一个StackOverflow信息教会了我如何使用对象数组将数值放入速度范围中。我希望这也可以用于格式化值。

代码剪断:

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是适合的范围对象(,)阵列。 bobj包含显示时间为“12:23a”的字符串,如“h:mma/p”,以及显示数字为“53/25”的“0.00”。

“dcel.value = aobj”需要半秒。 “dcel.NumberFormat = bobj”需要38秒。

对于我错过/误解的任何建议?我宁愿7秒钟的报告(开始excel,写,保存,关闭excel)不花45秒,因为我希望数字/日期/时间出现在我选择的位置。

+0

不适用于格式。也许你可以创建范围对象,以便所有需要特定'bobj'格式的单元格可以一次格式化;或者你可以使用条件格式来一次设置整个范围。由于你的代码正在工作,这可能是最好的[代码审查](https://codereview.stackexchange.com/) –

回答

0

如果每列都有其自己的格式,然后尝试每个整列的格式。对于每列也不要使用数组,如果格式相同,则可以使用单个字符串。

为每一列都这样做。

请尝试并提供反馈。

0

经过一番更多的实验后,我找到了与S Meaden相同的解决方案。由于46列中只有14列不是“一般”,因此我收集了日期,时间和二进制数字的列号。循环遍历每一个,为12000条记录和1列创建一个范围,设置格式。这对于所有列大约需要半秒钟。

奇怪的是,使用46对象数组设置46个单元格的行要比列中的12000个单元格长很多,但是在那里。

谢谢大家。