使用openpyxl更改xlsx文件中的值

时间:2017-10-08 00:21:03

标签: django 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'] ......}

用户可以更改状态并将其发布到服务器。在视图中我处理dict中的请求:

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文件中更改状态值? 我将非常感谢任何帮助。这是项目中最后要做的事情。

1 个答案:

答案 0 :(得分:2)

你的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")