Các bảng rất hữu ích để sắp xếp thông tin và số liệu. Chúng tôi thường chèn bảng vào tài liệu từ (DOCX/DOC) để hiển thị thông tin. Trong ứng dụng soạn thảo văn bản, bạn có thể dễ dàng tạo bảng bằng C++. Bạn có thể xem qua các ví dụ sau để tìm hiểu cách làm việc với Bảng trong tài liệu Word:

Hãy để chúng tôi chuyển sang khám phá tất cả các chủ đề này một cách chi tiết:

Chèn bảng trong API tài liệu Word

Đầu tiên, xin lưu ý rằng bạn sẽ sử dụng API Aspose.Words for C++ để chèn bảng vào tài liệu từ. Bạn có thể định cấu hình API bằng cách tải xuống từ Bản phát hành mới hoặc qua thư viện NuGet. Sau khi được định cấu hình đúng cách, bạn có thể chỉ cần sử dụng các phương thức, thuộc tính và lớp do API cung cấp để có thể sử dụng một số lệnh gọi API đơn giản để tạo, chỉnh sửa hoặc thao tác các tài liệu Microsoft Word, chẳng hạn như tệp DOCX hoặc DOC.

Chèn bảng trong tài liệu Word bằng C++

Bạn có thể chèn bảng vào văn bản word với vài thao tác đơn giản. Tuy nhiên, điều quan trọng cần lưu ý ở đây là bạn phải truyền đối tượng tài liệu cho hàm tạo của mỗi nút để tất cả các nút con thuộc về cùng một đối tượng. Bạn cần làm theo các bước được liệt kê dưới đây:

  1. Khởi tạo đối tượng của lớp Document
  2. Tạo đối tượng Table
  3. Thêm bảng vào tài liệu
  4. Tạo Hàng và Cột
  5. Áp dụng AutoFit trên các ô của bảng
  6. Lưu tài liệu Word đầu ra

Đoạn mã dưới đây cho thấy cách chèn Bảng trong tài liệu Word (DOCX/DOC) bằng C++:

// Đường dẫn đến thư mục tài liệu.
System::String outputDataDir = dataDir;
System::SharedPtr<Document> doc = System::MakeObject<Document>();

// Chúng tôi bắt đầu bằng cách tạo đối tượng bảng. Lưu ý cách chúng ta phải chuyển đối tượng tài liệu
// Đối với hàm tạo của mỗi nút. Điều này là do mọi nút chúng ta tạo phải thuộc về
// Để một số tài liệu.
System::SharedPtr<Table> table = System::MakeObject<Table>(doc);

// Thêm bảng vào tài liệu.
doc->get_FirstSection()->get_Body()->AppendChild(table);

// Ở đây, chúng tôi có thể gọi EnsureMinimum để tạo các hàng và ô cho chúng tôi. Phương pháp này được sử dụng
// Để đảm bảo rằng nút được chỉ định là hợp lệ, trong trường hợp này, một bảng hợp lệ phải có ít nhất một
// Hàng và một ô, do đó phương thức này tạo ra chúng cho chúng ta.
// Thay vào đó, chúng tôi sẽ tự xử lý việc tạo hàng và bảng. Đây sẽ là cách tốt nhất để làm điều này
// Ví dụ: nếu chúng ta đang tạo một bảng bên trong thuật toán.
System::SharedPtr<Row> row = System::MakeObject<Row>(doc);
row->get_RowFormat()->set_AllowBreakAcrossPages(true);
table->AppendChild(row);

// Giờ đây, chúng tôi có thể áp dụng bất kỳ cài đặt tự động điều chỉnh nào.
table->AutoFit(AutoFitBehavior::FixedColumnWidths);

// Tạo một ô và thêm nó vào hàng
System::SharedPtr<Cell> cell = System::MakeObject<Cell>(doc);
cell->get_CellFormat()->get_Shading()->set_BackgroundPatternColor(System::Drawing::Color::get_LightBlue());
cell->get_CellFormat()->set_Width(80);

// Thêm một đoạn vào ô cũng như một lần chạy mới với một số văn bản.
cell->AppendChild(System::MakeObject<Paragraph>(doc));
cell->get_FirstParagraph()->AppendChild(System::MakeObject<Run>(doc, u"Row 1, Cell 1 Text"));

// Thêm ô vào hàng.
row->AppendChild(cell);

// Sau đó, chúng tôi sẽ lặp lại quy trình cho các ô và hàng khác trong bảng.
// Chúng ta cũng có thể tăng tốc mọi thứ bằng cách sao chép các ô và hàng hiện có.
row->AppendChild((System::StaticCast<Node>(cell))->Clone(false));
row->get_LastCell()->AppendChild(System::MakeObject<Paragraph>(doc));
row->get_LastCell()->get_FirstParagraph()->AppendChild(System::MakeObject<Run>(doc, u"Row 1, Cell 2 Text"));
System::String outputPath = outputDataDir + u"InsertTableDirectly.doc";

