Excel 到 JSON(含 VBA)土耳其字符问题
Excel to JSON (with VBA) Turkish character issue
我正在将 Excel table 转换为 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"。 Json转换器有同样的问题。
我该如何解决?
谢谢。
我 运行 使用 JsonConverter 进行了测试并取得了以下结果。这与您得到的有什么不同吗?
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"
}
我正在将 Excel table 转换为 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"。 Json转换器有同样的问题。
我该如何解决?
谢谢。
我 运行 使用 JsonConverter 进行了测试并取得了以下结果。这与您得到的有什么不同吗?
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"
}