在 Autocad 中寻找一种超过 32767 脚本限制的方法

lookin for a way for Exceeding the 32767 limit for scripting purposes in Autocad

我正在使用 excel 计算一些值,然后将这些值插入到 AutoCAD 绘图块中

通过编写超过 2500 行的脚本行

然后我需要将所有行复制一次并在 AutoCAD 中粘贴一次。

所以我尝试通过 concat 或 text join 合并超出一个单元格限制的行

是否存在超出或合并多个单元格中的值的问题。

这听起来像 XY problem。可能有更好的方法,直接使用 Autocad 的脚本功能来完成您想要做的任何事情。任何通过将一个应用程序中的文本组装到 copy/paste 到另一个应用程序中来工作的解决方案充其量是笨拙的。

不过,当然可以将多个单元格连接成一个字符串,然后将其复制到剪贴板。下面的代码就是这样做的。

Function Clipboard$(Optional s$)
    'Code from Excel Hero
    '
    
    Dim v: v = s  'Cast to variant for 64-bit VBA support
    With CreateObject("htmlfile")
    With .parentWindow.clipboardData
        Select Case True
            Case Len(s): .setData "text", v
            Case Else:   Clipboard = .GetData("text")
        End Select
    End With
    End With
End Function

Sub CopyRangeToClip(R As Range, Optional delimiter As String = "")
    Dim i As Long, n As Long, A As Variant, cell As Range
    n = R.Cells.Count
    ReDim A(0 To n - 1)
    For Each cell In R.Cells
        A(i) = cell.Value
        i = i + 1
    Next cell
    
    Clipboard Join(A, delimiter)
End Sub

您可以创建一个简单的子程序(例如分配给键盘快捷键),它将最后一个子程序应用于当前选择:

Sub CopyAndJoinSelection()
    CopyRangeToClip Selection
End Sub

为了证明这种方法可以复制拆分成许多单元格的大字符串,以下测试子将长度为 45,000 的字符串复制到剪贴板:

Sub Test()
    Dim i As Long
    For i = 1 To 9
        Cells(i, 1).Value = String(5000, Trim(Str(i)))
    Next i
    CopyRangeToClip Range("A1:A9")
End Sub

Yo 在应得的功劳处给予功劳,请注意,上面的代码使用了 this 将文本复制到剪贴板的功能的出色答案。