// Lưu tài liệu vào đĩa.
doc->Save(outputPath);

Chèn bảng từ HTML trong Tài liệu Word bằng C++

Có thể là một tệp HTML chứa Bảng mà bạn cần chèn vào tài liệu từ của mình như DOCX, DOC, v.v. Hoặc bạn có thể cần sao chép bảng từ một trang web. Vì vậy, thay vì tạo và thiết kế bảng từ đầu, bạn có thể dễ dàng phân tích cú pháp đánh dấu HTML dưới dạng bảng thành tài liệu từ. Ví dụ: bạn có thể thêm bảng vào tài liệu từ bằng cách sử dụng chuỗi HTML sau:

<table><tr><td>Row 1, Cell 1</td><td>Row 1, Cell 2</td></tr><tr><td>Row 2, Cell 1</td><td>Row 2, Cell 2</td></tr></table>

Chúng tôi đã giữ cho nội dung đơn giản để hỗ trợ cho thẻ bảng có thể được chứng minh với trường hợp sử dụng cơ bản nhưng quan trọng. Ngoài ra, điều quan trọng cần lưu ý ở đây là không thể áp dụng AutoFit trên các bảng được tạo từ HTML.

Chúng ta hãy làm theo các bước dưới đây để chèn bảng HTML vào tài liệu Word:

  1. Khởi tạo một thể hiện của lớp Document
  2. Truyền đánh dấu HTML bằng phương thức InsertHtml
  3. Lưu tệp từ DOCX đầu ra

Đoạn mã dưới đây làm theo các bước sau và cho biết cách tạo bảng trong tài liệu Word bằng HTML bằng C++:

// Đường dẫn đến thư mục tài liệu.
System::String outputDataDir = dataDir;
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);

// Chèn bảng từ HTML. Lưu ý rằng AutoFitSettings không áp dụng cho bảng
// Chèn từ HTML.
builder->InsertHtml(u"<table><tr><td>Row 1, Cell 1</td><td>Row 1, Cell 2</td></tr><tr><td>Row 2, Cell 1</td><td>Row 2, Cell 2</td></tr></table>");

System::String outputPath = outputDataDir + u"InsertTableFromHtml.doc";
// Lưu tài liệu vào đĩa.
doc->Save(outputPath);

Bạn có thể nhận thấy phương pháp này đơn giản hơn một chút so với phương pháp mà chúng ta đã khám phá ở trên. Lý do là bạn không cần phải thêm từng nút một cho các hàng, cột hoặc ô vì thẻ Table trong chuỗi HTML chứa tất cả thông tin. Sau đây là ảnh chụp màn hình của bảng HTML đơn giản này được thêm vào tài liệu Word:

Chèn bảng trong Word

Chèn bảng bằng Trình tạo tài liệu trong C++

Điều tốt nhất về API Aspose.Words for C++ là nó cung cấp nhiều tính năng khác nhau trở thành lợi thế cạnh tranh cho API và làm cho nó nổi bật giữa các tùy chọn khác. Tương tự như vậy, tính năng chèn bảng sử dụng trình tạo tài liệu là một cách tiếp cận khác để thêm bảng vào tài liệu từ (DOC/DOCX). Vì vậy, hãy để chúng tôi khám phá các chi tiết từ ba quan điểm khác nhau:

1) Chèn Bảng đơn giản vào DOCX bằng Trình tạo tài liệu bằng C++

Để thêm bảng đơn giản vào văn bản word bằng Document builder các bạn thực hiện theo các bước sau:

  1. Tạo đối tượng Document
  2. Gọi phương thức StartTable() và chèn các ô
  3. Thêm hàng và ô
  4. Lưu tệp DOCX đầu ra

Ngoài ra, đoạn mã dưới đây cho thấy cách chèn bảng đơn giản vào tệp DOCX bằng C++:

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);

// Chúng tôi gọi phương pháp này để bắt đầu xây dựng bảng.
builder->StartTable();
builder->InsertCell();
builder->Write(u"Row 1, Cell 1 Content.");

// Xây dựng tế bào thứ hai
builder->InsertCell();
builder->Write(u"Row 1, Cell 2 Content.");

// Gọi phương thức sau để kết thúc hàng và bắt đầu một hàng mới.
builder->EndRow();

// Xây dựng ô đầu tiên của hàng thứ hai.
builder->InsertCell();
builder->Write(u"Row 2, Cell 1 Content");

// Xây dựng tế bào thứ hai.
builder->InsertCell();
builder->Write(u"Row 2, Cell 2 Content.");
builder->EndRow();

