Excel 表格转换为 JSON,其中包含来自其他工作表的附加字段

Excel 表格转换为 JSON,其中包含来自其他工作表的附加字段

我经历过 将 Excel 表保存为 JSON 文件,它帮助我将 EXCEL 表转换为 JSON,但我希望向该 JSON 文件添加一些附加字段。

在此处输入图片描述

我询问以下信息第一张工作表

  1. 您的 ID :A001
  2. 姓名:我的名字
  3. 清单项目:2018 年 10 月

[我的第二张表]

此信息对于第二张表中输入的数据是通用的


在创建 JSON 文件时,我想在从 Sheet2 创建的每条 JSON 记录中“自动”添加以下 3 个字段(在 Sheet 1 中接受)

  1. 您的 ID :A001
  2. 姓名:我的名字
  3. 清单项目:2018 年 10 月

我正在使用以下 VBA 代码创建 JSON

Public Sub xls2json()
    savename = "xls2json.json"
    Dim wkb As Workbook
    Dim wks As Worksheet
    Set wkb = ThisWorkbook
    Set wks = wkb.Sheets(2)
    lcolumn = wks.Cells(4, 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(4, i) 'titles are taken from this row
    Next i
    json = "["
    dq = """"
    For J = 5 To lrow ' data picked from this row onwards
        For i = 1 To lcolumn
            If i = 1 Then
                json = json & "{"
            End If
            cellvalue = wks.Cells(J, i)
            json = json & dq & titles(i) & dq & ":" & dq & cellvalue & dq
            If i <> lcolumn Then
                json = json & ","
            End If
        Next i
        json = json & "}"
        If J <> lrow Then
             json = json & ","
        End If
     Next J
    json = json & "]"
    myFile = Application.DefaultFilePath & "\" & savename
    Open myFile For Output As #1
    Print #1, json
    Close #1
    a = MsgBox("Saved as " & savename, vbOKOnly)
End Sub

答案1

据我了解,您有 sheet1 和 sheet2 的 JSON 文件,并且想要将 sheet2 中的列添加到 sheet1。如下所示。

0 > cat file1.json
[
  {
    "firstName": "Alice",
    "age": 22
  },
  {
    "firstName": "Bob",
    "age": 33
  }
]
0 > cat file2.json
[
  {
    "fullName": "Alice Alice"
  },
  {
    "fullName": "Bob Bob"
  }
]

得到类似...的东西

0 > python3 ./bla.py file1.json file2.json
[
    {
        "firstName": "Alice",
        "age": 22,
        "fullName": "Alice Alice"
    },
    {
        "firstName": "Bob",
        "age": 33,
        "fullName": "Bob Bob"
    }
]

下面的 Python 代码应该可以工作

import json, sys


def main():
    '''The Main'''

    data1 = json.load(open(sys.argv[1]))
    data2 = json.load(open(sys.argv[2]))

    assert (len(data1) == len(data2)), "Number of rows not equal"

    for i in range(len(data1)):
        for k in data2[i].keys():
            data1[i][k] = data2[i][k]

    print(json.dumps(data1, indent=4))


if __name__ == '__main__':
    main()

高血压

克里希纳

相关内容