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