Gerenciar Tabelas de Apresentação em C++
Introdução
Uma tabela no PowerPoint é uma maneira eficiente de exibir e representar informações. As informações em uma grade de células (organizadas em linhas e colunas) são simples e fáceis de entender.
Aspose.Slides fornece a classe Table, a interface ITable, a classe Cell, a interface ICell e outros tipos para permitir que você crie, atualize e gerencie tabelas em todos os tipos de apresentações.
Criar uma Tabela do Zero
- Crie uma instância da classe Presentation.
- Obtenha a referência de um slide por meio de seu índice.
- Defina um array de
columnWidth. - Defina um array de
rowHeight. - Adicione um objeto ITable ao slide usando o método AddTable().
- Percorra cada ICell para aplicar formatação nas bordas superior, inferior, direita e esquerda.
- Mescle as duas primeiras células da primeira linha da tabela.
- Acesse o TextFrame de um ICell.
- Adicione algum texto ao TextFrame.
- Salve a apresentação modificada.
Este código C++ mostra como criar uma tabela em uma apresentação:
// Instancia uma classe Presentation que representa um arquivo PPTX
auto pres = System::MakeObject<Presentation>();
// Acessa o primeiro slide
auto sld = pres->get_Slides()->idx_get(0);
// Define colunas com larguras e linhas com alturas
auto dblCols = System::MakeArray<double>({ 50, 50, 50 });
auto dblRows = System::MakeArray<double>({ 50, 30, 30, 30, 30 });
// Adiciona uma forma de tabela ao slide
auto tbl = sld->get_Shapes()->AddTable(100.0f, 50.0f, dblCols, dblRows);
// Define o formato da borda para cada célula
for (int32_t row = 0; row < tbl->get_Rows()->get_Count(); row++)
{
for (int32_t cell = 0; cell < tbl->get_Rows()->idx_get(row)->get_Count(); cell++)
{
auto cellFormat = tbl->get_Rows()->idx_get(row)->idx_get(cell)->get_CellFormat();
cellFormat->get_BorderTop()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderTop()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderTop()->set_Width(5);
cellFormat->get_BorderBottom()->get_FillFormat()->set_FillType((FillType::Solid));
cellFormat->get_BorderBottom()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderBottom()->set_Width(5);
cellFormat->get_BorderLeft()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderLeft()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderLeft()->set_Width(5);
cellFormat->get_BorderRight()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderRight()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderRight()->set_Width(5);
}
}
// Mescla as células 1 e 2 da linha 1
tbl->MergeCells(tbl->get_Rows()->idx_get(0)->idx_get(0), tbl->get_Rows()->idx_get(1)->idx_get(1), false);
// Adiciona algum texto à célula mesclada
tbl->get_Rows()->idx_get(0)->idx_get(0)->get_TextFrame()->set_Text(u"Merged Cells");
// Salva a apresentação no disco
pres->Save(u"table.pptx", SaveFormat::Pptx);
Numeração em uma Tabela Padrão
Em uma tabela padrão, a numeração das células é simples e baseada em zero. A primeira célula de uma tabela tem índice 0,0 (coluna 0, linha 0).
Por exemplo, as células de uma tabela com 4 colunas e 4 linhas são numeradas da seguinte forma:
| (0, 0) | (1, 0) | (2, 0) | (3, 0) |
|---|---|---|---|
| (0, 1) | (1, 1) | (2, 1) | (3, 1) |
| (0, 2) | (1, 2) | (2, 2) | (3, 2) |
| (0, 3) | (1, 3) | (2, 3) | (3, 3) |
Este código C++ mostra como especificar a numeração para células em uma tabela:
// Instancia uma classe Presentation que representa um arquivo PPTX
auto pres = System::MakeObject<Presentation>();
// Acessa o primeiro slide
auto sld = pres->get_Slides()->idx_get(0);
// Define colunas com larguras e linhas com alturas
auto dblCols = System::MakeArray<double>({ 70, 70, 70, 70 });
auto dblRows = System::MakeArray<double>({ 70, 70, 70, 70 });
// Adiciona uma forma de tabela ao slide
auto tbl = sld->get_Shapes()->AddTable(100.0f, 50.0f, dblCols, dblRows);
// Define o formato da borda para cada célula
for (const auto& row : tbl->get_Rows())
{
for (const auto& cell : row)
{
auto cellFormat = cell->get_CellFormat();
cellFormat->get_BorderTop()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderTop()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderTop()->set_Width(5);
cellFormat->get_BorderBottom()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderBottom()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderBottom()->set_Width(5);
cellFormat->get_BorderLeft()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderLeft()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderLeft()->set_Width(5);
cellFormat->get_BorderRight()->get_FillFormat()->set_FillType(FillType::Solid);
cellFormat->get_BorderRight()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Red());
cellFormat->get_BorderRight()->set_Width(5);
}
}
// Salva a apresentação no disco
pres->Save(u"StandardTables_out.pptx", SaveFormat::Pptx);
Acessar uma Tabela Existente
-
Crie uma instância da classe Presentation.
-
Obtenha a referência ao slide que contém a tabela por meio de seu índice.
-
Crie um objeto ITable e defina-o como nulo.
-
Percorra todos os objetos IShape até encontrar a tabela.
Se você suspeitar que o slide tratado contém uma única tabela, pode simplesmente verificar todas as formas que ele possui. Quando uma forma for identificada como tabela, você pode convertê‑la para um objeto Table. Mas se o slide contiver várias tabelas, é melhor pesquisar a tabela necessária através de seu método set_AlternativeText().
-
Use o objeto ITable para trabalhar com a tabela. No exemplo abaixo, adicionamos uma nova linha à tabela.
-
Salve a apresentação modificada.
Este código C++ mostra como acessar e trabalhar com uma tabela existente:
// Instancia uma classe Presentation que representa um arquivo PPTX
auto pres = System::MakeObject<Presentation>(u"UpdateExistingTable.pptx");
// Acessa o primeiro slide
auto sld = pres->get_Slides()->idx_get(0);
// Inicializa a Table nula
System::SharedPtr<ITable> tbl;
// Percorre as formas e define uma referência para a tabela encontrada
for (const auto& shp : System::IterateOver(sld->get_Shapes()))
{
if (System::ObjectExt::Is<ITable>(shp))
{
tbl = System::ExplicitCast<ITable>(shp);
}
}
// Define o texto para a primeira coluna da segunda linha
tbl->idx_get(0, 1)->get_TextFrame()->set_Text(u"New");
// Salva a apresentação modificada no disco
pres->Save(u"table1_out.pptx", SaveFormat::Pptx);
Alinhar Texto em uma Tabela
- Crie uma instância da classe Presentation.
- Obtenha a referência de um slide por meio de seu índice.
- Adicione um objeto ITable ao slide.
- Acesse um objeto ITextFrame da tabela.
- Acesse o IParagraph do ITextFrame.
- Alinhe o texto verticalmente.
- Salve a apresentação modificada.
Este código C++ mostra como alinhar o texto em uma tabela:
// Cria uma instância da classe Presentation
auto presentation = System::MakeObject<Presentation>();
// Obtém o primeiro slide
auto slide = presentation->get_Slides()->idx_get(0);
// Define colunas com larguras e linhas com alturas
auto dblCols = System::MakeArray<double>({ 120, 120, 120, 120 });
auto dblRows = System::MakeArray<double>({ 100, 100, 100, 100 });
// Adiciona a forma de tabela ao slide
auto tbl = slide->get_Shapes()->AddTable(100.0f, 50.0f, dblCols, dblRows);
tbl->idx_get(1, 0)->get_TextFrame()->set_Text(u"10");
tbl->idx_get(2, 0)->get_TextFrame()->set_Text(u"20");
tbl->idx_get(3, 0)->get_TextFrame()->set_Text(u"30");
// Acessa o quadro de texto
auto txtFrame = tbl->idx_get(0, 0)->get_TextFrame();
// Cria o objeto Paragraph para o quadro de texto
auto paragraph = txtFrame->get_Paragraphs()->idx_get(0);
// Cria o objeto Portion para o parágrafo
auto portion = paragraph->get_Portions()->idx_get(0);
portion->set_Text(u"Text here");
portion->get_PortionFormat()->get_FillFormat()->set_FillType(FillType::Solid);
portion->get_PortionFormat()->get_FillFormat()->get_SolidFillColor()->set_Color(Color::get_Black());
// Alinha o texto verticalmente
auto cell = tbl->idx_get(0, 0);
cell->set_TextAnchorType(TextAnchorType::Center);
cell->set_TextVerticalType(TextVerticalType::Vertical270);
// Salva a Apresentação no disco
presentation->Save(u"Vertical_Align_Text_out.pptx", SaveFormat::Pptx);
Definir Formatação de Texto no Nível da Tabela
- Crie uma instância da classe Presentation.
- Obtenha a referência de um slide por meio de seu índice.
- Acesse um objeto ITable do slide.
- Defina a altura da fonte com set_FontHeight().
- Defina o alinhamento com set_Alignment() e a margem direita com set_MarginRight().
- Defina o tipo de orientação vertical do texto com set_TextVerticalType().
- Salve a apresentação modificada.
Este código C++ mostra como aplicar suas opções de formatação preferidas ao texto em uma tabela:
// Cria uma instância da classe Presentation
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slides()->idx_get(0);
// Vamos supor que a primeira forma no primeiro slide seja uma tabela
auto someTable = System::AsCast<ITable>(presentation->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0));
// Define a altura da fonte das células da tabela
auto portionFormat = System::MakeObject<PortionFormat>();
portionFormat->set_FontHeight(25.0f);
someTable->SetTextFormat(portionFormat);
// Define o alinhamento de texto e a margem direita das células da tabela em uma única chamada
auto paragraphFormat = System::MakeObject<ParagraphFormat>();
paragraphFormat->set_Alignment(TextAlignment::Right);
paragraphFormat->set_MarginRight(20.0f);
someTable->SetTextFormat(paragraphFormat);
// Define o tipo de orientação vertical do texto nas células da tabela
auto textFrameFormat = System::MakeObject<TextFrameFormat>();
textFrameFormat->set_TextVerticalType(TextVerticalType::Vertical);
someTable->SetTextFormat(textFrameFormat);
presentation->Save(u"result.pptx", SaveFormat::Pptx);
Obter Propriedades de Estilo da Tabela
Aspose.Slides permite recuperar as propriedades de estilo de uma tabela para que você possa usar esses detalhes em outra tabela ou em outro lugar. Este código C++ mostra como obter as propriedades de estilo de um estilo predefinido de tabela:
auto pres = System::MakeObject<Presentation>();
auto shapes = pres->get_Slide(0)->get_Shapes();
auto table = System::ExplicitCast<ITable>(shapes->AddTable(10, 10, System::MakeArray<double>({100, 150}), System::MakeArray<double>({5, 5, 5})));
table->set_StylePreset(TableStylePreset::DarkStyle1);
pres->Save(u"table.pptx", SaveFormat::Pptx);
Bloquear Proporção de Aspecto de uma Tabela
A proporção de aspecto de uma forma geométrica é a relação entre seus tamanhos em diferentes dimensões. Aspose.Slides fornece a propriedade AspectRatioLocked() para permitir que você bloqueie a configuração de proporção de aspecto para tabelas e outras formas.
Este código C++ mostra como bloquear a proporção de aspecto para uma tabela:
auto pres = System::MakeObject<Presentation>(u"pres.pptx");
auto table = System::ExplicitCast<ITable>(pres->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0));
Console::WriteLine(u"Lock aspect ratio set: {0}", table->get_GraphicalObjectLock()->get_AspectRatioLocked());
table->get_GraphicalObjectLock()->set_AspectRatioLocked(!table->get_GraphicalObjectLock()->get_AspectRatioLocked());
Console::WriteLine(u"Lock aspect ratio set: {0}", table->get_GraphicalObjectLock()->get_AspectRatioLocked());
pres->Save(u"pres-out.pptx", SaveFormat::Pptx);
FAQ
Posso habilitar a direção de leitura da direita para a esquerda (RTL) para uma tabela inteira e o texto em suas células?
Sim. A tabela expõe o método set_RightToLeft, e os parágrafos têm ParagraphFormat::set_RightToLeft. Usar ambos garante a ordem RTL correta e a renderização dentro das células.
Como impedir que os usuários movam ou redimensionem uma tabela no arquivo final?
Use bloqueios de forma para desativar movimentação, redimensionamento, seleção, etc. Esses bloqueios também se aplicam a tabelas.
É suportado inserir uma imagem dentro de uma célula como plano de fundo?
Sim. Você pode definir um preenchimento de imagem para uma célula; a imagem cobrirá a área da célula de acordo com o modo escolhido (esticar ou repetir).