Gerenciar Linhas e Colunas em Tabelas do PowerPoint Usando C++

Introdução

Para permitir que você gerencie as linhas e colunas de uma tabela em uma apresentação do PowerPoint, o Aspose.Slides fornece a classe Table e a interface ITable, além de muitos outros tipos.

Definir a Primeira Linha como Cabeçalho

  1. Crie uma instância da classe Presentation e carregue a apresentação.
  2. Obtenha a referência de um slide através do seu índice.
  3. Crie um objeto ITable e defina-o como null.
  4. Itere por todos os objetos IShape para encontrar a tabela relevante.
  5. Defina a primeira linha da tabela como seu cabeçalho.

Este código C++ mostra como definir a primeira linha de uma tabela como seu cabeçalho:

// Instancia a classe Presentation 
auto pres = System::MakeObject<Presentation>(u"table.pptx");

// Acessa o primeiro slide
auto sld = pres->get_Slides()->idx_get(0);

// Inicializa o TableEx nulo
SharedPtr<ITable> tbl;

// Itera pelos shapes e define uma referência para a tabela
for (const auto& shp : sld->get_Shapes())
{
    if (ObjectExt::Is<ITable>(shp))
    {
        tbl = System::ExplicitCast<ITable>(shp);
    }
}

// Define a primeira linha da tabela como cabeçalho 
tbl->set_FirstRow(true);

Clonar uma Linha ou Coluna de Tabela

  1. Crie uma instância da classe Presentation e carregue a apresentação,
  2. Obtenha a referência de um slide através do seu índice.
  3. Defina um array de columnWidth.
  4. Defina um array de rowHeight.
  5. Adicione um objeto ITable ao slide através do método AddTable().
  6. Clone a linha da tabela.
  7. Clone a coluna da tabela.
  8. Salve a apresentação modificada.

Este código C++ mostra como clonar a linha ou coluna de uma tabela do PowerPoint:

 // O caminho para o diretório de documentos.
const String outPath = u"../out/CloningInTable_out.pptx";

// Instancia a classe Presentation
SharedPtr<Presentation> pres = MakeObject<Presentation>();

// Acessa o primeiro slide
SharedPtr<ISlide> islide = pres->get_Slides()->idx_get(0);

// Define colunas com larguras e linhas com alturas
System::ArrayPtr<double> dblCols = System::MakeObject<System::Array<double>>(4, 70);
System::ArrayPtr<double> dblRows = System::MakeObject<System::Array<double>>(4, 70);

// Adiciona uma forma de tabela ao slide
SharedPtr<ITable> table = islide->get_Shapes()->AddTable(100, 50, dblCols, dblRows);


// Define o formato da borda para cada célula
for (int x = 0; x < table->get_Rows()->get_Count(); x++)
{
	SharedPtr<IRow> row = table->get_Rows()->idx_get(x);
	for (int y = 0; y < row->get_Count(); y++)
	{
		SharedPtr<ICell> cell = row->idx_get(y);

		cell->get_BorderTop()->get_FillFormat()->set_FillType(FillType::Solid);
		cell->get_BorderTop()->get_FillFormat()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Red());
		cell->get_BorderTop()->set_Width(5);

		cell->get_BorderBottom()->get_FillFormat()->set_FillType(FillType::Solid);
		cell->get_BorderBottom()->get_FillFormat()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Red());
		cell->get_BorderBottom()->set_Width(5);

		cell->get_BorderLeft()->get_FillFormat()->set_FillType(FillType::Solid);
		cell->get_BorderLeft()->get_FillFormat()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Red());
		cell->get_BorderLeft()->set_Width(5);

		cell->get_BorderRight()->get_FillFormat()->set_FillType(FillType::Solid);
		cell->get_BorderRight()->get_FillFormat()->get_SolidFillColor()->set_Color(System::Drawing::Color::get_Red());
		cell->get_BorderRight()->set_Width(5);

	}

}

table->idx_get(0, 0)->get_TextFrame()->set_Text(u"00");
table->idx_get(0, 1)->get_TextFrame()->set_Text(u"01");
table->idx_get(0, 2)->get_TextFrame()->set_Text(u"02");
table->idx_get(0, 3)->get_TextFrame()->set_Text(u"03");
table->idx_get(1, 0)->get_TextFrame()->set_Text(u"10");
table->idx_get(2, 0)->get_TextFrame()->set_Text(u"20");
table->idx_get(1, 1)->get_TextFrame()->set_Text(u"11");
table->idx_get(2, 1)->get_TextFrame()->set_Text(u"21");

//AddClone adiciona uma linha ao final da tabela
table->get_Rows()->AddClone(table->get_Rows()->idx_get(0), false);

//InsertClone adiciona uma linha em uma posição específica da tabela
table->get_Rows()->InsertClone(2, table->get_Rows()->idx_get(0), false);

//AddClone adiciona uma coluna ao final da tabela
table->get_Columns()->AddClone(table->get_Columns()->idx_get(0), false);

//InsertClone adiciona uma coluna em uma posição específica da tabela
table->get_Columns()->InsertClone(2, table->get_Columns()->idx_get(0), false);


// Salva a apresentação no disco
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);

Remover uma Linha ou Coluna de uma Tabela

  1. Crie uma instância da classe Presentation e carregue a apresentação,
  2. Obtenha a referência de um slide através do seu índice.
  3. Defina um array de columnWidth.
  4. Defina um array de rowHeight.
  5. Adicione um objeto ITable ao slide através do método AddTable().
  6. Remova a linha da tabela.
  7. Remova a coluna da tabela.
  8. Salve a apresentação modificada.

Este código C++ mostra como remover uma linha ou coluna de uma tabela:

