Tablo Oluşturma

Aspose.Words kullanıcıların bir belgede sıfırdan tablolar oluşturmasına izin verir ve bunu yapmak için birkaç farklı yöntem sağlar. Bu makalede, her yöntemi kullanarak belgenize biçimlendirilmiş tabloların nasıl ekleneceğine ilişkin ayrıntılar ve makalenin sonunda her yöntemin karşılaştırması sunulmaktadır.

Varsayılan Tablo Stilleri

Yeni oluşturulan tabloya Microsoft Word ‘da kullanılanlara benzer varsayılan değerler verilir.:

Tablo Özelliği Varsayılan Aspose.Words
Border Style Single
Border Width 1/2 puan
Border Color Black
Left and Right Padding 5.4 pts
AutoFit Mode AutoFit to Window
Allow AutoFit True

DocumentBuilder ile bir Tablo oluşturun

Aspose.Words’de, kullanıcılar DocumentBuilder‘ı kullanarak bir belgede tablo oluşturabilirler. Bir tablo oluşturmak için temel algoritma aşağıdaki gibidir:

  1. Tabloyu StartTable ile başlatın
  2. InsertCell kullanarak tabloya bir hücre ekleyin - bu otomatik olarak yeni bir satır başlatır
  3. İsteğe bağlı olarak, hücre biçimlendirmesini belirtmek için CellFormat özelliğini kullanın
  4. Writeln, InsertImage ve diğerleri gibi uygun DocumentBuilder yöntemleri kullanarak hücre içeriğini ekleyin
  5. Satır tamamlanana kadar 2 -4 adımlarını tekrarlayın
  6. Geçerli satırı sonlandırmak için EndRow öğesini çağırın
  7. İsteğe bağlı olarak, satır biçimlendirmesini belirtmek için RowFormat özelliğini kullanın
  8. Tablo tamamlanana kadar 2 -7 adımlarını tekrarlayın
  9. Tabloyu oluşturmayı bitirmek için EndTable öğesini çağırın

Bir tablo oluşturma işlemi aşağıdaki resimde açıkça görülebilir:

creating-table-process

Aşağıdaki kod örneği, varsayılan biçimlendirmeyle DocumentBuilder kullanarak basit 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-C.git.
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
// Start building the table.
builder->StartTable();
builder->InsertCell();
builder->Write(u"Row 1, Cell 1 Content.");
// Build the second cell.
builder->InsertCell();
builder->Write(u"Row 1, Cell 2 Content.");
// Call the following method to end the row and start a new row.
builder->EndRow();
// Build the first cell of the second row.
builder->InsertCell();
builder->Write(u"Row 2, Cell 1 Content");
// Build the second cell.
builder->InsertCell();
builder->Write(u"Row 2, Cell 2 Content.");
builder->EndRow();
// Signal that we have finished building the table.
builder->EndTable();
doc->Save(ArtifactsDir + u"WorkingWithTables.CreateSimpleTable.docx");

Aşağıdaki kod örneği, DocumentBuilder kullanarak biçimlendirilmiş 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-C.git.
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
SharedPtr<Table> table = builder->StartTable();
builder->InsertCell();
// Table wide formatting must be applied after at least one row is present in the table.
table->set_LeftIndent(20.0);
// Set height and define the height rule for the header row.
builder->get_RowFormat()->set_Height(40.0);
builder->get_RowFormat()->set_HeightRule(HeightRule::AtLeast);
builder->get_CellFormat()->get_Shading()->set_BackgroundPatternColor(System::Drawing::Color::FromArgb(198, 217, 241));
builder->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Center);
builder->get_Font()->set_Size(16);
builder->get_Font()->set_Name(u"Arial");
builder->get_Font()->set_Bold(true);
builder->get_CellFormat()->set_Width(100.0);
builder->Write(u"Header Row,\n Cell 1");
// We don't need to specify this cell's width because it's inherited from the previous cell.
builder->InsertCell();
builder->Write(u"Header Row,\n Cell 2");
builder->InsertCell();
builder->get_CellFormat()->set_Width(200.0);
builder->Write(u"Header Row,\n Cell 3");
builder->EndRow();
builder->get_CellFormat()->get_Shading()->set_BackgroundPatternColor(System::Drawing::Color::get_White());
builder->get_CellFormat()->set_Width(100.0);
builder->get_CellFormat()->set_VerticalAlignment(CellVerticalAlignment::Center);
// Reset height and define a different height rule for table body.
builder->get_RowFormat()->set_Height(30.0);
builder->get_RowFormat()->set_HeightRule(HeightRule::Auto);
builder->InsertCell();
// Reset font formatting.
builder->get_Font()->set_Size(12);
builder->get_Font()->set_Bold(false);
builder->Write(u"Row 1, Cell 1 Content");
builder->InsertCell();
builder->Write(u"Row 1, Cell 2 Content");
builder->InsertCell();
builder->get_CellFormat()->set_Width(200.0);
builder->Write(u"Row 1, Cell 3 Content");
builder->EndRow();
builder->InsertCell();
builder->get_CellFormat()->set_Width(100.0);
builder->Write(u"Row 2, Cell 1 Content");
builder->InsertCell();
builder->Write(u"Row 2, Cell 2 Content");
builder->InsertCell();
builder->get_CellFormat()->set_Width(200.0);
builder->Write(u"Row 2, Cell 3 Content.");
builder->EndRow();
builder->EndTable();
doc->Save(ArtifactsDir + u"WorkingWithTables.FormattedTable.docx");

