johnvaldetine
Yeni Üye
Aşağıdaki excel tablosunu json'a döken 2 vba yazdım ama bir türlü json syntax'ına uyduramıyorum.
Tablo:
Amacım; sehir sütununda 1 ve 2. satırlarındaki adana verisini adana: [{ }] şeklinde dizi (array) içine alması. Yani, tekrarlanan şehir sütununda hangi veriler varsa o şehirlerin diğer sütunlardaki verilerini dizi içine alsın. Tablodaki "istanbul" gibi tek bir veri varsa Json string içine alsın.
Örnek tablonun istediğim Json çıktısı şu şekilde:
Benim yazdığım vba kodlarından biri ise şu:
Bu kodu çalıştırdığımda istediğim sonucu alamıyorum.
Yardımlarınızı rica ederim.
Tablo:
şehir | isim | soyisim | yaş |
adana | ahmet | irtegün | 32 |
adana | mert | fırat | 42 |
istanbul | kuzey | güney | 23 |
ankara | doktor | mehmet | 45 |
Amacım; sehir sütununda 1 ve 2. satırlarındaki adana verisini adana: [{ }] şeklinde dizi (array) içine alması. Yani, tekrarlanan şehir sütununda hangi veriler varsa o şehirlerin diğer sütunlardaki verilerini dizi içine alsın. Tablodaki "istanbul" gibi tek bir veri varsa Json string içine alsın.
Örnek tablonun istediğim Json çıktısı şu şekilde:
JSON:
var isim = {
"adana": [{
"sehir":"adana",
"isim":"ahmet",
"soyisim":"irtegün",
"yaş":"32"
},
{
"sehir":"adana",
"isim":"mert",
"soyisim":"fırat",
"yaş":"42"
}],
"istanbul": {
"sehir":"istanbul",
"isim":"kuzey",
"soyisim":"güney",
"yaş":"23"
},
"ankara": {
"sehir":"ankara",
"isim":"doktor",
"soyisim":"mehmet",
"yaş":"45"
}
}
Benim yazdığım vba kodlarından biri ise şu:
PHP:
Public Sub denemeJson()
savename = "deneme.json"
Dim wkb As Workbook
Dim wks As Worksheet
Set wkb = ThisWorkbook
Set wks = wkb.Sheets(3)
lcolumn = wks.Cells(1, Columns.Count).End(xlToLeft).Column
lrow = wks.Cells(Rows.Count, "A").End(xlUp).Row
Dim titles() As String
ReDim titles(lcolumn)
For i = 1 To lcolumn
titles(i) = wks.Cells(1, i)
Next i
' JS Nesnesini oluşturduk.
json = "var bilgiler = { " & vbCrLf
dq = """"
k = 1
' ================= BAŞLANGIÇ =================
For j = 2 To lrow
sehir = wks.Cells(j, 1).Text
kacKere = Application.WorksheetFunction.CountIf(Range("A1000:A1"), sehir)
' 1 tane olanlar.
If kacKere = 1 Then
json = json & dq & sehir & dq & ": {" & vbCrLf
For i = 1 To lcolumn
cellvalue = wks.Cells(j, i)
json = json & dq & titles(i) & dq & ":" & dq & cellvalue & dq
If i <> lcolumn Then ' Son sütun değilse
json = json & "," & vbCrLf
End If
Next i
json = json & vbCrLf & "},"
End If
' 2 tane olanlar..
If kacKere = 2 Then
json = json & dq & sehir & dq & ": [{" & vbCrLf
For i = 1 To lcolumn
cellvalue = wks.Cells(j, i)
json = json & dq & titles(i) & dq & ":" & dq & cellvalue & dq & "," & vbCrLf
Next i
json = json & vbCrLf & "},"
json = json & "{" & vbCrLf
For i = 1 To lcolumn
cellvalue = wks.Cells(j + 1, i)
json = json & dq & titles(i) & dq & ":" & dq & cellvalue & dq & "," & vbCrLf
Next i
json = json & vbCrLf & "}],"
j = j + 1
End If
' 2'den büyük olanlar
If kacKere > 2 Then
For k = 1 To kacKere
If k = 1 Then
json = json & dq & sehir & dq & ": [{" & vbCrLf
For i = 1 To lcolumn
cellvalue = wks.Cells(j, i)
json = json & dq & titles(i) & dq & ":" & dq & cellvalue & dq & ","
Next i
json = json & vbCrLf & "}," & vbCrLf
End If
Next k
j = j + 1
If k = 2 Then
json = json & dq & "{" & vbCrLf
For i = 1 To lcolumn
cellvalue = wks.Cells(j, i)
json = json & dq & titles(i + 1) & dq & ":" & dq & cellvalue & dq & ","
Next i
json = json & vbCrLf & "},"
End If
k = k + 1
j = j + 1
If k = kacKere Then
json = json & dq & "{" & vbCrLf
For i = 1 To lcolumn
cellvalue = wks.Cells(j, i)
json = json & dq & titles(i + 1) & dq & ":" & dq & cellvalue & dq & ","
Next i
json = json & vbCrLf & "}],"
End If
End If
Next j
json = json & vbCrLf & "}"
myFile = "C:\Users\xx\Desktop\" & savename
Open myFile For Output As #1
Print #1, json
Close #1
'a = MsgBox("Saved as " & savename, vbOKOnly)
End Sub
Bu kodu çalıştırdığımda istediğim sonucu alamıyorum.
Yardımlarınızı rica ederim.
Son düzenleme: