Gestire righe e colonne nelle tabelle PowerPoint con C++

Introduzione

Per consentire di gestire le righe e le colonne di una tabella in una presentazione PowerPoint, Aspose.Slides fornisce la classe Table, l’interfaccia ITable e molti altri tipi.

Imposta la prima riga come intestazione

  1. Crea un’istanza della classe Presentation e carica la presentazione.
  2. Ottieni il riferimento a una diapositiva tramite il suo indice.
  3. Crea un oggetto ITable e impostalo a null.
  4. Scorri tutti gli oggetti IShape per trovare la tabella pertinente.
  5. Imposta la prima riga della tabella come intestazione.

Questo codice C++ mostra come impostare la prima riga di una tabella come intestazione:

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

// Accede alla prima diapositiva
auto sld = pres->get_Slides()->idx_get(0);

// Inizializza il TableEx nullo
SharedPtr<ITable> tbl;

// Itera tra le forme e imposta un riferimento alla tabella
for (const auto& shp : sld->get_Shapes())
{
    if (ObjectExt::Is<ITable>(shp))
    {
        tbl = System::ExplicitCast<ITable>(shp);
    }
}

// Imposta la prima riga di una tabella come intestazione 
tbl->set_FirstRow(true);

Clona una riga o una colonna della tabella

  1. Crea un’istanza della classe Presentation e carica la presentazione,
  2. Ottieni il riferimento a una diapositiva tramite il suo indice.
  3. Definisci un array di columnWidth.
  4. Definisci un array di rowHeight.
  5. Aggiungi un oggetto ITable alla diapositiva tramite il metodo AddTable().
  6. Clona la riga della tabella.
  7. Clona la colonna della tabella.
  8. Salva la presentazione modificata.

Questo codice C++ mostra come clonare una riga o una colonna di una tabella PowerPoint:

 // Il percorso della directory dei documenti.
const String outPath = u"../out/CloningInTable_out.pptx";

// Istanzia la classe Presentation
SharedPtr<Presentation> pres = MakeObject<Presentation>();

// Accede alla prima diapositiva
SharedPtr<ISlide> islide = pres->get_Slides()->idx_get(0);

// Definisce le colonne con larghezze e le righe con altezze
System::ArrayPtr<double> dblCols = System::MakeObject<System::Array<double>>(4, 70);
System::ArrayPtr<double> dblRows = System::MakeObject<System::Array<double>>(4, 70);

// Aggiunge una forma tabella alla diapositiva
SharedPtr<ITable> table = islide->get_Shapes()->AddTable(100, 50, dblCols, dblRows);


// Imposta il formato del bordo per ogni cella
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 aggiunge una riga alla fine della tabella
table->get_Rows()->AddClone(table->get_Rows()->idx_get(0), false);

//InsertClone aggiunge una riga in una posizione specifica nella tabella
table->get_Rows()->InsertClone(2, table->get_Rows()->idx_get(0), false);

//AddClone aggiunge una colonna alla fine della tabella
table->get_Columns()->AddClone(table->get_Columns()->idx_get(0), false);

//InsertClone aggiunge una colonna in una posizione specifica nella tabella
table->get_Columns()->InsertClone(2, table->get_Columns()->idx_get(0), false);


// Salva la presentazione su disco
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);

Rimuovi una riga o una colonna da una tabella

  1. Crea un’istanza della classe Presentation e carica la presentazione,
  2. Ottieni il riferimento a una diapositiva tramite il suo indice.
  3. Definisci un array di columnWidth.
  4. Definisci un array di rowHeight.
  5. Aggiungi un oggetto ITable alla diapositiva tramite il metodo AddTable().
  6. Rimuovi la riga della tabella.
  7. Rimuovi la colonna della tabella.
  8. Salva la presentazione modificata.

Questo codice C++ mostra come rimuovere una riga o una colonna da una tabella:

// Il percorso della directory dei documenti.
const String outPath = u"../out/RemovingRowColumn_out.pptx";

// Istanzia la classe Presentation
SharedPtr<Presentation> pres = MakeObject<Presentation>();

// Accede alla prima diapositiva
SharedPtr<ISlide> islide = pres->get_Slides()->idx_get(0);

// Definisce le colonne con larghezze e le righe con altezze
System::ArrayPtr<double> dblCols = System::MakeObject<System::Array<double>>(4, 70);
System::ArrayPtr<double> dblRows = System::MakeObject<System::Array<double>>(4, 70);

// Aggiunge una forma tabella alla diapositiva
SharedPtr<ITable> table = islide->get_Shapes()->AddTable(100, 50, dblCols, dblRows);

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