Aşağıdaki kod örneği, DocumentBuilder kullanarak iç içe geçmiş bir tablonun nasıl ekleneceğini gösterir:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
SharedPtr<Cell> cell = builder->InsertCell();
builder->Writeln(u"Outer Table Cell 1");
builder->InsertCell();
builder->Writeln(u"Outer Table Cell 2");
// This call is important to create a nested table within the first table.
// Without this call, the cells inserted below will be appended to the outer table.
builder->EndTable();
// Move to the first cell of the outer table.
builder->MoveTo(cell->get_FirstParagraph());
// Build the inner table.
builder->InsertCell();
builder->Writeln(u"Inner Table Cell 1");
builder->InsertCell();
builder->Writeln(u"Inner Table Cell 2");
builder->EndTable();
doc->Save(ArtifactsDir + u"WorkingWithTables.NestedTable.docx");
view raw nested-table.h hosted with ❤ by GitHub

DOM ile bir Tablo Oluşturun (Belge Nesne Modeli)

Belirli bir konuma yeni bir Table düğümü ekleyerek tabloları doğrudan DOM’e ekleyebilirsiniz.

Tablo düğümü oluşturulduktan hemen sonra tablonun kendisinin tamamen boş olacağını, yani henüz satır ve hücre içermediğini lütfen unutmayın. Bir tabloya satır ve hücre eklemek için uygun Row ve Cell alt düğümlerini DOM’ye ekleyin.

Aşağıdaki kod örneği, belge ağacına uygun alt düğümleri ekleyerek sıfırdan yeni 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-C.git.
auto doc = MakeObject<Document>();
// We start by creating the table object. Note that we must pass the document object
// to the constructor of each node. This is because every node we create must belong
// to some document.
auto table = MakeObject<Table>(doc);
doc->get_FirstSection()->get_Body()->AppendChild(table);
// Here we could call EnsureMinimum to create the rows and cells for us. This method is used
// to ensure that the specified node is valid. In this case, a valid table should have at least one Row and one cell.
// Instead, we will handle creating the row and table ourselves.
// This would be the best way to do this if we were creating a table inside an algorithm.
auto row = MakeObject<Row>(doc);
row->get_RowFormat()->set_AllowBreakAcrossPages(true);
table->AppendChild(row);
// We can now apply any auto fit settings.
table->AutoFit(AutoFitBehavior::FixedColumnWidths);
auto cell = MakeObject<Cell>(doc);
cell->get_CellFormat()->get_Shading()->set_BackgroundPatternColor(System::Drawing::Color::get_LightBlue());
cell->get_CellFormat()->set_Width(80);
cell->AppendChild(MakeObject<Paragraph>(doc));
cell->get_FirstParagraph()->AppendChild(MakeObject<Run>(doc, u"Row 1, Cell 1 Text"));
row->AppendChild(cell);
// We would then repeat the process for the other cells and rows in the table.
// We can also speed things up by cloning existing cells and rows.
row->AppendChild(cell->Clone(false));
row->get_LastCell()->AppendChild(MakeObject<Paragraph>(doc));
row->get_LastCell()->get_FirstParagraph()->AppendChild(MakeObject<Run>(doc, u"Row 1, Cell 2 Text"));
doc->Save(ArtifactsDir + u"WorkingWithTables.InsertTableDirectly.docx");

HTML ‘dan bir Tablo oluşturun

Aspose.Words, InsertHtml yöntemini kullanarak bir HTML kaynağından bir belgeye içerik eklemeyi destekler. Girdi tam bir HTML sayfa veya yalnızca kısmi bir snippet olabilir.

InsertHtml yöntemini kullanarak, kullanıcılar aşağıdaki gibi tablo etiketleri aracılığıyla belgeye tablo ekleyebilir <table>, <tr>, <td>.