// Báo hiệu rằng chúng ta đã hoàn thành việc xây dựng bảng.
builder->EndTable();
System::String outputPath = outputDataDir + u"InsertTableUsingDocumentBuilder.SimpleTable.doc";

// Lưu tài liệu vào đĩa.
doc->Save(outputPath);

2) Chèn bảng đã định dạng trong DOCX bằng Trình tạo tài liệu bằng C++

Bạn có thể chèn bảng đã định dạng vào tài liệu từ theo các bước bên dưới:

  1. Khởi tạo một thể hiện của lớp Document
  2. Tạo hàng tiêu đề
  3. Đặt thụt lề và các tính năng cho định dạng
  4. Đặt lại định dạng phông chữ
  5. Lưu tệp Word DOCX đầu ra

Đoạn mã dưới đây tạo bảng được định dạng trong tệp DOCX bằng C++:

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
System::SharedPtr<Table> table = builder->StartTable();

// Tạo hàng tiêu đề.
builder->InsertCell();

// Đặt thụt lề trái cho bảng. Định dạng rộng của bảng phải được áp dụng sau
// Ít nhất một hàng có mặt trong bảng.
table->set_LeftIndent(20.0);

// Đặt chiều cao và xác định quy tắc chiều cao cho hàng tiêu đề.
builder->get_RowFormat()->set_Height(40.0);
builder->get_RowFormat()->set_HeightRule(HeightRule::AtLeast);

// Một số tính năng đặc biệt cho hàng tiêu đề.
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");

// Chúng tôi không cần chỉ định chiều rộng của ô này vì nó được kế thừa từ ô trước đó.
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();

// Đặt tính năng cho các hàng và ô khác.
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);

// Đặt lại chiều cao và xác định quy tắc chiều cao khác cho thân bảng
builder->get_RowFormat()->set_Height(30.0);
builder->get_RowFormat()->set_HeightRule(HeightRule::Auto);
builder->InsertCell();

// Đặt lại định dạng phông chữ.
builder->get_Font()->set_Size(12);
builder->get_Font()->set_Bold(false);

// Xây dựng các tế bào khác.
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();
System::String outputPath = outputDataDir + u"InsertTableUsingDocumentBuilder.FormattedTable.doc";

// Lưu tài liệu vào đĩa.
doc->Save(outputPath);

3) Chèn Bảng lồng nhau trong DOCX bằng Trình tạo tài liệu bằng C++

Đôi khi chúng ta cần một bảng khác bên trong một bảng hiện có. Chẳng hạn, một ô trong một số hàng hoặc cột của bảng có thể chứa một bảng con cho một danh mục con hoặc một số trường khác. Trong những trường hợp như vậy, các bảng lồng nhau rất hữu ích, có thể được thêm vào bằng cách thực hiện theo các bước bên dưới:

  1. Tạo Table bên ngoài và sau đó gọi phương thức EndTable
  2. Xây dựng Bảng bên trong một ô của bảng bên ngoài
  3. Lưu tài liệu từ đầu ra

Đoạn mã sau cho biết cách chèn bảng lồng nhau trong tài liệu Word bằng C++:

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);

// Xây dựng bảng bên ngoài.
System::SharedPtr<Cell> cell = builder->InsertCell();
builder->Writeln(u"Outer Table Cell 1");
builder->InsertCell();
builder->Writeln(u"Outer Table Cell 2");

// Cuộc gọi này rất quan trọng để tạo một bảng lồng nhau trong bảng đầu tiên
// Nếu không có cuộc gọi này, các ô được chèn bên dưới sẽ được thêm vào bảng bên ngoài.
builder->EndTable();

// Di chuyển đến ô đầu tiên của bảng bên ngoài.
builder->MoveTo(cell->get_FirstParagraph());

// Xây dựng bảng bên trong.
builder->InsertCell();
builder->Writeln(u"Inner Table Cell 1");
builder->InsertCell();
builder->Writeln(u"Inner Table Cell 2");
builder->EndTable();
System::String outputPath = outputDataDir + u"InsertTableUsingDocumentBuilder.NestedTable.doc";

// Lưu tài liệu vào đĩa.
doc->Save(outputPath);

Sự kết luận

Tóm lại, chúng ta đã học cách chèn các bảng khác nhau vào tài liệu Word bằng các phương pháp khác nhau. Bạn có thể chèn bảng đơn giản hoặc bằng chuỗi HTML cũng như các bảng được định dạng và lồng vào tài liệu từ (DOC/DOCX). Tuy nhiên, trong trường hợp có bất kỳ nhầm lẫn hoặc thắc mắc nào, bạn có thể liên hệ với chúng tôi tại Diễn đàn hỗ trợ miễn phí. Ngoài ra, bạn cũng có thể tham khảo Tài liệu tham khảo APITài liệu sản phẩm để tham khảo.

Xem thêm