Объект Table
модуля python-docx представляет собой прокси-объект, который оборачивает элемент WordprocessingML <w:tbl>
.
Объект Table
не создается вручную, а возвращается в результате вызова метода Document.add_table()
.
Пример добавления таблицы в документ :
from docx import Document from docx.enum.text import WD_ALIGN_PARAGRAPH # создание пустого документа doc = Document() # данные таблицы без названий колонок items = ( (7, '1024', 'Плюшевые котята'), (3, '2042', 'Меховые пчелы'), (1, '1288', 'Ошейники для пуделей'), ) # добавляем таблицу с одной строкой # для заполнения названий колонок table = doc.add_table(1, len(items[0])) table.style = 'Table Grid' # Получаем строку с колонками из добавленной таблицы head_cells = table.rows[0].cells # добавляем названия колонок for i, item in enumerate(['Кол-во', 'ID', 'Описание']): p = head_cells[i].paragraphs[0] # название колонки p.add_run(item).bold = True # выравниваем посередине p.alignment = WD_ALIGN_PARAGRAPH.CENTER # добавляем данные к существующей таблице for row in items: # добавляем строку с ячейками к объекту таблицы cells = table.add_row().cells for i, item in enumerate(row): # вставляем данные в ячейки cells[i].text = str(item) # если последняя ячейка if i == 2: # изменим шрифт cells[i].paragraphs[0].runs[0].font.name = 'Arial' doc.save('test.docx')
Table
.Table.add_column()
добавляет колонку,Table.add_row()
добавляет строку,Table.alignment
выравнивание таблицы,Table.autofit
авто подгонка ширины колонок таблицы,Table.cell()
возвращает экземпляр определенной ячейки,Table.column_cells()
список ячеек в определенном столбце,Table.columns
список столбцов таблицы,Table.row_cells()
список ячеек в определенной строке,Table.rows
список строк таблицы,Table.style
стиль таблицы,Table.table_direction
направление, в котором упорядочены ячейки таблицы.Table.add_column(width)
:Метод Table.add_column()
добавляет колонку шириной width
в крайний правый угол таблицы и возвращает экземпляр Column
добавленной колонки.
Column
имеет свойства:cells
- последовательность экземпляров Cell
, соответствующих ячейкам в этом столбце.table
- ссылка на объект таблицы Table
, которому принадлежит этот столбец.width
- ширина этого столбца в величине EMU или None
, если ширина явно не задана.Table.add_row()
:Метод Table.add_row()
добавляет строку в самую нижнюю часть таблицы и возвращает экземпляр Row
, только что добавленной строки.
Row
имеет свойства:cells
- последовательность экземпляров Cell
, соответствующих ячейкам в этом столбце.table
- ссылка на объект таблицы Table
, которому принадлежит этот столбец.height
- возвращает/устанавливает объект Length
, представляющий высоту этой ячейки, или None
, если высота явно не задана.height_rule
- возвращает/устанавливает правило высоты этой ячейки как член перечисления WD_ROW_HEIGHT_RULE
или None
, если явное правило высоты не установлено.Table.alignment
:Свойство Table.alignment
возвращает/устанавливает правило, которое определяет расположение этой таблицы между полями страницы. Значение является членом перечисления WD_TABLE_ALIGNMENT
или None
. Значение None
говорит о том, что действующее значение наследуется от иерархии стилей.
Table.autofit
:Свойство Table.autofit
принимает/возвращает True
, если ширина столбцов автоматически регулируется для лучшего соответствия содержимому ячеек и False
, если макет таблицы фиксированный.
Ширина столбца корректируется в любом случае, если общая ширина столбцов превышает ширину страницы.
Table.cell(row_idx, col_idx)
:Метод Table.cell()
возвращает экземпляр Сell
, соответствующий ячейке таблицы на пересечении row_idx
, col_idx
, где (0, 0)
является верхней, самой левой ячейкой.
Table.column_cells(column_idx)
:Метод Table.column_cells()
представляет собой последовательность ячеек Сell
в столбце с номером column_idx
в этой таблице.
Table.columns
:Свойство Table.columns
представляет собой последовательность объектов столбцов Column
в этой таблице.
Table.row_cells(row_idx)
:Метод Table.row_cells()
представляет собой последовательность ячеек Сell
в строке с номером row_idx
в этой таблице.
Table.rows
:Свойство Table.rows
представляет собой последовательность строк Row в этой таблице. Поддерживает функцию len()
, итерацию, доступ к строке по индексу, а так же получение среза строк.
Table.style
:Свойство Table.style
устанавливает/возвращает объект стиля таблицы Style
или Имя Стиля Таблицы, которое встроено в пользовательский интерфейс редактора MS Word.
Если таблица не имеет стиля, то возвращается стиль таблицы по умолчанию для документа (часто обычная таблица). Назначение этому свойству значения None
удаляет любой применяемый напрямую стиль таблицы, заставляя его наследовать стиль таблицы документа по умолчанию.
Обратите внимание, что имя стиля таблицы немного отличается от имени, отображаемого в пользовательском интерфейсе MS Word. Дефис, если он есть, то его необходимо удалить. Например, Light Shading - Accent 1
становится Light Shading Accent 1
.
Важно!!! Встроенные стили хранятся в файле WordprocessingML
под своим английским именем, например 'Table Grid'
, и не зависят от локализации MS Word. Так как модуль python-docx
работает с файлом WordprocessingML
, то поиск стиля должен использовать английское имя. Если файл WordprocessingML
не найден (MS Word не установлен, например в OS Linux) то модуль python-docx
работает со своей версией этого файла. Что бы создать сопоставление между именами стилей на русском языке и именами на английском языке посетите эту ссылку.
Table.table_direction
:Свойство Table.table_direction
это элемент WD_TABLE_DIRECTION
, который указывает направление, в котором упорядочены ячейки таблицы, например, WD_TABLE_DIRECTION.LTR
или WD_TABLE_DIRECTION.RTL
.
Значение None
указывает, что значение наследуется от иерархии стилей.
from docx.enum.table import WD_TABLE_DIRECTION table = document.add_table(3, 3) table.direction = WD_TABLE_DIRECTION.RTL
Cell
.Cell.add_paragraph()
добавляет абзац в ячейку,Cell.add_table()
добавляет таблицу в ячейку,Cell.merge()
объединяет ячейки в одну,Cell.paragraphs
список объектов абзацев в ячейке,Cell.tables
список таблиц в ячейке,Cell.text
ВСЕ содержимое ячейки в виде строки текста,Cell.vertical_alignment
вертикальное выравнивание,Cell.width
ширина ячейки,Cell.add_paragraph(text='', style=None)
:Метод Cell.add_paragraph()
возвращает недавно добавленный абзац Paragraph
в конец содержимого этой ячейки. Если присутствует текст text
, то он добавляется к абзацу за один прогон Run
. Если указан style
, то применяется стиль для этого абзаца. Если стиль не указан или имеет значение None
, то результат будет таким, как если бы был применен стиль с именем 'Normal'
.
Обратите внимание, что на форматирование текста в ячейке может влиять стиль таблицы. Аргумент text
может содержать символы табуляции \t
, которые преобразуются в соответствующую XML-форму. Текст также может включать символы новой строки \n
или возврата каретки \r
, каждый из которых преобразуется в разрыв строки.
Cell.add_table(rows, cols)
:Метод Cell.add_table()
возвращает недавно добавленную таблицу Paragraph
в конец содержимого этой ячейки. После таблицы добавляется пустой абзац, так как спецификация MS Word требует, чтобы последним элементом в каждой ячейке был абзац.
Cell.merge(other_cell)
:Метод Cell.merge()
возвращает объединенную ячейку, созданную путем охвата прямоугольной области, в которой эта ячейка и другая ячейка other_cell
являются диагональными углами. Вызывает ошибку InvalidSpanError
, если ячейки не определяют прямоугольную область.
Cell.paragraphs
:Свойство Cell.paragraphs
представляет собой список объектов абзацев в ячейке. Ячейка таблицы должна содержать по крайней мере один элемент уровня блока и заканчиваться абзацем. По умолчанию новая ячейка содержит один абзац. Свойство только для чтения.
Cell.tables
:Свойство Cell.tables
представляет собой список объектов таблиц в ячейке в порядке их появления. Свойство только для чтения.
Cell.text
:Свойство Cell.text
представляет собой ВСЕ содержимое этой ячейки в виде строки текста. Назначение строки этому свойству заменяет все существующее содержимое одним абзацем Paragraph
, содержащим назначенный текст, за один прогон Run
.
Cell.vertical_alignment
:Свойство Cell.vertical_alignment
возвращает/устанавливает вертикальное выравнивание ячейки как член перечисления WD_CELL_VERTICAL_ALIGNMENT
или None
.
Значение None
указывает, что вертикальное выравнивание для этой ячейки унаследовано. Назначение None
приводит к удалению явно определенного вертикального выравнивания и восстановлению наследования.
Cell.width
:Свойство Cell.width
возвращает/устанавливает ширину этой ячейки в величине EMU или None
, если ширина явно не задана.