删除/克服/超过/超过Excel单元格的最大字符数限制

时间:2016-07-12 09:41:28

标签: excel vba

我使用Excel作为原始但非常实用的离线网格数据库。需要时,然后上传Excel文件并填充mySQL数据库。

现在我通过编码base64并将字符串保存到单元格中来添加对图像的支持(mySQL将使用单元格的内容来填充BLOB记录)。

我想解决Excel单元格最大长度为32,767个字符的情况(可能会发生图像base64编码的结果字符串超过32,767个字符)。

我尝试使用'数据验证设置自定义单元格验证来克服此限制。选项如下

With Range("R3:R1000").Validation
    .Delete
    .Add Type:=xlValidateTextLength, _
        Operator:=xlBetween, _
        Formula1:="0", _
        Formula2:="3000000"
    .IgnoreBlank = True
    .ShowError = False
End With

但是单元格内容仍然被截断为32,767个字符。我确实相应地设置了TextBox属性MaxLength

顺便说一句,如果我使用base64编码的图像填充TextBox,然后将字符串从TextBox复制/粘贴到在线base64图像解码器,则图像将被完美解码。如果我通过获取单元格内容来复制/粘贴相同的字符串,则图像将被截断为32,767个字符。

将TextBox的内容复制到单元格时会出现问题。这证实了应该克服或去除的细胞最大长度为32,767。

1 个答案:

答案 0 :(得分:2)

感谢Darren(见上面的评论),最好和最安全的解决方案是将字符串拆分为不同的单元格。

以下代码将字符串拆分为lenght< 32,000个字符。它将部件添加到数组中,然后将部件写入所需数量的相邻单元:

iRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
col = 1

' Get string from txtEncodedImage text input
sArray = SplitStr(txtEncodedImage.Value, 32000)

For i = LBound(sArray) To UBound(sArray)
    ws.Cells(iRow, col + i).Value = sArray(i)
Next i


Public Function SplitStr(ByVal str As String, ByVal numOfCharacters As Long) As String()
    Dim sArray() As String
    Dim nCount As Long
    Dim c As Long
    c = Len(str) \ numOfCharacters
    If c * numOfCharacters = Len(str) Then
        ReDim sArray(1 To c)
    Else
        ReDim sArray(1 To c + 1)
    End If
    For c = 1 To Len(str) Step numOfCharacters
        nCount = nCount + 1
        sArray(nCount) = Mid(str, c, numOfCharacters)
    Next
    SplitStr = sArray
End Function