Initial version (with docx)

This commit is contained in:
2018-03-11 18:21:26 +01:00
commit 655a0461f5
4 changed files with 209 additions and 0 deletions

34
xlsx_replacement.py Normal file
View File

@@ -0,0 +1,34 @@
import re
import openpyxl
from typing import Union, IO
class XlsxReplacement:
def __init__(self, file: Union[str, IO]):
self.file = file
self.xlsx = openpyxl.load_workbook(file, read_only=True, data_only=True)
self.re_replace = re.compile('\[\[(?:(\w+):)?([a-zA-Z]+\d+)\]\]')
self.errors = []
def find_replace_text(self, text: str):
if '[[' not in text:
return text
return self.re_replace.sub(self._regex_replacement, text)
def _regex_replacement(self, match):
sheet, cell = match.groups()
if sheet is None:
sheet = self.xlsx.active
else:
try:
sheet = self.xlsx[sheet]
except IndexError:
self.errors.append('Unknown sheet {sheet}'.format(sheet=sheet))
return 'ERR Unknown sheet'
try:
return str(sheet[cell].value)
except (IndexError, ValueError):
self.errors.append('Unknown cell {sheet}:{cell}'.format(sheet=sheet, cell=cell))
return 'ERR Unknown cell'