Aşağıdaki kod örneği, HTML etiketlerini içeren bir dizeden belgeye nasıl tablo ekleneceğini gösterir:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
// Note that AutoFitSettings does not apply to tables inserted from HTML.
builder->InsertHtml(String(u"<table>") + u"<tr>" + u"<td>Row 1, Cell 1</td>" + u"<td>Row 1, Cell 2</td>" + u"</tr>" + u"<tr>" +
u"<td>Row 2, Cell 2</td>" + u"<td>Row 2, Cell 2</td>" + u"</tr>" + u"</table>");
doc->Save(ArtifactsDir + u"WorkingWithTables.InsertTableFromHtml.docx");

Varolan Bir Tablonun Kopyasını Ekleme

Bir belgede zaten var olan bir tabloyu temel alan bir tablo oluşturmanız gereken zamanlar vardır. Tüm biçimlendirmeyi korurken bir tabloyu çoğaltmanın en kolay yolu, Tablo düğümünü Clone yöntemini kullanarak klonlamaktır.

Aynı teknik, varolan bir satırın veya hücrenin kopyalarını bir tabloya eklemek için de kullanılabilir.

Aşağıdaki kod örneği, düğüm oluşturucularını kullanarak bir tablonun nasıl çoğaltılacağını gösterir:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>(MyDir + u"Tables.docx");
auto table = System::ExplicitCast<Table>(doc->GetChild(NodeType::Table, 0, true));
// Clone the table and insert it into the document after the original.
auto tableClone = System::ExplicitCast<Table>(table->Clone(true));
table->get_ParentNode()->InsertAfter(tableClone, table);
// Insert an empty paragraph between the two tables,
// or else they will be combined into one upon saving this has to do with document validation.
table->get_ParentNode()->InsertAfter(MakeObject<Paragraph>(doc), table);
doc->Save(ArtifactsDir + u"WorkingWithTables.CloneCompleteTable.docx");

Aşağıdaki kod örneği, bir tablonun son satırının nasıl kopyalanacağını ve tabloya nasıl ekleneceğini gösterir:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>(MyDir + u"Tables.docx");
auto table = System::ExplicitCast<Table>(doc->GetChild(NodeType::Table, 0, true));
auto clonedRow = System::ExplicitCast<Row>(table->get_LastRow()->Clone(true));
// Remove all content from the cloned row's cells. This makes the row ready for new content to be inserted into.
for (const auto& cell : System::IterateOver<Cell>(clonedRow->get_Cells()))
{
cell->RemoveAllChildren();
}
table->AppendChild(clonedRow);
doc->Save(ArtifactsDir + u"WorkingWithTables.CloneLastRow.docx");

Veri kaynağınızdaki her kayıtla dinamik olarak büyüyen bir belgede tablolar oluşturmaya çalışıyorsanız, yukarıdaki yöntem önerilmez. Bunun yerine, bölgelerle Mail merge kullanılarak istenen çıktı daha kolay elde edilir. Bu teknik hakkında daha fazla bilgiyi Mail Merge bölgelerle bölüm.

Tablo Oluşturmanın Yollarını Karşılaştırın

Aspose.Words bir belgede yeni tablolar oluşturmak için çeşitli yöntemler sağlar. Her yöntemin kendine özgü avantajları ve dezavantajları vardır, bu nedenle hangisinin kullanılacağı seçimi genellikle belirli duruma bağlıdır.

Tablo oluşturmanın bu yollarına daha yakından bakalım ve artılarını ve eksilerini karşılaştıralım:

Yöntem Avantajlar Dezavantajlar
DocumentBuilder Tablo ve diğer belge içeriği eklemek için standart yöntem Bazen aynı oluşturucu örneğiyle aynı anda birçok tablo çeşidi oluşturmak zordur
Üzerinden DOM Bir DocumentBuilder kullanmadan düğümleri doğrudan DOM ‘e oluşturan ve ekleyen çevreleyen kodla daha iyi uyum sağlar Tablo “boş” olarak oluşturulur: çoğu işlemi gerçekleştirmeden önce, eksik alt düğümleri oluşturmak için EnsureMinimum öğesini çağırmanız gerekir
Başlangıç HTML Aşağıdaki gibi etiketleri kullanarak HTML kaynağından yeni bir tablo oluşturabilir <table>, <tr>, <td> Tüm olası Microsoft Word tablo biçimleri HTML’e uygulanamaz
Varolan bir tabloyu klonlama Tüm satır ve hücre biçimlendirmesini korurken mevcut bir tablonun kopyasını oluşturabilirsiniz Tablo kullanıma hazır olmadan önce uygun alt düğümler kaldırılmalıdır