2016-07-12 13 views
0

私はExcelを基本的ではあるが非常に実用的なオフライングリッドデータベースとして使用しています。必要に応じて、Excelファイルがアップロードされ、mySQLデータベースが作成されます。Excelセルの最大文字数を削除/超過/超過/超過Excel

これで、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を設定しました。

ところで、TextBoxに画像base64をエンコードして、TextBoxからオンラインbase64画像デコーダに文字列をコピー/ペーストすると、画像は完全にデコードされます。セルの内容を取得して同じ文字列をコピー/ペーストすると、32,767文字で切り捨てられた画像になります。

TextBoxの内容をセルにコピーすると問題が発生します。これは、克服すべきまたは除去すべき細胞の最大長さ32,767であることを確認する。

+0

私はあなたがその限界で立ち往生していると思います - https://support.office.com/en-us/article/Excel-specifications-and-limits-ca36e2dc-1f09-4620-b726-67c00b05040fを参照してください。おそらく2つのセルを使用し、それらをmySQLで一緒に連結しますか? –

+0

Uhmmm ...それはアイデアかもしれない。 'data validation'メニューの' text lenght'が何のために使われているのかまだ分かりません。 – Nicero

+0

これは、セルに入力できる文字数を制限しています - あなたのコード例では0と許可されている最大文字数を許すと思います。 –

答えて

1

Darren(上記のコメントを参照)のおかげで、最も安全な解決策は、文字列を別のセルに分割することです。

次のコードでは、文字列を長さが32文字の文字列に分割します(<)。これは、配列にパーツを追加し、それが隣接するセルの必要数に部品を書き込みます:

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 
関連する問題