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

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

现在,我通过编码base64并将string保存到单元格(mySQL将使用单元格的内容填充BLOBlogging)来添加对图像的支持。

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

我试图通过使用'数据validation'选项如下设置自定义单元格validation来克服此限制

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复制/粘贴string到联机base64图像解码器,则图像将被完美解码。 如果我通过获取单元格内容来复制/粘贴相同的string,图像将被截断为32,767个字符。

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

感谢Darren(请参阅上面的注释),最好和最安全的解决scheme是将string拆分成不同的单元格。

以下代码将string拆分为长度小于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