Ho un sacco di dati che ho bisogno di esportare da un sito Web a una presentazione di PowerPoint e ho utilizzato Open XML SDK 2.0 per eseguire questo compito. Ho una presentazione di PowerPoint che sto utilizzando lo strumento di produttività Open XML SDK 2.0 per generare il codice del modello che posso utilizzare per ricreare l'esportazione.Come dividere la tabella in una nuova diapositiva di PowerPoint quando il contenuto scorre fuori dalla diapositiva corrente utilizzando Open XML SDK 2.0
In una di queste diapositive ho una tabella e il requisito è quello di aggiungere dati a quella tabella e suddividere quella tabella tra più diapositive se la tabella supera la parte inferiore della diapositiva. L'approccio che ho preso è quello di determinare l'altezza della tabella e se supera l'altezza della diapositiva, spostare quel nuovo contenuto nella diapositiva successiva. Ho letto il blog Bryan and Jones aggiungendo dati ripetuti a una diapositiva di PowerPoint, ma il mio scenario è leggermente diverso. Usano il seguente codice:
A.Table tbl = current.Slide.Descendants<A.Table>().First();
A.TableRow tr = new A.TableRow();
tr.Height = heightInEmu;
tr.Append(CreateDrawingCell(imageRel + imageRelId));
tr.Append(CreateTextCell(category));
tr.Append(CreateTextCell(subcategory));
tr.Append(CreateTextCell(model));
tr.Append(CreateTextCell(price.ToString()));
tbl.Append(tr);
imageRelId++;
Questo non funziona per me dato che essi sanno che cosa altezza per impostare la riga della tabella per quanto sarà l'altezza dell'immagine, ma quando l'aggiunta di diverse quantità di testo che Non conosco l'altezza in anticipo quindi ho appena impostato tr.Height
su un valore predefinito. Qui è il mio tentativo di capire, al culmine tavolo:
A.Table tbl = tableSlide.Slide.Descendants<A.Table>().First();
A.TableRow tr = new A.TableRow();
tr.Height = 370840L;
tr.Append(PowerPointUtilities.CreateTextCell("This");
tr.Append(PowerPointUtilities.CreateTextCell("is"));
tr.Append(PowerPointUtilities.CreateTextCell("a"));
tr.Append(PowerPointUtilities.CreateTextCell("test"));
tr.Append(PowerPointUtilities.CreateTextCell("Test"));
tbl.Append(tr);
tableSlide.Slide.Save();
long tableHeight = PowerPointUtilities.TableHeight(tbl);
Qui ci sono i metodi di supporto:
public static A.TableCell CreateTextCell(string text)
{
A.TableCell tableCell = new A.TableCell(
new A.TextBody(new A.BodyProperties(),
new A.Paragraph(new A.Run(new A.Text(text)))),
new A.TableCellProperties());
return tableCell;
}
public static Int64Value TableHeight(A.Table table)
{
long height = 0;
foreach (var row in table.Descendants<A.TableRow>()
.Where(h => h.Height.HasValue))
{
height += row.Height.Value;
}
return height;
}
Questo aggiunge correttamente la nuova riga della tabella alla tabella esistente, ma quando provo e ottenere il altezza del tavolo, restituisce l'altezza originale e non la nuova altezza. La nuova altezza indica l'altezza predefinita inizialmente impostata e non l'altezza dopo che è stata inserita una grande quantità di testo. Sembra che l'altezza venga riadattata solo quando viene aperta in PowerPoint.
Ho anche provato ad accedere all'altezza della cella di tabella più grande nella riga, ma non riesco a trovare la proprietà giusta per eseguire quell'attività.
La mia domanda è come si determina l'altezza di una riga di tabella aggiunta dinamicamente poiché non sembra aggiornare l'altezza della riga finché non viene aperta in PowerPoint? Altri modi per determinare quando dividere il contenuto in un'altra diapositiva mentre si utilizza Open XML SDK 2.0? Sono aperto a qualsiasi suggerimento su un approccio migliore che qualcuno potrebbe aver preso poiché non c'è molta documentazione su questo argomento.
Sì, voglio dire questo è stato il percorso che stavo giù, ma non ha avuto alcuna fortuna. Cercando di più per un esempio funzionante con codice. – amurra
@Otaku: Non ho mai trovato una soluzione a questo problema e poiché il tempo è stato un problema per il mio progetto, abbiamo deciso di lasciare semplicemente scorrere i dati dalla diapositiva e rendere l'utente finale riformattare i dati. – amurra