Hướng dẫn python-docx vertical alignment - căn chỉnh dọc python-docx

Stack Overflow cho các đội đang chuyển sang miền riêng của nó! Khi việc di chuyển hoàn tất, bạn sẽ truy cập các nhóm của mình tại StackoverFlowTeams.com và họ sẽ không còn xuất hiện ở thanh bên trái trên stackoverflow.com.stackoverflowteams.com, and they will no longer appear in the left sidebar on stackoverflow.com.

Kiểm tra email của bạn để cập nhật.

Tôi đã giải quyết vấn đề này ngay bây giờ , không nên thêm một đoạn mới , chỉ cần nhận một đoạn văn tế bào gốc và đặt nó như thế này

table = document.add_table(3, 3)
a = table.cells(0, 0)
b = table.cells(1, 1)
A = a.merge(b)
p = A.add_paragraph("test")
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
3WD_ALIGN_VERTICAL

Cảm ơn :-)

Example:

from docx.enum.table import WD_ALIGN_VERTICAL

table = document.add_table(3, 3)
table.cell(0, 0).vertical_alignment = WD_ALIGN_VERTICAL.BOTTOM


Nếu nó có ích, có một cách khá thuận tiện để thay đổi kiểu của tất cả các ô (hoặc các ô được chọn) của một bảng như thế này: (Lưu ý: Trước tiên bạn phải tạo một kiểu mới, ở đây gọi là 'Kiểu ô bảng của tôi (tập trung) 'Trong Word cho bất kỳ định dạng nào bạn muốn: Styles - Tạo một kiểu)

Bình luận

Xin chào tất cả, tôi sử dụng phương thức tế bào hợp nhất bảng để hợp nhất một số ô với một ô và tôi muốn đặt căn chỉnh dọc của ô hợp nhất, nhưng tôi chỉ tìm thấy phương thức đặt thẳng ngang như thế này:
I use table merge cell method to merge some cells to a cell, and I want to set the vertical alignment of the merge cell, but I only find the horizontal alignment set method like this:

table = document.add_table(3, 3)
a = table.cells(0, 0)
b = table.cells(1, 1)
A = a.merge(b)
p = A.add_paragraph("test")
p.alignment = WD_ALIGN_PARAGRAPH.CENTER

Làm thế nào tôi có thể đặt căn chỉnh dọc của tế bào hợp nhất thành trung tâm? Cảm ơn.

Tính năng đó chưa được triển khai. Ở cấp độ XML, tôi nghĩ rằng bạn đang tìm kiếm phần tử Valign, phù hợp với điều này, w: tc là ô bảng:

<w:tc>
  <w:tcPr>
    <w:vAlign ...>

Có một số phân tích bối cảnh ở đây: http://python-docx.readthedocs.org/en/latest/dev/analysis/features/table-cell.html
http://python-docx.readthedocs.org/en/latest/dev/analysis/features/table-cell.html

Bạn cần phải đào sâu vào lược đồ để tìm ra các chi tiết cụ thể của phần tử W: Valign hoặc chỉ kiểm tra một số từ XML. Sau đó, bạn có thể nhận được nó với các cuộc gọi LXML từ phần tử W: TCPR. Bạn có thể nhận được phần tử W: TCPR với:

tc = cell._tc
tcPr = tc.get_or_add_tcPr()

Nếu bạn google trên "Python-docx oxmlelement", bạn sẽ tìm thấy cách sử dụng một số chức năng trợ giúp Python-Docx bên trong để hoàn thành nó. Đây là một để giúp bạn bắt đầu: #55 (bình luận)
#55 (comment)

Hướng dẫn python-docx vertical alignment - căn chỉnh dọc python-docx

@zhaozhiming @Scanny nó sẽ giống như
it should be like

tc = row.cells[0]._tc
tcPr = tc.get_or_add_tcPr()
tcVAlign = OxmlElement('w:vAlign')
tcVAlign.set(qn('w:val'), "center")
tcPr.append(tcVAlign)

        cell.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER

Tôi đã giải quyết vấn đề này ngay bây giờ , không nên thêm một đoạn mới , chỉ cần nhận một đoạn văn tế bào gốc và đặt nó như thế này

table = document.add_table(3, 3)
a = table.cells(0, 0)
b = table.cells(1, 1)
A = a.merge(b)
p = A.add_paragraph("test")
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
3

Cảm ơn :-)

#for say, three columns
alignments=['left','right','right']
for r in table.rows:
    for i in range(len(alignments)):
        r.cells[i].alignment=alignments[i]

