Sütunlar ve Satırlar ile Çalışma

Tabloların nasıl çalıştığı üzerinde daha fazla kontrol sahibi olmak için sütunları ve satırları nasıl değiştireceğinizi öğrenin.

Tablo Öğesi Dizinini Bulma

Sütunlar, satırlar ve hücreler, seçilen belge düğümüne indeksinden erişilerek yönetilir. Herhangi bir düğümün dizinini bulmak, öğe türündeki tüm alt düğümlerin üst düğümden toplanmasını ve ardından koleksiyonda istenen düğümün dizinini bulmak için IndexOf yöntemini kullanmayı içerir.

Bir Belgedeki Tablonun Dizinini Bulma

Bazen bir belgedeki belirli bir tabloda değişiklik yapmanız gerekebilir. Bunu yapmak için bir tabloya indeksine göre başvurabilirsiniz.

Aşağıdaki kod örneği, bir belgedeki tablonun dizininin nasıl alınacağını gösterir:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
table = doc.get_child(aw.NodeType.TABLE, 0, True).as_table()
all_tables = doc.get_child_nodes(aw.NodeType.TABLE, True)
table_index = all_tables.index_of(table)

Tablodaki Bir Satırın Dizinini Bulma

Benzer şekilde seçilen bir tablodaki belirli bir satırda değişiklik yapmanız gerekebilir. Bunu yapmak için bir satıra dizinine göre de başvurabilirsiniz.

Aşağıdaki kod örneği, bir tablodaki bir satırın dizininin nasıl alınacağını gösterir:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
row_index = table.index_of(table.last_row)

Bir Satırdaki Hücrenin Dizinini Bulma

Son olarak, belirli bir hücrede değişiklik yapmanız gerekebilir ve bunu hücre indeksi ile de yapabilirsiniz.

Aşağıdaki kod örneği, satırdaki bir hücrenin dizininin nasıl alınacağını gösterir:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
cell_index = row.index_of(row.cells[4])

Sütunlarla Çalışma

Aspose.Words Document Object Model’de (DOM), Table düğümü Row düğümlerinden ve ardından Cell düğümlerinden oluşur. Dolayısıyla Aspose.Words’in Document Nesne Modelinde, Word belgelerinde olduğu gibi sütun kavramı yoktur.

Tasarım gereği, Microsoft Word ve Aspose.Words’deki tablo satırları tamamen bağımsızdır ve temel özellikler ve işlemler yalnızca tablonun satırlarında ve hücrelerinde bulunur. Bu, tablolara bazı ilginç özelliklere sahip olma yeteneği kazandırır:

  • Her tablo satırı tamamen farklı sayıda hücreye sahip olabilir
  • Dikey olarak her satırın hücreleri farklı genişliklere sahip olabilir
  • Farklı satır formatına ve hücre sayısına sahip tabloları birleştirmek mümkündür

Sütunlar üzerinde gerçekleştirilen işlemler aslında satır hücrelerini sütunlara uygulanıyormuş gibi toplu olarak değiştirerek işlemi gerçekleştiren “kısayollardır”. Yani, aynı tablo satırı hücre dizini üzerinde basitçe yineleme yaparak sütunlar üzerinde işlemler gerçekleştirebilirsiniz.

Aşağıdaki kod örneği, bir tablonun “sütununu” oluşturan hücreleri toplayan bir cephe sınıfını kanıtlayarak bu tür işlemleri basitleştirir:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
class Column:
"""Represents a facade object for a column of a table in a Microsoft Word document."""
def __init__(self, table: aw.tables.Table, column_index: int):
if table is None:
raise ValueError("table")
self.table = table
self.column_index = column_index
def index_of(self, cell: aw.tables.Cell):
"""Returns the index of the given cell in the column."""
return self.get_column_cells().index(cell)
def insert_column_before(self):
"""Inserts a brand new column before this column into the table."""
column_cells = self.get_column_cells()
if len(column_cells) == 0:
raise ValueError("Column must not be empty")
# Create a clone of this column.
for cell in column_cells:
cell.parent_row.insert_before(cell.clone(False), cell)
# This is the new column.
column = self.__class__(column_cells[0].parent_row.parent_table, self.column_index)
# We want to make sure that the cells are all valid to work with (have at least one paragraph).
for cell in column.get_column_cells():
cell.ensure_minimum()
# Increase the index which this column represents since there is now one extra column in front.
self.column_index += 1
return column
def remove(self):
"""Removes the column from the table."""
for cell in self.get_column_cells():
cell.remove()
def to_txt(self):
"""Returns the text of the column."""
return "".join(cell.to_string(aw.SaveFormat.TEXT) for cell in self.get_column_cells())
def get_column_cells(self):
"""Provides an up-to-date collection of cells which make up the column represented by this facade."""
column_cells = []
for row in self.table.rows:
cell = row.as_row().cells[self.column_index]
if cell is not None:
column_cells.append(cell)
return column_cells
view raw column-class.py hosted with ❤ by GitHub

Aşağıdaki kod örneği, boş bir sütunun tabloya nasıl ekleneceğini gösterir:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
doc = aw.Document(MY_DIR + "Tables.docx")
table = doc.get_child(aw.NodeType.TABLE, 0, True).as_table()
column = self.Column(table, 0)
# Print the plain text of the column to the screen.
print(column.to_txt())
# Create a new column to the left of this column.
# This is the same as using the "Insert Column Before" command in Microsoft Word.
new_column = column.insert_column_before()
for cell in new_column.get_column_cells():
cell.first_paragraph.append_child(aw.Run(doc, "Column Text " + str(new_column.index_of(cell))))

