У Word напівжирний шрифт означає «Немає». Чи вважається це жирним шрифтом?
Прямий формат None означає не встановлено, а не False. Тут перевіряються лише пряме форматування та явні ланцюжки стилів символів; None не повертається, якщо значення не знайдено, залишаючи стилі абзаців, стандартні параметри документа та правила перемикання OOXML для подальшого аналізу, і його не можна назвати повним ефективним калькулятором стилю.
bold — це None у Word. Чи вважається це жирним шрифтом? Висновок одним реченням
Якщо ви використовуєте python-docx для пакетної перевірки формату документів Word, можливо, ви зіткнулися з таким сумнівом: run.bold повертає None. Сміливий, не сміливий чи ще щось? Ця проблема виникне під час перегляду формату, групового сортування або перевірки макета перед перекладом. Неправильне судження спотворить висновок формату.
Ця стаття призначена для розробників та розробників документів, яким потрібно написати власні сценарії для аналізу стилю .docx. Після прочитання ви зрозумієте, чому None не дорівнює False, навчитеся використовувати рекурсивні функції для повернення вздовж ланцюжка стилів і знатимете, яким судженням можна довіряти, а які слід залишити на розгляд людини.
У Word напівжирний шрифт означає «Немає». Чи вважається це жирним шрифтом? Висновок одним реченням
run.bold – це None, що означає, що він не встановлений у прямому форматі, що не означає, що він не виділений жирним шрифтом. Ви повинні продовжувати пошук вгору вздовж стилю абзацу, значення документа за замовчуванням тощо. Код у цій статті перевіряє лише пряме форматування та явні ланцюжки стилів символів і не є повним дійсним калькулятором стилю.
| ваша ситуація | Рекомендовані практики | причина |
|---|---|---|
run.bold повертає None | Продовжуйте пошук уздовж ланцюжка стилів символів, не розглядайте його безпосередньо як False | None означає не встановлено, не від’ємне |
run.bold Повернути False | Розглядати як явне скасування жирного шрифту | Явне перевизначення, що відповідає <w:b w:val="0"/> |
| У ланцюжку стилів не знайдено значення | Позначити для перегляду вручну | Може включати невирішені параметри, наприклад docDefaults або шрифти теми |
| Назва стилю Китайський псевдонім | Блокуйте та повідомляйте про помилки, не обробляйте мовчки | python-docx має нестабільну підтримку локалізованих назв стилів |
Елементи складного списку або конвертовані, захищені, макрозмінені файли .doc | Підлягає перевірці вручну | Результати аналізу можуть не відповідати візуальному представленню |
Яку задачу слід вирішити першою в цій статті?
Прямий формат None означає не встановлено, а не False. Тут перевіряються лише пряме форматування та явні ланцюжки стилів символів; None повертається, якщо значення не знайдено, залишаючи його для стилів абзаців, стандартних параметрів документа та правил перемикання OOXML для подальшого аналізу, і його не можна назвати повним дійсним калькулятором стилю.
Приклад самостійної композиції
Дивіться список імпорту для залежностей. Код конструює вхідні дані в пам'яті; Записи про операції надаються окремо і не гарантують автентичність усіх документів.
from docx import Document
from docx.enum.style import WD_STYLE_TYPE
def partial_bold(run):
if run.bold is not None:
return run.bold
style, seen = run.style, set()
while style is not None and style.style_id not in seen:
seen.add(style.style_id)
if style.font.bold is not None:
return style.font.bold
style = style.base_style
return None
doc = Document()
style = doc.styles.add_style("DemoBold", WD_STYLE_TYPE.CHARACTER)
style.font.bold = True
run = doc.add_paragraph().add_run("Example")
run.style = style
assert partial_bold(run) is True
run.bold = False
assert partial_bold(run) is False
plain = doc.add_paragraph().add_run("Plain")
assert partial_bold(plain) is None
Розуміння логіки трьох станів спадкування стилю
У Word є три стани жирних атрибутів, які потрібно розуміти окремо:
- Явне жирне: Виберіть текст в інтерфейсі та натисніть жирну кнопку. У XML запишіть
<w:b/>, іrun.boldстаєTrue. - Явне скасування: Навмисно скасовує ефект стилю, який має бути виділений жирним. У XML напишіть
<w:b w:val="0"/>, іrun.boldстаєFalse. - Не встановлено: Текст просто лежить всередині абзацу, без прямих жирних тегів. Чи є він жирним, залежить від визначення стилю.
run.bold— цеNone.
None означає «Будь ласка, подивись вгору», а не «Ні».
Чому нам потрібно простежувати до ланцюга стилю?
Ця конструкція розроблена для збереження розміру файлу та збереження послідовності формату. Як зазначено в офіційній документації, вбудовані стилі навіть не записуються в styles.xml перед їхнім використанням; вони існують як «латентні стилі» в додатку Word. Тому код повинен мати можливість трасувати ланцюги стилю назад, а не покладатися лише на властивості самого об'єкта Run.
Щоб безпечно визначити, чи текст дійсно виділений жирним, потрібно написати рекурсивну функцію для проходження ланцюга спадкування стилів. Зверніть увагу: наступний код — це навчальна демонстрація, яка пройшла синтетичну перевірку вибірок, призначена для демонстрації логіки триштатного судження. У реальних виробничих середовищах також потрібно керувати захистом посилань циклів, парсингом простору імен та іншими типами атрибутів.
Критерії прийняття та межі ручного перегляду
Автоматизований парсінг не може ідеально імітувати рушій рендерингу Word. При роботі з пакетними документами слід встановити чітку матрицю прийняття, щоб розрізняти, які ситуації можна довіряти, а які мають бути передані людям.
| Спостерігайте за явищем | Код повертає значення | Фактичне рендеринг | Рішення щодо розгляду справи | Примітка |
|---|---|---|---|---|
| Run.bold=Немає, Style.bold=Правда | True | Жирний шрифт | ✅ Автоматичний прохід | Стандартні сцени спадкування |
| Run.bold=False, Style.bold=True | False | Рутина | ✅ Автоматичний прохід | Явне перевизначення — правильна логіка коду |
| Run.bold=Немає, Style.bold=Немає | False | Жирний шрифт | ⚠️ Потрібна ручна перевірка | Можливо, у вас відсутні налаштування шрифтів docDefaults або теми |
| Назва стилю є китайським псевдонімом | AttributeError | - | ❌ Блокування та повідомлення про помилки | python-docx підтримує нестабільні локалізовані стилі |
| Текст у складних елементах списку | True/False | Невизначено | ⚠️ Потрібна ручна перевірка | Взаємодія між стилем списку та стилем абзацу надзвичайно складна |
Незастосовний обсяг
Ця логіка парсингу застосовується лише до стандартного формату .docx. Для файлів, конвертованих з .doc, захищених документів або документів, динамічно модифікованих макросами, результати розбору коду можуть суттєво відрізнятися від візуального вигляду. Крім того, код демонструє логіку вилучення атрибутів, а не наскрізне розташування та реставрацію. Якщо мета — точно відтворити макет, покладатися лише на значення атрибутів недостатньо.
📊 Порівняння ядра
| Статус | Написання у прямому форматуванні | run.bold Повернення | Значення |
|---|---|---|---|
| Відвертий стиль сміливий | <w:b/> | True | Безпосередньо потовщуйте його |
| Явно скасовано | <w:b w:val="0"/> | False | Яскраве оформлення в стилі |
| Не налаштований | Жодних жирних ярликів | None | Продовжуйте пошук уздовж ланцюжка стилю |
🎯 Який метод тобі підходить?
Якщо хочете перевірити, чи текст жирний
Простежуйте назад по ланцюжку стилів; не читайте лише run.bold.
Якщо вам потрібно прочитати лише прямий формат
True і False можна безпосередньо довіряти, але None потребує додаткового розсуду.
Якщо хочете точно відтворити макет
Вилучення властивостей — це відправна точка; його також потрібно поєднувати з результатами рендерингу та ручними перевірками.
Якщо ви маєте справу з файлами, які є .doc, захищеними або макромодифікованими
По-перше, обробляйте це відповідно до процесу ручного перегляду; результати коду призначені лише для довідки.
❓ Поширені запитання (FAQ)
1. Чи означає run.bold None не сміливий?
Ні. None означає, що прямий формат не встановлений і повинен продовжувати пошук уздовж ланцюга стилю.
2. Чи може цей код повністю відтворити макет Word?
Ні. Код демонструє логіку вилучення атрибутів, а не наскрізне розташування та реставрацію.
3. Що робити, якщо ви зустрінете китайське ім'я?
python-docx підтримує нестабільні локалізовані стилімени; матриця прийняття обробляє та оголошує блоки та помилки.
4. Що слід робити перед тим, як братися за важливі документи?
Зберігайте оригінали та перевіряйте результати відповідно до меж і пунктів прийняття, зазначених у документі.
Джерела та додаткова література
Використовуйте цей чек-лист для перекладу документів
Переклад слів легко змішує проблеми зі змістом із проблемами форматування. Залишаючи перевірки, такі як стилі, заголовки та таблиці, у списку доставки, коректори знають, де саме перевіряти.
OmniDoc (Запис продукту) надає багатоформатні портали перекладу документів, а офіційний вебсайт пропонує OCR, глосарії та двомовні довідкові функції. Для команд, які хочуть починати безпосередньо з файлів, це шлях, який варто оцінювати за допомогою реальних зразків. Будь ласка, скористайтеся тривожним файлом, який маєте право завантажити, і перевірте результати чек-листа в цій статті. Це не стверджує, що OmniDoc використовує бібліотеку з відкритим кодом або внутрішні алгоритми з цієї статті, а також не замінює тестування продуктивності продукту прикладами.
📝 Резюме
None означає «не встановлено», а не «ні»; при виділенні жирним продовжуйте повертатися назад уздовж ланцюга стилю. У разі невизначеності матриця прийняття передається на ручний перегляд.
Досвід зараз: завантажте документ, щоб почати переклад, зберігаючи оригінальне форматування