// Unisce le celle (1, 1) x (2, 1)
table->MergeCells(table->idx_get(1, 1), table->idx_get(2, 1), false);

// Unisce le celle (1, 2) x (2, 2)
table->MergeCells(table->idx_get(1, 2), table->idx_get(2, 2), false);


// Salva la presentazione su disco
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);

Imposta la formattazione del testo a livello di riga della tabella

  1. Crea un’istanza della classe Presentation e carica la presentazione,
  2. Ottieni il riferimento a una diapositiva tramite il suo indice.
  3. Accedi all’oggetto ITable pertinente dalla diapositiva.
  4. Imposta l’altezza del carattere delle celle della prima riga con set_FontHeight().
  5. Imposta l’allineamento delle celle della prima riga con set_Alignment() e il margine destro con set_MarginRight().
  6. Imposta il tipo di testo verticale delle celle della seconda riga con set_TextVerticalType().
  7. Salva la presentazione modificata.

Questo codice C++ dimostra l’operazione.

// Crea un'istanza della 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));
// Supponiamo che la prima forma nella prima diapositiva sia una tabella
// Imposta l'altezza del carattere delle celle della prima riga
auto portionFormat = System::MakeObject<PortionFormat>();
portionFormat->set_FontHeight(25.0f);
someTable->get_Rows()->idx_get(0)->SetTextFormat(portionFormat);

// Imposta l'allineamento del testo e il margine destro delle celle della prima riga
auto paragraphFormat = System::MakeObject<ParagraphFormat>();
paragraphFormat->set_Alignment(TextAlignment::Right);
paragraphFormat->set_MarginRight(20.0f);
someTable->get_Rows()->idx_get(0)->SetTextFormat(paragraphFormat);

// Imposta il tipo di testo verticale delle celle della seconda riga
auto textFrameFormat = System::MakeObject<TextFrameFormat>();
textFrameFormat->set_TextVerticalType(TextVerticalType::Vertical);
someTable->get_Rows()->idx_get(1)->SetTextFormat(textFrameFormat);

// Salva la presentazione su disco
presentation->Save(u"result.pptx", SaveFormat::Pptx);

Imposta la formattazione del testo a livello di colonna della tabella

  1. Crea un’istanza della classe Presentation e carica la presentazione,
  2. Ottieni il riferimento a una diapositiva tramite il suo indice.
  3. Accedi all’oggetto ITable pertinente dalla diapositiva.
  4. Imposta l’altezza del carattere delle celle della prima colonna con set_FontHeight().
  5. Imposta l’allineamento delle celle della prima colonna con set_Alignment() e il margine destro con set_MarginRight().
  6. Imposta il tipo di testo verticale delle celle della seconda colonna con set_TextVerticalType().
  7. Salva la presentazione modificata.

Questo codice C++ dimostra l’operazione:

// Crea un'istanza della 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));
// Supponiamo che la prima forma nella prima diapositiva sia una tabella

// Imposta l'altezza del carattere delle celle della prima colonna
auto portionFormat = System::MakeObject<PortionFormat>();
portionFormat->set_FontHeight(25.0f);
someTable->get_Columns()->idx_get(0)->SetTextFormat(portionFormat);

// Imposta l'allineamento del testo e il margine destro delle celle della prima colonna in un'unica chiamata
auto paragraphFormat = System::MakeObject<ParagraphFormat>();
paragraphFormat->set_Alignment(TextAlignment::Right);
paragraphFormat->set_MarginRight(20.0f);
someTable->get_Columns()->idx_get(0)->SetTextFormat(paragraphFormat);

// Imposta il tipo di testo verticale delle celle della seconda colonna
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);

Ottieni le proprietà dello stile della tabella

Aspose.Slides consente di recuperare le proprietà di stile di una tabella in modo da poterle utilizzare per un’altra tabella o altrove. Questo codice C++ mostra come ottenere le proprietà di stile da uno stile predefinito della tabella:

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 applicare temi/stili di PowerPoint a una tabella già creata?

Sì. La tabella eredita il tema della diapositiva/layout/master e puoi comunque sovrascrivere riempimenti, bordi e colori del testo sopra quel tema.

Posso ordinare le righe della tabella come in Excel?

No, le tabelle di Aspose.Slides non hanno ordinamento o filtri integrati. Ordina i dati in memoria prima, quindi ricrea le righe della tabella nell’ordine desiderato.

Posso avere colonne a bande (striate) mantenendo colori personalizzati su celle specifiche?

Sì. Attiva le colonne a bande, poi sovrascrivi le celle specifiche con formattazione locale; la formattazione a livello di cella ha precedenza sullo stile della tabella.