Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2023, 15:57   #1
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию Изменить в ворд файле шрифт

здравствуйте
использую код:
Код:
import docx
doc = docx.Document('example.docx')
# изменяем размер шрифта для всех параграфов
for paragraph in doc.paragraphs:
    paragraph.size = 18

# изменяем цвет шрифта для всех параграфов
for paragraph in doc.paragraphs:
    paragraph.color = 'BLACK'
doc.save('restyled.docx') # сохранение результата
ошибок нет и файл пересохраняется, но результата нет, почему? как исправить? спасибо
Ципихович Эндрю вне форума Ответить с цитированием
Старый 15.10.2023, 07:17   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

В документации ничего нету про атрибуты size и color у параграфа.
Код:
from docx import Document
from docx.shared import Pt, RGBColor

doc = Document('example.docx')

for paragraph in doc.paragraphs:
    for run in paragraph.runs:
        f = run.font
        f.size = Pt(18)
        f.color.rgb = RGBColor(0, 0, 0)

doc.save('restyled.docx')
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 15.10.2023, 08:22   #3
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

BDA - как всегда на высоте, то что нужно
интересно стало вручную и при помощи VBA это делается одним махом, а тут бедняжка питон трудится, каждый абзац меняет-не устанет?))

подскажите как продолжить, так как изначально задумывалось:
имеется
Код:
lst = ["0", "1-2**64", "2**64"]
как в вордовском файле
1 весь текст сделать чёрным шрифтом - сделано с Вашей помощью
2 найти данные из списка именного чёрного цвета
3 подкрасить найденное в красный цвет
спасибо

