Я пытаюсь написать скрипт Python, который берет текст в ячейке электронной таблицы Excel и делает определенные символы подстрочными или надстрочными. Я использовал OpenPyxl, но читал, что он не допускает изменений размером меньше целой ячейки, поэтому при необходимости я готов использовать другой пакет.
Для справки, мне нужно, чтобы 2 символа после «T» в каждой ячейке были индексом. Итак, возьмите строку «T12+0,10» или «<(T12+17,00» и отформатируйте ее так, чтобы «12» был нижним индексом, как на изображении ниже.
Вот что у меня есть до сих пор:
style = XFStyle()
style.font = fnt
style.borders = borders
substyle = fnt.ESCAPEMENT_SUBSCRIPT
superstyle = fnt.ESCAPEMENT_SUPERSCRIPT
def compare(contents):
s = ""
for i in contents:
nextchar=contents[i+1].value
if i.value.contains ("T"):
j = i + 1, substyle
s += str(s + j)
else:
s += str(i)
wb = op.load_workbook("file_name.xlsx")
ws = wb["Sheet3"]
for row in ws.iter_rows("C{}:C{}".format(ws.min_row, ws.max_row)):
for cell in row:
contents = cell.value
compare(contents)
Openpyxl может применять индекс ко всей ячейке, а не к отдельным символам в ячейке. Разделение содержимого ячейки таким образом, чтобы необходимые символы находились в отдельной ячейке, и применение нижнего индекса к этой ячейке будет работать, но повторное объединение в одну ячейку приведет к потере форматирования нижнего индекса. Xlsxwriter могу выполняет отдельные символы в ячейке, но, как вы, вероятно, знаете, вы не можете редактировать существующий файл Excel, поэтому для этого потребуется создать новый лист/книгу.
Возможность сделать это будем будет доступна в openpyxl 3.1. Однако Excel действительно не подходит для такого рода вещей, и вам следует избегать его, когда это возможно.






С Xlwings вы можете сделать это таким образом, работая на предположении, что там, где в содержимом ячейки есть буква «T», следующие два символа подписываются.
import xlwings as xw
wb = xw.Book('Book1.xlsx)
ws = wb.sheets('Sheet1')
for x in range(1, 6):
contents = ws.range(1, x).value
if 'T' in contents: # Checks for T in the cell contents
i = contents.index('T')+1
ws.range(1, x).characters[i:i+2].api.Font.Subscript = True
wb.save()
wb.close()
Например, это изменяет следующие ячейки A1: E1 с
T12+0.10 <(T12+17.00 A12+1.11 A+0.10T12 B14+111
к
xlwt предназначен для более раннего формата файлов Excel .xls.