As tabelas são úteis para organizar informações e figuras. Muitas vezes inserimos tabelas em documentos do Word (DOCX/DOC) para mostrar informações. Em um aplicativo de processamento de texto, você pode facilmente criar tabelas usando C++. Você pode seguir os exemplos a seguir para aprender a trabalhar com tabelas em documentos do Word:

Vamos prosseguir para explorar todos esses tópicos em detalhes:

Inserir tabelas na API de documentos do Word

Em primeiro lugar, observe que você usará a API Aspose.Words for C++ para inserir tabelas em um documento do Word. Você pode configurar a API baixando-a em New Releases ou através da galeria NuGet. Uma vez configurado corretamente, você pode simplesmente utilizar os métodos, propriedades e classes expostos pela API para que algumas chamadas de API simples possam ser usadas para criar, editar ou manipular documentos do Microsoft Word, como arquivos DOCX ou DOC.

Inserir uma tabela em documentos do Word usando C++

Você pode inserir uma tabela em documentos do Word com alguns passos simples. No entanto, é importante observar aqui que você deve passar o objeto de documento para o construtor de cada nó para que todos os nós filho pertençam ao mesmo objeto. Você precisa seguir os passos listados abaixo:

  1. Inicialize o objeto da classe Document
  2. Criar objeto Tabela
  3. Adicionar a tabela ao documento
  4. Criar linhas e colunas
  5. Aplicar AutoAjuste nas Células da Tabela
  6. Salvar documento do Word de saída

O trecho de código abaixo mostra como inserir uma tabela em documento do Word (DOCX/DOC) usando C++:

// O caminho para o diretório de documentos.
System::String outputDataDir = dataDir;
System::SharedPtr<Document> doc = System::MakeObject<Document>();

// Começamos criando o objeto table. Observe como devemos passar o objeto de documento
// Para o construtor de cada nó. Isso ocorre porque cada nó que criamos deve pertencer
// Para algum documento.
System::SharedPtr<Table> table = System::MakeObject<Table>(doc);

// Adicione a tabela ao documento.
doc->get_FirstSection()->get_Body()->AppendChild(table);

// Aqui podemos chamar EnsureMinimum para criar as linhas e células para nós. Este método é usado
// Para garantir que o nó especificado seja válido, nesse caso, uma tabela válida deve ter pelo menos um
// Row e uma célula, portanto, este método os cria para nós.
// Em vez disso, lidaremos com a criação da linha e da tabela nós mesmos. Esta seria a melhor maneira de fazer isso
// Se estivéssemos criando uma tabela dentro de um algoritmo por exemplo.
System::SharedPtr<Row> row = System::MakeObject<Row>(doc);
row->get_RowFormat()->set_AllowBreakAcrossPages(true);
table->AppendChild(row);

// Agora podemos aplicar qualquer configuração de ajuste automático.
table->AutoFit(AutoFitBehavior::FixedColumnWidths);

// Crie uma célula e adicione-a à linha
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);

// Adicione um parágrafo à célula, bem como uma nova execução com algum texto.
cell->AppendChild(System::MakeObject<Paragraph>(doc));
cell->get_FirstParagraph()->AppendChild(System::MakeObject<Run>(doc, u"Row 1, Cell 1 Text"));

// Adicione a célula à linha.
row->AppendChild(cell);

// Em seguida, repetiríamos o processo para as outras células e linhas da tabela.
// Também podemos acelerar as coisas clonando células e linhas existentes.
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";

// Salve o documento em disco.
doc->Save(outputPath);

Inserir tabela de HTML em documentos do Word usando C++

É possível que um arquivo HTML contenha uma Tabela que você precise inserir em seus documentos do Word, como DOCX, DOC, etc. Ou talvez seja necessário copiar uma tabela de um site. Portanto, em vez de criar e projetar a tabela do zero, você pode facilmente analisar a marcação HTML como uma tabela em um documento do Word. Por exemplo, você pode adicionar uma tabela em um documento do Word usando a seguinte string HTML:

<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>

Mantivemos o conteúdo simples para que o suporte à tag de tabela possa ser demonstrado com um caso de uso básico, mas importante. Além disso, é importante observar aqui que o AutoAjuste não pode ser aplicado em tabelas criadas a partir de HTML.

Vamos seguir os passos abaixo para inserir a tabela HTML no documento do Word:

  1. Inicialize uma instância da classe Document
  2. Passe a marcação HTML com o método InsertHtml
  3. Salvar arquivo de palavra DOCX de saída

O código abaixo segue estas etapas e mostra como criar uma tabela em um documento do Word com HTML usando C++:

// O caminho para o diretório de documentos.
System::String outputDataDir = dataDir;
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);

// Insira a tabela do HTML. Observe que AutoFitSettings não se aplica a tabelas
// Inserido a partir de 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";
// Salve o documento em disco.
doc->Save(outputPath);

Você pode notar que esse método é um pouco mais simples do que a abordagem que exploramos acima. A razão é que você não precisa adicionar cada nó um por um para as linhas, colunas ou células porque a tag Table na string HTML contém todas as informações. A seguir está uma captura de tela desta tabela HTML simples adicionada ao documento do Word:

