|
本帖最后由 loquat 于 2014-2-22 23:35 编辑
Sub 常规写法()
Dim arr(), i%, j%, aRow%, aCols%, t: t = Timer '定义一个数组
With ActiveDocument.Tables(1) '省去了一个Table对象变量
aRows = .Rows.Count: aCols = .Columns.Count '获取表格行列数
ReDim arr(1 To aRows, 1 To aCols) '重置表格维数
For i = 1 To aRows '循环提取表格数据到数组变量
For j = 1 To aCols
arr(i, j) = Split(.Cell(i, j).Range.Text, Chr(13))(0)
Next j
Next i
End With
'Debug.Print Timer - t
End Sub- Sub 楼主写法()
- Dim arr, brr, i&, t: t = Timer
- arr = ActiveDocument.Tables(1).Range.Text '将整个表格以文本形式存入变量
- arr = Replace(arr, Chr(7), "") '去掉制表符
- arr = Split(arr, Chr(13) & Chr(13)) '将数据分行
- ReDim Preserve arr(0 To ActiveDocument.Tables(1).Rows.Count - 1) '去除最后的空白行
- brr = Split(arr(0), Chr(13)) '得到原表格的第1行数据
- 'Debug.Print Timer - t
- End Sub
复制代码 效率做个对比:- Sub 效率对比()
- Dim i&, j&, t: t = Timer
- j = 10
- For i = 1 To j
- 常规写法
- Next i
- Debug.Print Timer - t
- t = Timer
- For i = 1 To j
- 楼主写法
- Next i
- Debug.Print Timer - t
- End Sub
复制代码 效率优化了3倍的样子,不过这样的效率仍然比较低
并且还没有考虑合并单元格等特殊情况
|
|