Aşağıdaki kod örneği, bir belgedeki tablodan bir sütunun nasıl kaldırılacağını gösterir:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
doc = aw.Document(MY_DIR + "Tables.docx")
table = doc.get_child(aw.NodeType.TABLE, 1, True).as_table()
column = self.Column(table, 2)
column.remove()

Satırları Başlık Satırları Olarak Belirtin

Tablodaki ilk satırı Başlık Satırı olarak yalnızca ilk sayfada veya tablo birkaç sayfaya bölünmüşse her sayfada tekrarlamayı seçebilirsiniz. Aspose.Words’te, HeadingFormat özelliğini kullanarak Başlık Satırını her sayfada tekrarlayabilirsiniz.

Ayrıca, birden fazla başlık satırını, bu satırların tablonun başında birbiri ardına yerleştirilmesi durumunda da işaretleyebilirsiniz. Bunu yapmak için HeadingFormat özelliklerini bu satırlara uygulamanız gerekir.

Aşağıdaki kod örneği, sonraki sayfalarda tekrarlanan Başlık Satırlarını içeren bir tablonun nasıl oluşturulacağını gösterir:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.start_table()
builder.row_format.heading_format = True
builder.paragraph_format.alignment = aw.ParagraphAlignment.CENTER
builder.cell_format.width = 100
builder.insert_cell()
builder.writeln("Heading row 1")
builder.end_row()
builder.insert_cell()
builder.writeln("Heading row 2")
builder.end_row()
builder.cell_format.width = 50
builder.paragraph_format.clear_formatting()
for _ in range(50):
builder.insert_cell()
builder.row_format.heading_format = False
builder.write("Column 1 Text")
builder.insert_cell()
builder.write("Column 2 Text")
builder.end_row()
doc.save(ARTIFACTS_DIR + "WorkingWithTables.repeat_rows_on_subsequent_pages.docx")

Tabloların ve Satırların Sayfalar Arasında Ayrılmasını Önleyin

Bir tablonun içeriğinin sayfalara bölünmemesi gereken zamanlar vardır. Örneğin, bir başlık bir tablonun üzerindeyse, düzgün görünümü korumak için başlık ve tablo her zaman aynı sayfada bir arada tutulmalıdır.

Bu işlevselliği elde etmek için yararlı olan iki ayrı teknik vardır:

  • Tablo satırlarına uygulanan Allow row break across pages
  • Tablo hücrelerindeki paragraflara uygulanan Keep with next

Varsayılan olarak yukarıdaki özellikler devre dışıdır.

Bir Satırın Sayfalar Arasında Kırılmasını Önleyin

Bu, bir satırın hücreleri içindeki içeriğin sayfaya bölünmesinin kısıtlanmasını içerir. Microsoft Word’te bu, Tablo Özellikleri altında “Satırın sayfalar arasında bölünmesine izin ver” seçeneği olarak bulunabilir. Aspose.Words’de bu, bir Row‘in RowFormat nesnesi altında RowFormat.AllowBreakAcrossPages özelliği olarak bulunur.

Aşağıdaki kod örneği, bir tablodaki her satır için satırların sayfalar arasında bölünmesinin nasıl devre dışı bırakılacağını gösterir:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
doc = aw.Document(MY_DIR + "Table spanning two pages.docx")
table = doc.get_child(aw.NodeType.TABLE, 0, True).as_table()
# Disable breaking across pages for all rows in the table.
for row in table.rows:
row.as_row().row_format.allow_break_across_pages = False
doc.save(ARTIFACTS_DIR + "WorkingWithTables.row_format_disable_break_across_pages.docx")

Bir Tablonun Sayfalardan Ayrılmasını Önleyin

Tablonun sayfalara bölünmesini engellemek için tablonun içerdiği içeriğin bir arada kalmasını istediğimizi belirtmemiz gerekir.

Bunu yapmak için Aspose.Words, kullanıcıların bir tablo seçmesine ve tablo hücreleri içindeki her paragraf için true’e KeepWithNext parametresini etkinleştirmesine olanak tanıyan bir yöntem kullanır. Bunun istisnası, tablonun false olarak ayarlanması gereken son paragrafıdır.

Aşağıdaki kod örneği, bir tablonun aynı sayfada birlikte kalacak şekilde nasıl ayarlanacağını gösterir:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET.git.
doc = aw.Document(MY_DIR + "Table spanning two pages.docx")
table = doc.get_child(aw.NodeType.TABLE, 0, True).as_table()
# We need to enable KeepWithNext for every paragraph in the table to keep it from breaking across a page,
# except for the last paragraphs in the last row of the table.
for cell in table.get_child_nodes(aw.NodeType.CELL, True):
cell = cell.as_cell()
cell.ensure_minimum()
for para in cell.paragraphs:
para = para.as_paragraph()
if not (cell.parent_row.is_last_row and para.is_end_of_cell):
para.paragraph_format.keep_with_next = True
doc.save(ARTIFACTS_DIR + "WorkingWithTables.keep_table_together.docx")