Как выделить жирным шрифтом только часть строки в ячейке excel с помощью python

Я использую win32com для заполнения электронной таблицы Excel с некоторой аналитической информацией. У меня есть ячейка, которую я хочу иметь в этой форме:

Вот описание проблемы: это команда, которую вы запускаете, чтобы исправить ее

Я не могу понять, как получить текст в ячейку с помощью python со смешанным форматированием.

import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Add()
ws = wb.Worksheets("Sheet1")
excel.Visible=True
sel = excel.Selection
sel.Value = "this is the command you run to fix it"
sel.Font.Bold = True
ws.Cells(1,1).Value = 'This is the problem description' + sel.Value  #makes the whole cell bold
ws.Cells(1,1).Value = "{} {}".format("this is the problem desc",sel) #makes the whole cell bold

Объект выбора имеет атрибут символов, но я не могу найти документацию о том, что он делает. Я немного растерялся, мне бы не помешала помощь.

Спасибо


person Derek Chadwell    schedule 21.10.2014    source источник
comment
Я... даже не знал, что Excel способен к такому смешанному форматированию...   -  person Ignacio Vazquez-Abrams    schedule 21.10.2014
comment
обязательно: imgur.com/uHkBnzb   -  person Derek Chadwell    schedule 21.10.2014
comment
Хм. Раньше не было.   -  person Ignacio Vazquez-Abrams    schedule 21.10.2014
comment
@DerekChadwell, какую версию Excel вы используете?   -  person wnnmaw    schedule 21.10.2014
comment
Часть пакета Office 2010: версия 14.0.6123.5001 (32-разрядная версия).   -  person Derek Chadwell    schedule 21.10.2014
comment
Я не знаю о Python, но в Excel вы бы по-разному форматировали символы. Свойство символов имеет аргумент начала и длины; и абсолютное требование состоит в том, чтобы содержимое ячейки было Text; а не результат формулы. Что-то вроде Range(A1).Characters(2,5).Font.Bold = true будет выделять жирным шрифтом символы 2-6 в ячейке A1.   -  person Ron Rosenfeld    schedule 21.10.2014
comment
@IgnacioVazquez-Abrams По крайней мере, с 2007 года, если не раньше.   -  person Ron Rosenfeld    schedule 21.10.2014
comment
@RonRosenfeld: Ну, тогда это показывает, сколько времени прошло с тех пор, как я использовал Excel.   -  person Ignacio Vazquez-Abrams    schedule 21.10.2014


Ответы (2)


Наконец-то я нашел его, опубликовав здесь, чтобы наши повелители переполнения стека тоже могли получить ответ.

Согласно @ron-rosenfield, код VBA для этого выглядит так:

Range("A1").Characters(2,5).Font.Bold = true 

И точно так же есть атрибут объекта Characters диапазона Excel WorkSheet.

>>> ws.Range("A1").Characters
<win32com.gen_py.Microsoft Excel 14.0 Object Library.Characters 967192>

ОДНАКО метод, который вам нужен для доступа к диапазону с этим объектом, - это GetCharacters (начало, длина) (индекс начинается с 1, как обычно, с методами excel com)

ws.Range("A1").GetCharacters(2,4).Font.Bold = True

Вы можете использовать эту команду для обновления жирности символов в ячейке постфактум.

person Derek Chadwell    schedule 21.10.2014

Хотя вы ищете решение win32com в тексте своего вопроса, я укажу всем, кто попадет сюда по заголовку, что это также возможно в Python с помощью XlsxWriter.

Пример:

введите здесь описание изображения

person jmcnamara    schedule 24.10.2014