ячейка таблицы цветов фона - PullRequest
0 голосов
/ 07 июня 2018

Чтобы установить цвет фона для ячеек в таблице, я использую следующий код:

doc.add_paragraph('')
t1 = doc.add_table(rows=7, cols=2)
t1.style = 'TableGrid'
for row in range(7):
    cell = t1.cell(row, 0)
    cell._tc.get_or_add_tcPr().append(shading_elm_green)

Единственная проблема заключается в следующем:

enter image description here

Но я хочу, чтобы все ячейки имели цвет фона.Почему это не установка всех клеток.Кроме того, когда я создаю много таблиц, все ячейки очищаются, и устанавливается только последняя ячейка самой последней таблицы.

Что я делаю не так?Пожалуйста, я ищу решение в течение многих дней!

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

приведите пример для тех, кто хочет знать


from docx import Document
from docx.shared import Inches
from docx.enum.table import WD_ALIGN_VERTICAL
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.enum.style import WD_STYLE
from docx.dml.color import ColorFormat
from docx.enum.dml import MSO_COLOR_TYPE
from docx.enum.text import WD_COLOR_INDEX
from docx.enum.text import WD_COLOR
from docx.shared import Pt
from docx.oxml.ns import nsdecls
from docx.oxml import parse_xml

document = Document()


document.add_heading('Document Title', 0)

table = document.add_table(1, 11)
table.style = 'Table Grid'
table.cell(0,1).merge(table.cell(0,4))
table.cell(0,6).merge(table.cell(0,7))
table.cell(0,9).merge(table.cell(0,10))

table.cell(0, 0).paragraphs[0].add_run("Name").bold = True
table.cell(0, 5).paragraphs[0].add_run("Offset").bold = True

table.cell(0, 1).paragraphs[0].add_run("5566")
table.cell(0, 6).paragraphs[0].add_run("never die")
table.cell(0, 9).paragraphs[0].add_run("1")
for i in range(11):
    table.cell(0, i).paragraphs[0].alignment  = WD_ALIGN_VERTICAL.CENTER

    shading_elm = parse_xml(r'<w:shd {} w:fill="D9D9D9"/>'.format(nsdecls('w')))
    #shading must create every time
    table.cell(0, i)._tc.get_or_add_tcPr().append(shading_elm)



document.add_page_break()

document.save('demo2.docx')
0 голосов
/ 07 июня 2018

Вам необходимо создать новый элемент shading_elm_green для каждой ячейки.Каждый раз, когда вы назначаете его в своем текущем коде, вы просто перемещаете его из одной ячейки в другую.Вот почему он заканчивается в конце.

API lxml немного нелогичен (пока вы не подумаете, как бы вы это сделали сами :).Когда вы присваиваете существующий элемент как дочерний элемент другого элемента, например, используя .append(), lxml перемещает элемент, чтобы быть дочерним по отношению к этому другому элементу.Если вы добавляете его к другому элементу, он перемещает его туда.Назначенный элемент автоматически не «клонируется» или что-то в этом роде.Он может жить только в одном месте, и это место, где вы его «поместили» в последний раз.

Вы не показываете код создания своего элемента, но каким бы он ни был, вставьте его рядом с последним рядом и так далее.должен работать так, как вы ожидаете.

...