Inserir tabela no Word

Inserir tabela usando o Document Builder em C++

A melhor coisa sobre o Aspose.Words for C++ API é que ele oferece uma variedade de recursos que se tornam uma vantagem competitiva para a API e a destacam entre outras opções. Da mesma forma, o recurso de inserção de tabela usando um construtor de documentos é outra abordagem de adição de tabelas em documentos do Word (DOC/DOCX). Então, vamos explorar os detalhes de três perspectivas diferentes:

1) Inserir tabela simples no DOCX com o Document Builder usando C++

Para adicionar uma tabela simples no documento do Word com o Document builder, você precisa seguir as etapas abaixo:

  1. Criar Documento Objeto
  2. Chame o método StartTable() e insira células
  3. Adicione a linha e as células
  4. Salvar arquivo DOCX de saída

Além disso, o trecho de código abaixo mostra como inserir uma tabela simples no arquivo DOCX com C++:

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

// Chamamos esse método para começar a construir a tabela.
builder->StartTable();
builder->InsertCell();
builder->Write(u"Row 1, Cell 1 Content.");

// Construir a segunda célula
builder->InsertCell();
builder->Write(u"Row 1, Cell 2 Content.");

// Chame o método a seguir para encerrar a linha e iniciar uma nova linha.
builder->EndRow();

// Construa a primeira célula da segunda linha.
builder->InsertCell();
builder->Write(u"Row 2, Cell 1 Content");

// Construir a segunda célula.
builder->InsertCell();
builder->Write(u"Row 2, Cell 2 Content.");
builder->EndRow();

// Sinal de que terminamos de construir a mesa.
builder->EndTable();
System::String outputPath = outputDataDir + u"InsertTableUsingDocumentBuilder.SimpleTable.doc";

// Salve o documento em disco.
doc->Save(outputPath);

2) Inserir tabela formatada no DOCX com o Document Builder usando C++

Você pode inserir uma tabela formatada em um documento do Word com as etapas abaixo:

  1. Inicialize uma instância da classe Document
  2. Fazer linha de cabeçalho
  3. Definir recuos e recursos para a formatação
  4. Redefinir a formatação da fonte
  5. Salvar arquivo DOCX do Word de saída

O trecho de código abaixo cria uma tabela formatada no arquivo DOCX usando C++:

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

// Faça a linha de cabeçalho.
builder->InsertCell();

// Defina o recuo esquerdo para a tabela. A formatação em toda a tabela deve ser aplicada após
// Pelo menos uma linha está presente na tabela.
table->set_LeftIndent(20.0);

// Defina a altura e defina a regra de altura para a linha de cabeçalho.
builder->get_RowFormat()->set_Height(40.0);
builder->get_RowFormat()->set_HeightRule(HeightRule::AtLeast);

// Alguns recursos especiais para a linha de cabeçalho.
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");

// Não precisamos especificar a largura desta célula porque ela é herdada da célula anterior.
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();

// Defina recursos para as outras linhas e células.
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);

// Redefinir a altura e definir uma regra de altura diferente para o corpo da tabela
builder->get_RowFormat()->set_Height(30.0);
builder->get_RowFormat()->set_HeightRule(HeightRule::Auto);
builder->InsertCell();

// Redefinir a formatação da fonte.
builder->get_Font()->set_Size(12);
builder->get_Font()->set_Bold(false);

// Construa as outras células.
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";

// Salve o documento em disco.
doc->Save(outputPath);

3) Insira a tabela aninhada no DOCX com o Document Builder usando C++

Às vezes precisamos de outra tabela dentro de uma tabela existente. Por exemplo, uma célula em alguma linha ou coluna de uma tabela pode conter uma subtabela para uma subcategoria ou algum outro campo. Nesses cenários, as tabelas aninhadas são úteis e podem ser adicionadas seguindo as etapas abaixo:

  1. Construa Table externa e chame o método EndTable
  2. Construir tabela interna dentro de uma célula da tabela externa
  3. Salvar documento do Word de saída

O trecho de código a seguir mostra como inserir uma tabela aninhada em um documento do Word usando C++:

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

// Construa a mesa externa.
System::SharedPtr<Cell> cell = builder->InsertCell();
builder->Writeln(u"Outer Table Cell 1");
builder->InsertCell();
builder->Writeln(u"Outer Table Cell 2");

// Esta chamada é importante para criar uma tabela aninhada dentro da primeira tabela
// Sem esta chamada, as células inseridas abaixo serão anexadas à tabela externa.
builder->EndTable();

// Mover para a primeira célula da tabela externa.
builder->MoveTo(cell->get_FirstParagraph());

// Construa a tabela interna.
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";

// Salve o documento em disco.
doc->Save(outputPath);

Conclusão

Para resumir, aprendemos como inserir diferentes tabelas em documentos do Word usando diferentes abordagens. Você pode inserir tabelas simples ou com string HTML, bem como as tabelas formatadas e aninhadas nos documentos do Word (DOC/DOCX). No entanto, em caso de qualquer confusão ou dúvida, você pode entrar em contato conosco em Fóruns de suporte gratuito. Além disso, você também pode consultar Referências de API e Documentação do produto para sua referência de tipo.

Veja também