使用 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")
我使用 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")