gpt4 book ai didi

excel - 使用 CopyFromRecordSet 时修剪空格

转载 作者:行者123 更新时间:2023-12-02 22:00:35 26 4
gpt4 key购买 nike

我有一个电子表格,我正在尝试优化它。

我必须获取列中的每个值,并从 SQL 服务器获取 3 个“对应”值,之前的做法是,每个列值都会导致 1 次 SQL 查找,因此仅仅为了更新单个工作表,就调用了超过 75.000 个 SQL 请求。 (7.5 小时)

然后我重写了它,只执行一次 SQL 调用,并将整个表放入“本地”记录集,并将每个列值与记录集进行比较并写入相应的列(50 分钟)

为了进一步改进,我创建了一个本地记录集

Set rs = New ADODB.Recordset
With rs.Fields
.Append "registreringsnr", adChar, 50
.Append "security_type", adChar, 50
.Append "security_group", adChar, 128
End With

将每个列值与 SQL 中的记录集进行比较,并将该值添加到我的“rs”记录集中,完成后,我执行以下操作:

CopyFromRecordSet rs

问题是,rs 中的字段长度是固定的,因此如果“registreringsnr”是 2 个字符,那么它将附加 48 个空格。

有没有办法删除空格,而不必循环遍历 3 列(每列 25.000 个单元格)并删除空格?

最佳答案

使用以下代码填充 3 x 25000 个单元格的范围(仅用于测试目的)

Sub Fill()
Application.ScreenUpdating = False
Dim i As Long, j As Long
For i = 1 To 25000
For j = 1 To 3
Cells(i, j) = Chr(32) & Chr(32) & Chr(32) & Int((50 - 0 + 1) * Rnd + 0) & _
Chr(32) & Chr(32) & Chr(32)
Next j
Next i
Application.ScreenUpdating = True
End Sub

并运行

Sub Trimming()
Application.ScreenUpdating = False
Dim stNow As Date
stNow = Now
Dim i As Long, j As Long
For i = 1 To 25000
For j = 1 To 3
Cells(i, j) = Trim(Cells(i, j))
Next j
Next i
Debug.Print DateDiff("s", stNow, Now)
Application.ScreenUpdating = True
End Sub

只需 2 秒即可处理 75000 个单元格(100% 的单元格需要修剪)。

所以我不确定为什么您仍在寻找替代方法来直接在记录集中修剪它。

你可以把它全部放在一个数组中,但如果上面只需要大约,这可能是一个矫枉过正的事情。 2秒。

数组在我的机器上花费不到一秒

Sub TrimminArr()
Application.ScreenUpdating = False
Dim stNow As Date
stNow = Now
Dim arr As Variant
arr = Range("A1:C25000")
Dim i As Long, j as long
For i = LBound(arr, 1) To UBound(arr, 1)
For j = LBound(arr, 2) To UBound(arr, 2)
arr(i, j) = Trim(arr(i, j))
Next j
Next i
Range("A1:C25000").ClearContents
Range("A1").Resize(UBound(arr, 1), UBound(arr, 2)) = arr
Debug.Print DateDiff("s", stNow, Now)
Application.ScreenUpdating = True
End Sub

关于excel - 使用 CopyFromRecordSet 时修剪空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19682664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com