|
本帖最后由 LIUZHU 于 2022-1-29 12:22 编辑
两段代码将10万行、100列列数据写入单元格区域,VBA和JSA均采用数组写入WPS表格,测试速度大相径庭,VBA的用时只有JS的一半左右。
经过分析,如果是将数据存入数组,JS数组速度略胜一筹,关键就在于以下两句:
JS语句:Sh.Cells(1,1).Resize(arr3.length,arr3[0].length).Value2=arr3
VBA语句:.Cells(1, 1).Resize(UBound(Arr), UBound(Arr, 2)).Value = Arr
速度一下子被拉开了,难道JS数组写入单元格的速度这么慢
- //'在10万行、100列的单元格区域写入数字,测试结果12至14秒。
- function JS写入(){
- var date = new Date();
- var start = date.getTime();
- var arr1=Array.from(new Array(100000),x=>x=null);
- var arr2=Array.from(new Array(100),x=>x=null);
- var arr3=arr1.map((v1,k1)=>arr2.map((v2,k2)=>k1+1+k2+1));
-
- var Sh=ThisWorkbook.Sheets("Sheet1")
- Sh.Activate
- Sh.Cells.ClearContents()
- Sh.Cells(1,1).Resize(arr3.length,arr3[0].length).Value2=arr3;
- var date = new Date();
- var end = date.getTime();
- MsgBox(end/1000 - start/1000);
- }
复制代码
- '在10万行、100列的单元格区域写入数字,测试结果6.4秒。
- Sub VBA写入()
- Dim Arr()
- Dim i&, j&
- Dim t1#, t2#
-
- t1 = Timer
- ReDim Arr(1 To 100000, 1 To 100)
- For i = 1 To UBound(Arr)
- For j = 1 To UBound(Arr, 2)
- Arr(i, j) = i + j
- Next j
- Next i
-
- With Sheets("Sheet2")
- .Activate
- .Cells.ClearContents
- .Cells(1, 1).Resize(UBound(Arr), UBound(Arr, 2)).Value = Arr
- End With
-
- t2 = Timer
-
- MsgBox "用时:" & t2 - t1 & "秒。"
-
- End Sub
复制代码
|
|