Las tablas son útiles para organizar la información y las figuras. A menudo insertamos tablas en documentos de Word (DOCX/DOC) para mostrar información. En una aplicación de procesamiento de textos, puede crear fácilmente tablas utilizando C++. Puede consultar los siguientes ejemplos para aprender a trabajar con tablas en documentos de Word:
- Insertar tablas en la API de documentos de Word
- Insertar una tabla en documentos de Word usando C++
- Insertar tabla desde HTML en documentos de Word usando C++
- Insertar tabla en DOCX usando Document Builder en C++
Pasemos a explorar todos estos temas en detalle:
Insertar tablas en la API de documentos de Word
En primer lugar, tenga en cuenta que utilizará Aspose.Words for C++ API para insertar tablas en un documento de Word. Puede configurar la API descargándola desde Nuevas versiones o a través de la galería NuGet. Una vez configurado correctamente, simplemente puede utilizar los métodos, las propiedades y las clases expuestas por la API para que se puedan usar algunas llamadas API simples para crear, editar o manipular documentos de Microsoft Word, como archivos DOCX o DOC.
Insertar una tabla en documentos de Word usando C++
Puede insertar una tabla en documentos de Word con unos simples pasos. Sin embargo, es importante tener en cuenta aquí que debe pasar el objeto del documento al constructor de cada nodo para que todos los nodos secundarios pertenezcan al mismo objeto. Es necesario seguir los pasos que se indican a continuación:
- Inicializar objeto de la clase Document
- Crear objeto Table
- Agregar la tabla al documento
- Crear filas y columnas
- Aplicar AutoFit en las celdas de la tabla
- Guardar documento de Word de salida
El fragmento de código a continuación muestra cómo insertar una tabla en un documento de Word (DOCX/DOC) usando C++:
// La ruta al directorio de documentos.
System::String outputDataDir = dataDir;
System::SharedPtr<Document> doc = System::MakeObject<Document>();
// Comenzamos creando el objeto de la tabla. Tenga en cuenta cómo debemos pasar el objeto del documento
// Al constructor de cada nodo. Esto se debe a que cada nodo que creamos debe pertenecer
// A algún documento.
System::SharedPtr<Table> table = System::MakeObject<Table>(doc);
// Agregue la tabla al documento.
doc->get_FirstSection()->get_Body()->AppendChild(table);
// Aquí podríamos llamar a GuaranteeMinimum para crear las filas y celdas para nosotros. Este método se utiliza
// Para garantizar que el nodo especificado sea válido, en este caso una tabla válida debe tener al menos un
// Fila y una celda, por lo tanto, este método los crea para nosotros.
// En su lugar, nos encargaremos de crear la fila y la tabla nosotros mismos. Esta sería la mejor manera de hacer esto.
// Si estuviéramos creando una tabla dentro de un algoritmo por ejemplo.
System::SharedPtr<Row> row = System::MakeObject<Row>(doc);
row->get_RowFormat()->set_AllowBreakAcrossPages(true);
table->AppendChild(row);
// Ahora podemos aplicar cualquier configuración de ajuste automático.
table->AutoFit(AutoFitBehavior::FixedColumnWidths);
// Crea una celda y agrégala a la fila.
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);
// Agregue un párrafo a la celda, así como una nueva ejecución con algo de texto.
cell->AppendChild(System::MakeObject<Paragraph>(doc));
cell->get_FirstParagraph()->AppendChild(System::MakeObject<Run>(doc, u"Row 1, Cell 1 Text"));
// Agregue la celda a la fila.
row->AppendChild(cell);
// Luego repetiríamos el proceso para las otras celdas y filas de la tabla.
// También podemos acelerar las cosas clonando celdas y filas 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";
// Guarde el documento en el disco.
doc->Save(outputPath);
Insertar tabla desde HTML en documentos de Word usando C++
Es posible que un archivo HTML contenga una tabla que necesite insertar en sus documentos de Word como DOCX, DOC, etc. O puede que necesite copiar una tabla de un sitio web. Entonces, en lugar de crear y diseñar la tabla desde cero, puede analizar fácilmente el marcado HTML como una tabla en un documento de Word. Por ejemplo, puede agregar una tabla en un documento de Word usando la siguiente cadena 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>
Hemos mantenido el contenido simple para que la compatibilidad con la etiqueta de la tabla se pueda demostrar con un caso de uso básico pero importante. Además, es importante tener en cuenta aquí que AutoFit no se puede aplicar en tablas creadas a partir de HTML.
Sigamos los pasos a continuación para insertar una tabla HTML en un documento de Word:
- Inicializar una instancia de la clase Document
- Pase el marcado HTML con el método InsertHtml
- Guardar archivo de Word DOCX de salida
El siguiente código sigue estos pasos y muestra cómo crear una tabla en un documento de Word con HTML usando C++:
// La ruta al directorio de documentos.
System::String outputDataDir = dataDir;
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// Inserta la tabla desde HTML. Tenga en cuenta que AutoFitSettings no se aplica a las tablas
// Insertado desde 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";
// Guarde el documento en el disco.
doc->Save(outputPath);
Puede notar que este método es un poco más simple que el enfoque que hemos explorado anteriormente. El motivo es que no necesita agregar cada nodo uno por uno para las filas, columnas o celdas porque la etiqueta de tabla en la cadena HTML contiene toda la información. A continuación se muestra una captura de pantalla de esta sencilla tabla HTML agregada al documento de Word:
Insertar tabla usando el Generador de documentos en C++
Lo mejor de Aspose.Words for C++ API es que ofrece una variedad de funciones que se convierten en una ventaja competitiva para la API y la hacen destacar entre otras opciones. Del mismo modo, la función de insertar tablas mediante un generador de documentos es otro enfoque para agregar tablas en documentos de Word (DOC/DOCX). Entonces, exploremos los detalles desde tres perspectivas diferentes:
1) Insertar tabla simple en DOCX con Document Builder usando C++
Para agregar una tabla simple en un documento de Word con el generador de documentos, debe seguir los pasos a continuación:
- Crear Document Objeto
- Llame al método StartTable() e inserte celdas
- Agregue la fila y las celdas
- Guardar archivo DOCX de salida
Además, el fragmento de código a continuación muestra cómo insertar una tabla simple en un archivo DOCX con C++:
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// Llamamos a este método para comenzar a construir la tabla.
builder->StartTable();
builder->InsertCell();
builder->Write(u"Row 1, Cell 1 Content.");
// Construye la segunda celda
builder->InsertCell();
builder->Write(u"Row 1, Cell 2 Content.");
// Llame al siguiente método para finalizar la fila y comenzar una nueva fila.
builder->EndRow();
// Construye la primera celda de la segunda fila.
builder->InsertCell();
builder->Write(u"Row 2, Cell 1 Content");
// Construye la segunda celda.
builder->InsertCell();
builder->Write(u"Row 2, Cell 2 Content.");
builder->EndRow();
// Señal de que hemos terminado de construir la mesa.
builder->EndTable();
System::String outputPath = outputDataDir + u"InsertTableUsingDocumentBuilder.SimpleTable.doc";
// Guarde el documento en el disco.
doc->Save(outputPath);
2) Insertar tabla formateada en DOCX con Document Builder usando C++
Puede insertar una tabla formateada en un documento de Word con los pasos a continuación:
- Inicializar una instancia de la clase Document
- Hacer fila de encabezado
- Establecer sangrías y características para el formato.
- Restablecer formato de fuente
- Guardar el archivo DOCX de Word de salida
El siguiente fragmento de código crea una tabla formateada en un archivo DOCX usando C++:
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
System::SharedPtr<Table> table = builder->StartTable();
// Haz la fila del encabezado.
builder->InsertCell();
// Establezca la sangría izquierda para la tabla. El formato ancho de la tabla se debe aplicar después de
// Al menos una fila está presente en la tabla.
table->set_LeftIndent(20.0);
// Establezca la altura y defina la regla de altura para la fila del encabezado.
builder->get_RowFormat()->set_Height(40.0);
builder->get_RowFormat()->set_HeightRule(HeightRule::AtLeast);
// Algunas características especiales para la fila de encabezado.
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");
// No necesitamos especificar el ancho de esta celda porque se hereda de la celda 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();
// Establezca características para las otras filas y celdas.
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);
// Restablezca la altura y defina una regla de altura diferente para el cuerpo de la mesa
builder->get_RowFormat()->set_Height(30.0);
builder->get_RowFormat()->set_HeightRule(HeightRule::Auto);
builder->InsertCell();
// Restablecer formato de fuente.
builder->get_Font()->set_Size(12);
builder->get_Font()->set_Bold(false);
// Construye las otras celdas.
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";
// Guarde el documento en el disco.
doc->Save(outputPath);
3) Insertar tabla anidada en DOCX con Document Builder usando C++
A veces necesitamos otra tabla dentro de una tabla existente. Por ejemplo, una celda en alguna fila o columna de una tabla puede contener una subtabla para una subcategoría o algún otro campo. En tales escenarios, las tablas anidadas son útiles y se pueden agregar siguiendo los pasos a continuación:
- Cree Table externo y luego llame al método EndTable
- Construya la tabla interna dentro de una celda de la tabla externa
- Guardar documento de Word de salida
El siguiente fragmento de código muestra cómo insertar una tabla anidada en un documento de Word usando C++:
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// Construye la mesa exterior.
System::SharedPtr<Cell> cell = builder->InsertCell();
builder->Writeln(u"Outer Table Cell 1");
builder->InsertCell();
builder->Writeln(u"Outer Table Cell 2");
// Esta llamada es importante para crear una tabla anidada dentro de la primera tabla
// Sin esta llamada, las celdas insertadas a continuación se agregarán a la tabla exterior.
builder->EndTable();
// Mover a la primera celda de la tabla exterior.
builder->MoveTo(cell->get_FirstParagraph());
// Construye la mesa interior.
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";
// Guarde el documento en el disco.
doc->Save(outputPath);
Conclusión
En resumen, hemos aprendido a insertar diferentes tablas en documentos de Word utilizando diferentes enfoques. Puede insertar una tabla simple o con una cadena HTML, así como las tablas formateadas y anidadas en los documentos de Word (DOC/DOCX). Sin embargo, en caso de confusión o consulta, puede comunicarse con nosotros en Foros de soporte gratuitos. Además, también puede consultar Referencias API y Documentación del producto para su amable referencia.