使用 openpyxl 更改 xlsx 文件中的值

Change value in xlsx file with openpyxl

我使用 openpyxl 解析来自 xlsx 文件的数据,然后将其传递给模板。 正在解析:

def load_table(filename):
    wb = xls.load_workbook(filename=filename)
    ws = wb.worksheets[0]
    return list(ws.rows)


def parse_date(row):
    text = row[0].value
    rs = text.split(' ')
    for r in rs:
        if len(r) == 11 and len(r.split('.')) == 4:
            return r


def parse_data(rows):
    data = {}
    class_name = ''

    for row in rows:
        if row[-1].value is None:
            class_name = row[0].value.replace('-', '')
            if class_name not in data:
                data[class_name] = []

        elif ':' not in row[0].value:
            data[class_name] += [[row[0].value, row[1].value]]

    return data


def parse_table(filename):
    rows = load_table(filename)
    date = parse_date(rows[0])
    data = parse_data(rows[2:])
    return date[:-1], data

数据:

{'1A': ['Name1', 'State1', 'Name2', 'State2'], '1B': ['Name1', 'State1', 'Name2', 'State2', 'Name3', 'State3', 'Name4', 'State4', 'Name5', 'State5' ], '1C': ['Name1', 'State1'] ...}

用户可以更改状态并将其post发送到服务器。鉴于我在字典中处理请求:

if 'school' in request.POST:
    for k, v in request.POST.lists():
        changed_data_values.append(v)
    for i in changed_data_values[1]:
        key = i

    tmp_dict[key] = list(zip(changed_data_values[2], changed_data_values[3]))

字典:

{'1B': [('Name1', 'State1'), ('Name2', 'State2'), ('Name3', 'State3'), ('Name4', 'State4'), ('Name5', 'State5')]}

问题是如何更改 xlsx 文件中的状态值? 如果有任何帮助,我将不胜感激。这是项目中最后要做的事情。

您的 load_table() 非常好,但它是只读的。您已放弃工作簿对象,转而使用列表。

要改变值并保存到文件,您需要抓住那个 wb 对象。 documentation 相当明确:

from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws['A1'] = 42
ws.append([1, 2, 3])  # ...
wb.save("sample.xlsx")