Tôi không tin có một thiết lập như vậy trong Word, Bryan. Bạn có thể đạt được hiệu ứng này bằng cách đặt sự liên kết (biện minh) của từng đoạn trong ô và bạn có thể đặt từng cái riêng biệt, có thể tập trung vào cái đầu tiên và làm cho phần còn lại còn lại.

Có thể có một cái gì đó bạn có thể làm với các kiểu bàn mặc dù. Nếu bạn có thể tạo một tài liệu từ bằng tay thể hiện hành vi mà bạn có thể nhìn sâu hơn.

Ah cảm ơn. Tôi đã phạm sai lầm khi trộn lẫn một yêu cầu với một giải pháp khả thi.

Yêu cầu tôi có là tôi có thể tạo các ô thẳng hàng trong một bảng. Theo gợi ý của bạn ở trên, tôi có thể làm điều đó chỉ bằng cách căn chỉnh các đoạn văn trong các ô khi tôi tạo ra chúng (đó là điều tôi muốn, nhưng tôi đã dại dột đề xuất một cách thực hiện nó dựa trên cách tôi phải xử lý chiều rộng của ô ... Tôi đã không đánh giá cao sự phức tạp hơn của các đoạn văn trong ô ... mặc dù nó khá rõ ràng nếu tôi nghĩ về nó).

Trong trường hợp bất kỳ ai khác đến đây, đây là cách làm điều đó:

# add a row with one cell left aligned, then one right aligned:
row=table.add_row().cells
p=row[0].add_paragraph('left justified text')
p.alignment=WD_ALIGN_PARAGRAPH.LEFT
p=row[1].add_paragraph('right justified text')
p.alignment=WD_ALIGN_PARAGRAPH.RIGHT

Rất vui vì nó đã làm việc Bryan :)

Điều này hoạt động, tuy nhiên các tế bào Tabe bây giờ cao hơn nhiều so với trước đây. Bất kỳ ý tưởng làm thế nào để thay đổi điều đó?

Hướng dẫn python-docx vertical alignment - căn chỉnh dọc python-docx

Để sửa chữa thêm \ n, hãy thử điều này:

table = document.add_table(1, 2)
table.cell(0,0).text = 'Left alignment'
table.cell(0,0).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.LEFT
table.cell(0,1).text = 'Right alignment'
table.cell(0,1).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.RIGHT

Nhận thêm \ n , làm thế nào để sửa chữa nó?

Nhận thêm \ n , làm thế nào để sửa chữa nó?

Tôi đã giải quyết vấn đề này ngay bây giờ , không nên thêm một đoạn mới , chỉ cần nhận một đoạn văn tế bào gốc và đặt nó như thế này

table = document.add_table(3, 3)
a = table.cells(0, 0)
b = table.cells(1, 1)
A = a.merge(b)
p = A.add_paragraph("test")
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
3
table = document.add_table(3, 3)
a = table.cells(0, 0)
b = table.cells(1, 1)
A = a.merge(b)
p = A.add_paragraph("test")
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
3

Để sửa chữa thêm \ n, hãy thử điều này:

table = document.add_table(1, 2)
table.cell(0,0).text = 'Left alignment'
table.cell(0,0).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.LEFT
table.cell(0,1).text = 'Right alignment'
table.cell(0,1).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.RIGHT

Nhận thêm \ n , làm thế nào để sửa chữa nó?

Tôi đã giải quyết vấn đề này ngay bây giờ , không nên thêm một đoạn mới , chỉ cần nhận một đoạn văn tế bào gốc và đặt nó như thế này

table = document.add_table(3, 3)
a = table.cells(0, 0)
b = table.cells(1, 1)
A = a.merge(b)
p = A.add_paragraph("test")
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
3
(Note: You have to first create a new style, here called 'My Table Cell Style (Centered)' in Word for whatever format you want: Styles - Create a Style)

table = document.add_table(3, 3)
a = table.cells(0, 0)
b = table.cells(1, 1)
A = a.merge(b)
p = A.add_paragraph("test")
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
0

Cảm ơn :-)

table = document.add_table(3, 3)
a = table.cells(0, 0)
b = table.cells(1, 1)
A = a.merge(b)
p = A.add_paragraph("test")
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
1

Để sửa chữa thêm \ n, hãy thử điều này:

table = document.add_table(1, 2)
table.cell(0,0).text = 'Left alignment'
table.cell(0,0).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.LEFT
table.cell(0,1).text = 'Right alignment'
table.cell(0,1).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.RIGHT

Nhận thêm \ n , làm thế nào để sửa chữa nó?