Excel в JSON (с VBA) Турецкая проблема с символами - PullRequest
0 голосов
/ 06 сентября 2018

Я конвертирую свою таблицу Excel в Json с помощью VBA.
Но когда я смотрю на выходной файл Json, турецкие символы не выглядят гладкими.

Например,

in Excel table, "HAYRETTIN YILMAZ"
in Json, HAYRETTÝN YILMAZ

in Excel table, "HÜSEYİN DURAK"
in Json, HÜSEYÝN DURAK

Как я могу это исправить?

Вы можете найти мой код VBA ниже:

Sub deneme()
  savename = "deneme.js"
    Dim wkb As Workbook
    Dim wks As Worksheet
    Set wkb = ThisWorkbook
    Set wks = wkb.Sheets(2)
    lcolumn = wks.Cells(1, Columns.Count).End(xlToLeft).Column          ' Var olan sütunun en sonu
    lrow = wks.Cells(Rows.Count, "A").End(xlUp).Row                     ' Var olan satırın en sonu
    Dim titles() As String

    ReDim titles(lcolumn)
    For i = 1 To lcolumn
        titles(i) = wks.Cells(1, i)
    Next i

wks.Columns(50).ClearContents
json = "var deneme = { " & vbCrLf
dq = """"
m = 1
For i = 2 To ActiveSheet.Range("a1048576").End(3).Row
    If WorksheetFunction.CountIf(wks.Columns("a"), wks.Cells(i, 1)) = 1 Then

    json = json & vbCrLf & dq & wks.Cells(i, 1) & dq & ": {" & vbCrLf
                For k = 1 To lcolumn
                cellvalue = wks.Cells(i, k)
                json = json & dq & titles(k) & dq & ":" & dq & cellvalue & dq
                If k <> lcolumn Then            ' Son sütun değilse
                json = json & "," & vbCrLf

                ElseIf k = lcolumn Then
                json = json & vbCrLf & "}," & vbCrLf
                End If

                Next k

        'json = json & dq & wks.Cells(1, 1) & dq & ":" & dq & wks.Cells(i, 1) & dq & "," & vbCrLf
        'json = json & dq & wks.Cells(1, 2) & dq & ":" & dq & wks.Cells(i, 2) & dq & "," & vbCrLf
        'json = json & dq & wks.Cells(1, 3) & dq & ":" & dq & wks.Cells(i, 3) & dq & "," & vbCrLf
        'json = json & dq & wks.Cells(1, 4) & dq & ":" & dq & wks.Cells(i, 4) & dq & vbCrLf & "}," & vbCrLf

    Else
        If wks.Cells(i, 50) = "" Then
            For j = i To ActiveSheet.Range("a1048576").End(3).Row
            If wks.Cells(j, 1) = wks.Cells(i, 1) Then
    If j = i Then

    json = json & dq & wks.Cells(i, 1) & dq & ": [{" & vbCrLf
         For k = 1 To lcolumn
                cellvalue = wks.Cells(i, k)

                json = json & dq & titles(k) & dq & ":" & dq & cellvalue & dq

                If k <> lcolumn Then            ' Son sütun değilse
                json = json & "," & vbCrLf

                ElseIf k = lcolumn Then
                json = json & vbCrLf & "},"
                End If

                Next k

    'json = json & dq & wks.Cells(1, 1) & dq & ":" & dq & wks.Cells(j, 1) & dq & "," & vbCrLf
    'json = json & dq & wks.Cells(1, 2) & dq & ":" & dq & wks.Cells(j, 2) & dq & "," & vbCrLf
    'json = json & dq & wks.Cells(1, 3) & dq & ":" & dq & wks.Cells(j, 3) & dq & "," & vbCrLf
    'json = json & dq & wks.Cells(1, 4) & dq & ":" & dq & wks.Cells(j, 4) & dq & vbCrLf & "},"

    Else

    json = json & vbCrLf & "{" & vbCrLf

     For k = 1 To lcolumn
                cellvalue = wks.Cells(i, k)
                json = json & dq & titles(k) & dq & ":" & dq & cellvalue & dq

                If k <> lcolumn Then            ' Son sütun değilse
                json = json & "," & vbCrLf

                ElseIf k = lcolumn Then
                json = json & vbCrLf & "},"
                End If

                Next k

    'json = json & dq & wks.Cells(1, 1) & dq & ":" & dq & wks.Cells(j, 1) & dq & "," & vbCrLf
    'json = json & dq & wks.Cells(1, 2) & dq & ":" & dq & wks.Cells(j, 2) & dq & "," & vbCrLf
    'json = json & dq & wks.Cells(1, 3) & dq & ":" & dq & wks.Cells(j, 3) & dq & "," & vbCrLf
    'json = json & dq & wks.Cells(1, 4) & dq & ":" & dq & wks.Cells(j, 4) & dq & vbCrLf & "},"
    End If
    wks.Cells(j, 50) = 1
    End If
    Next j
    json = Left(json, Len(json) - 1) & "]," & vbCrLf
    End If
    End If
    Next i
    json = Left(json, Len(json) - 3) & vbCrLf & "}" & vbCrLf & "}"

    myFile = "C:\Users\xxx\Desktop\" & savename
    Open myFile For Output As #1
    Print #1, json
    Close #1    
End Sub

@ PeterT, я не хочу использовать JsonConverter, потому что это политика нашей компании. Поэтому я написал свой код выше. Когда я использовал свой код для Excel для Json, «HAYRETTIN YILMAZ» кажется «HAYRETTÝN YILMAZ».

Кроме того, ваш 3-й предмет был изменен. "HÜSEYİN DURAK" -> "H \ u00DCSEY \ u0130N DURAK". У JsonConverter такая же проблема.

Как я могу это исправить?

Спасибо.

1 Ответ

0 голосов
/ 06 сентября 2018

Я провел тест с JsonConverter и достиг следующих результатов. Это отличается от того, что вы получаете?

enter image description here

Option Explicit

Sub deneme()
    Dim topLevel As Dictionary
    Set topLevel = New Dictionary

    topLevel.Add "Item1", Cells(1, 1).Value
    topLevel.Add "Item2", Cells(1, 2).Value
    topLevel.Add "Item3", Cells(2, 1).Value
    topLevel.Add "Item4", Cells(2, 2).Value

    Dim json As String
    json = ConvertToJson(JsonValue:=topLevel, Whitespace:=2)

    Debug.Print json
End Sub

Создает следующий JSON:

{
  "Item1": "HAYRETTIN YILMAZ",
  "Item2": "HAYRETT\u00DDN YILMAZ",
  "Item3": "H\u00DCSEY\u0130N DURAK",
  "Item4": "H\u00DCSEY\u00DDN DURAK"
}
...