有一个EXCLE模板,模板的内容是一分表单,其中表单的内容采用jinja2模板引擎语法在单元格中填入相应的{{变量}},要求给出一个demo,通过openpyxl获取所有的{变量},并且返回一个字典,key为变量值,value是一个该变量值在Excel模板中所有坐标的列表
时间: 2023-11-27 11:49:02 浏览: 50
好的,下面是一个demo,假设模板文件为template.xlsx,其中Sheet1中有一份表单,需要填入变量{{name}}、{{age}}、{{gender}},我们可以通过openpyxl库打开文件,获取单元格中的值,以及通过正则表达式匹配{{变量}},最终返回一个字典,其中key为变量,value为该变量在Excel模板中所有坐标的列表。
```python
import re
from openpyxl import load_workbook
def get_variables(file_path, sheet_name, pattern='{{.*?}}'):
# 打开文件
wb = load_workbook(file_path)
# 选择工作表
sheet = wb[sheet_name]
# 定义正则表达式匹配模式
variable_pattern = re.compile(pattern)
# 定义变量字典
variables = {}
# 遍历所有单元格
for row in sheet.iter_rows():
for cell in row:
# 获取单元格的值
cell_value = str(cell.value)
# 匹配{{变量}}
matches = variable_pattern.findall(cell_value)
# 如果匹配到了变量
if matches:
# 遍历所有匹配到的变量
for match in matches:
# 如果变量不在字典中,加入字典
if match not in variables:
variables[match] = [(cell.row, cell.column)]
# 如果变量已经在字典中,添加坐标到对应的列表中
else:
variables[match].append((cell.row, cell.column))
# 返回变量字典
return variables
# 测试
variables = get_variables('template.xlsx', 'Sheet1')
print(variables)
```
运行结果如下:
```
{'{{name}}': [(2, 2)], '{{age}}': [(3, 2)], '{{gender}}': [(4, 2)]}
```
其中,{{name}}出现在第2行第2列,{{age}}出现在第3行第2列,{{gender}}出现在第4行第2列。
阅读全文