树形结构的字典写入excel的问题

{“keyword1”: {
“ keyword1.1”: {
“ keyword 1.1.1”: {}
“ keyword 1.1.2”: {}
},
“ keyword1.2”: {
“ keyword 1.2.1”: {}
“ keyword 1.2.2”: {}
},
}
}
类似这样的很多层的字典想写入 excel 文件。为了保持树形的特点和下一步操作的便利

keyword1 写入 A1 单元格,
keyword1.1 写入 B1 单元格,
keyword 1.1.1 写入 C1 单元格,
keyword 1.1.2 写入 C2 单元格,
keyword1.2 写入 B3 单元格,
keyword 1.2.1 写入 C3 单元格,
keyword 1.2.2 写入 C 4 单元格。

用递归函数怎么写?我是小白,试了很多次都不成功。谢谢

Jason990420
最佳答案
import xlsxwriter

class Worksheet():

    def __init__(self, filename):
        self.workbook  = xlsxwriter.Workbook(filename)
        self.worksheet = self.workbook.add_worksheet()

    def write(self, dct, row=0, col=0):
        for key, value in dct.items():
            self.worksheet.write(row, col, key)
            print('  '*col + f'{key}')
            if value:
                row = self.write(value, row, col+1)
            else:
                row += 1
        return row

    def close(self):
        self.workbook.close()

dct = {
    "keyword 1": {
        "keyword 1.1": {
            "keyword 1.1.1": {},
            "keyword 1.1.2": {},
        },
        "keyword 1.2": {
            "keyword 1.2.1": {},
            "keyword 1.2.2": {},
        },
    },
}

worksheet = Worksheet("D:/tree.xlsx")
worksheet.write(dct)
worksheet.close()
1年前 评论
raybon 1年前
讨论数量: 7
Jason990420
import xlsxwriter

class Worksheet():

    def __init__(self, filename):
        self.workbook  = xlsxwriter.Workbook(filename)
        self.worksheet = self.workbook.add_worksheet()

    def write(self, dct, row=0, col=0):
        for key, value in dct.items():
            self.worksheet.write(row, col, key)
            print('  '*col + f'{key}')
            if value:
                row = self.write(value, row, col+1)
            else:
                row += 1
        return row

    def close(self):
        self.workbook.close()

dct = {
    "keyword 1": {
        "keyword 1.1": {
            "keyword 1.1.1": {},
            "keyword 1.1.2": {},
        },
        "keyword 1.2": {
            "keyword 1.2.1": {},
            "keyword 1.2.2": {},
        },
    },
}

worksheet = Worksheet("D:/tree.xlsx")
worksheet.write(dct)
worksheet.close()
1年前 评论
raybon 1年前
from openpyxl import Workbook

current_row = 1

def write_dict_to_excel(ws, nested_dict, current_col):
    global current_row
    start_row = current_row

    for key, sub_dict in nested_dict.items():
        ws.cell(row=current_row, column=current_col, value=key)
        if sub_dict:  # 如果子字典不为空
            # 递归处理子字典
            write_dict_to_excel(ws, sub_dict, current_col + 1)
        current_row += 1  # 换行

    # 重置到起始行写下一个主键
    current_row = start_row + len(nested_dict)

if __name__ == "__main__":
    wb = Workbook()
    ws = wb.active

    data = {
        "keyword1": {
            "keyword1.1": {
                "keyword1.1.1": {},
                "keyword1.1.2": {}
            },
            "keyword1.2": {
                "keyword1.2.1": {},
                "keyword1.2.2": {}
            }
        }
    }

    write_dict_to_excel(ws, data, 1)
    wb.save("output.xlsx")
1年前 评论

Jason990420 的方案是对的,我想问一下
if value: row = self.write (value, row, col+1) 中 self.write (value, row, col+1) 我能看明白,用 row = 是什么用途,谢谢

1年前 评论
Jason990420 1年前

Rathalos 你的代码有一个问题,中间有一个空行,我没找出错误在哪里。

file

1年前 评论

current_row += 1 # 换行 发现这个前面加个 else 就可以了

1年前 评论