Последний раз редактировалось Ципихович Эндрю; 15.10.2023 в 08:26.
Ципихович Эндрю вне форума Ответить с цитированием
Старый 16.10.2023, 05:04   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Если судить по открытому issue (Splitting a run), то простого способа через имеющийся API нет (для "перекраски" части текста нужно разрезать имеющийся run на 3 run'а: до части текста, с нужной частью текста, после части текста). В обсуждении упоминается python-docx-split-run - наверное, можно попробовать его использовать.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 16.10.2023, 12:37   #5
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

BDA, пробовал код по ссылке:
Код:
from docx import Document
from run_tools import *
from docx.enum.text import WD_COLOR_INDEX
from docx.shared import RGBColor
 
 
d = Document('test1.docx')
 
par = d.paragraphs[0]
run = par.runs[1]
 
new_runs = split_run_by(par, run, (1, 2))
new_runs[0].font.highlight_color = WD_COLOR_INDEX.RED # RED=КРАСНЫЙ
new_runs[1].font.highlight_color = WD_COLOR_INDEX.YELLOW # YELLOW=ЖЕЛТЫЙ
new_runs[2].font.highlight_color = WD_COLOR_INDEX.GREEN # GREEN=ЗЕЛЕНЫЙ
 
d.save('test1-highlightened.docx') # highlightened=выделенный
 
another_run = insert_run_at_position(par, 2, 'e')
copy_run_format(run, another_run)
another_run.font.highlight_color = WD_COLOR_INDEX.PINK
 
d.save('test1-highlightened-bear.docx') # highlightened=выделенный
 
to_run = insert_run_before(par, run, 'to')
copy_run_format(run, to_run)
to_run.font.highlight_color = WD_COLOR_INDEX.BLACK
to_run.font.color.rgb = RGBColor(0xff, 0xff, 0xff)
 
d.save('test1-highlightened-tobear.docx') # highlightened=выделенный
для начала спотыкаюсь на строке 2 - ModuleNotFoundError: No module named 'run_tools'
что нужно поставить через pip install?
спасибо
Ципихович Эндрю вне форума Ответить с цитированием
Старый 16.10.2023, 13:15   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Вы run_tools.py скачали с гитхаба то?
p51x вне форума Ответить с цитированием
Старый 16.10.2023, 13:32   #7
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

понял, нужно
test1.docx
и
run_tools.py
положить в папку с проектом
запустить код с моего сообщения № 5 и получится три файла на выходе, спасибо
пока нет вопросов кэп
разберусь, если что напишу
Ципихович Эндрю вне форума Ответить с цитированием
Старый 16.10.2023, 17:33   #8
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

и как оно работает загадка, весь то код ни к чему, остановился на части кода:
Код:
from docx import Document
from run_tools import *
from docx.enum.text import WD_COLOR_INDEX
from docx.shared import RGBColor
 
 
d = Document('test1.docx')
 
par = d.paragraphs[0]
run = par.runs[1]
 
new_runs = split_run_by(par, run, (1, 2))
new_runs[0].font.highlight_color = WD_COLOR_INDEX.RED # RED=КРАСНЫЙ
new_runs[1].font.highlight_color = WD_COLOR_INDEX.YELLOW # YELLOW=ЖЕЛТЫЙ
new_runs[2].font.highlight_color = WD_COLOR_INDEX.GREEN # GREEN=ЗЕЛЕНЫЙ
 
d.save('test1-highlightened.docx')
в результате:
Foobarbaz
понятно, что работает в пределах 1-го абзаца
но почему покрасило 4, 5, 6 букву?
даже если считать от нуля, почему покрасило 3, 4, 5 букву как считает?
видимо я не понимаю, что заложено в строку кода:
Код:
new_runs = split_run_by(par, run, (1, 2))
как она работает? спасибо
Ципихович Эндрю вне форума Ответить с цитированием
Старый 16.10.2023, 17:51   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Не смотрел, сколько именно run'ов находит python-docx, но визуально их три (foo, bar и baz). Строка "run = par.runs[1]" берет run с текстом bar, который потом режется по индексам 1 и 2, т.е. получается из одного run три run по одной букве, а затем они красятся в разные цвета.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 16.10.2023, 20:10   #10
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
визуально их три (foo, bar и baz)
ну да, для меня визуально их тоже три, но как это мне поможет, чтобы решить задачу:
имеется текст в вордовском файле:
1234 выкрасить в 1234
при условии, что список замен:
Код:
vFindText = ["123", "234"]
если что VBA это решает в 30 строк:
Код:
Option Explicit
Sub Замена_текста_с_нужным_цветом_шрифта_финиш()
 
Dim vFindText As Variant
vFindText = Array("123", "234")
Dim Startt As Date
Startt = VBA.Time$
Dim i As Long
 
'избавляемся от всех полей=сначала выделяем весь документ Конрол+A, затем Конрол+Шифт+Эф9
ActiveDocument.Range.Fields.Unlink
'шрифт всего документа окрасить в чёрный цвет
ActiveDocument.Range.Font.ColorIndex = wdBlack
For i = 0 To UBound(vFindText)
    With ActiveDocument.Range.Find
        'искать нужное только в тексте с шрифтом чёрного цвета
        .Font.ColorIndex = wdBlack
        .Text = vFindText(i)
        Debug.Print .Text
        'окрасить нужное шрифтом красного цвета
        .Replacement.Font.ColorIndex = wdRed
        .Execute Replace:=wdReplaceAll
    End With
Next i
Dim Endd As Date
Endd = VBA.Time$
 
MsgBox$ _
"Начато: " & Startt & Chr$(13) & _
"Закончено: " & Endd
 
End Sub
хочу сравнить быстродействие решений на двух ЯП
ни разу не обращался к джи пи ти, так как не знаю где и как это сделать, но думаю, что он не справиться, не?

Последний раз редактировалось Ципихович Эндрю; 16.10.2023 в 20:14.
Ципихович Эндрю вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шрифт текста в файле пдф Alifhan Фриланс 2 24.08.2019 11:21
изменить шрифт detalik Помощь студентам 2 15.04.2011 16:22
Как изменить шрифт FIREVISTA Общие вопросы C/C++ 12 24.04.2010 19:08
Искаженный шрифт в скомпилированном файле справки Fantom Общие вопросы Delphi 0 19.09.2008 12:51
ШРИФТ в файле справки prog38 Помощь студентам 7 13.09.2008 08:36