// O caminho para o diretório de documentos.
const String outPath = u"../out/RemovingRowColumn_out.pptx";

// Instancia a classe Presentation
SharedPtr<Presentation> pres = MakeObject<Presentation>();

// Acessa o primeiro slide
SharedPtr<ISlide> islide = pres->get_Slides()->idx_get(0);

// Define as colunas com larguras e as linhas com alturas
System::ArrayPtr<double> dblCols = System::MakeObject<System::Array<double>>(4, 70);
System::ArrayPtr<double> dblRows = System::MakeObject<System::Array<double>>(4, 70);

// Adiciona uma forma de tabela ao slide
SharedPtr<ITable> table = islide->get_Shapes()->AddTable(100, 50, dblCols, dblRows);

table->get_Rows()->RemoveAt(1, false);
table->get_Columns()->RemoveAt(1, false);


 // Mescla as células (1, 1) x (2, 1)
table->MergeCells(table->idx_get(1, 1), table->idx_get(2, 1), false);

// Mescla as células (1, 2) x (2, 2)
table->MergeCells(table->idx_get(1, 2), table->idx_get(2, 2), false);


// Salva a apresentação no disco
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);

Definir Formatação de Texto no Nível de Linha da Tabela

  1. Crie uma instância da classe Presentation e carregue a apresentação,
  2. Obtenha a referência de um slide através do seu índice.
  3. Acesse o objeto ITable relevante a partir do slide.
  4. Defina a set_FontHeight() das células da primeira linha.
  5. Defina a set_Alignment() e set_MarginRight() das células da primeira linha.
  6. Defina a set_TextVerticalType() das células da segunda linha.
  7. Salve a apresentação modificada.

Este código C++ demonstra a operação.

// Cria uma instância da classe Presentation
auto presentation = System::MakeObject<Presentation>();

auto slide = presentation->get_Slides()->idx_get(0);

auto someTable = System::AsCast<ITable>(presentation->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0));
// Vamos supor que a primeira forma no primeiro slide seja uma tabela
// Define a altura da fonte das células da primeira linha
auto portionFormat = System::MakeObject<PortionFormat>();
portionFormat->set_FontHeight(25.0f);
someTable->get_Rows()->idx_get(0)->SetTextFormat(portionFormat);

// Define o alinhamento de texto e a margem direita das células da primeira linha
auto paragraphFormat = System::MakeObject<ParagraphFormat>();
paragraphFormat->set_Alignment(TextAlignment::Right);
paragraphFormat->set_MarginRight(20.0f);
someTable->get_Rows()->idx_get(0)->SetTextFormat(paragraphFormat);

// Define o tipo de texto vertical das células da segunda linha
auto textFrameFormat = System::MakeObject<TextFrameFormat>();
textFrameFormat->set_TextVerticalType(TextVerticalType::Vertical);
someTable->get_Rows()->idx_get(1)->SetTextFormat(textFrameFormat);

// Salva a apresentação no disco
presentation->Save(u"result.pptx", SaveFormat::Pptx);

Definir Formatação de Texto no Nível de Coluna da Tabela

  1. Crie uma instância da classe Presentation e carregue a apresentação,
  2. Obtenha a referência de um slide através do seu índice.
  3. Acesse o objeto ITable relevante a partir do slide.
  4. Defina a set_FontHeight() das células da primeira coluna.
  5. Defina a set_Alignment() e set_MarginRight() das células da primeira coluna.
  6. Defina a set_TextVerticalType() das células da segunda coluna.
  7. Salve a apresentação modificada.

Este código C++ demonstra a operação:

// Cria uma instância da classe Presentation
auto pres = System::MakeObject<Presentation>();

auto slide = pres->get_Slides()->idx_get(0);

auto someTable = System::AsCast<ITable>(pres->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0));
// Vamos supor que a primeira forma no primeiro slide seja uma tabela

// Define a altura da fonte das células da primeira coluna
auto portionFormat = System::MakeObject<PortionFormat>();
portionFormat->set_FontHeight(25.0f);
someTable->get_Columns()->idx_get(0)->SetTextFormat(portionFormat);

// Define o alinhamento de texto e a margem direita das células da primeira coluna em uma única chamada
auto paragraphFormat = System::MakeObject<ParagraphFormat>();
paragraphFormat->set_Alignment(TextAlignment::Right);
paragraphFormat->set_MarginRight(20.0f);
someTable->get_Columns()->idx_get(0)->SetTextFormat(paragraphFormat);

// Define o tipo de texto vertical das células da segunda coluna
auto textFrameFormat = System::MakeObject<TextFrameFormat>();
textFrameFormat->set_TextVerticalType(TextVerticalType::Vertical);
someTable->get_Columns()->idx_get(1)->SetTextFormat(textFrameFormat);

pres->Save(u"result.pptx", SaveFormat::Pptx);

Obter Propriedades de Estilo da Tabela

Aspose.Slides permite que você recupere as propriedades de estilo de uma tabela para que possa usar esses detalhes em outra tabela ou em outro local. 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);

FAQ

Posso aplicar temas/estilos do PowerPoint a uma tabela já criada?

Sim. A tabela herda o tema do slide/layout/master e ainda é possível sobrescrever preenchimentos, bordas e cores de texto sobre esse tema.

Posso ordenar linhas da tabela como no Excel?

Não, as tabelas do Aspose.Slides não possuem ordenação ou filtros integrados. Ordene seus dados na memória primeiro e, em seguida, repovoar as linhas da tabela nessa ordem.

Posso ter colunas em faixas (listradas) mantendo cores personalizadas em células específicas?

Sim. Ative colunas em faixas e, em seguida, sobrescreva células específicas com formatação local; a formatação nível célula tem precedência sobre o estilo da tabela.