Crie a apresentação do PowerPoint 2007 a partir de um modelo
-
22-08-2019 - |
Pergunta
Eu preciso criar uma apresentação do PowerPoint 2007 a partir de um modelo com Open XML Format SDK 2.0. O modelo deve ser fornecido pelo cliente e é usado para um estilo de layout individual (fonte, cor ou imagem de fundo, ...). Ele precisa conter duas lâminas predefinidas:
- Slide de texto
- Slide de imagem
O aplicativo agora deve criar uma cópia do arquivo de modelo, criar várias cópias dos slides de texto e imagem e substituir os detentores de conteúdo por algum conteúdo.
Eu já encontrei alguns trechos de código da Microsoft Para editar o título de um slide, exclua -os ou substitua uma imagem em um slide. Mas não descobri como posso criar uma cópia de um slide existente. Talvez alguém possa me ajudar com isso.
Solução
Eu tenho procurado uma resposta semelhante e encontrei alguns recursos para compartilhar:
http://msdn.microsoft.com/en-us/library/cc850834(ffice.14).aspx
ou mais amostras
http://msdn.microsoft.com/en-us/library/cc850828(office.14).aspx
ou este site
http://www.openxmldeveloper.com
Há também isso Livro grátis documentando o padrão OpenXML o que foi um pouco útil.
Outras dicas
Este é um exemplo do que estou procurando, mas se não, me avise: http://openxmldeveloper.org/articles/7429.aspx
Para C#
File.Copy(SourceFile,ExportedFile);
Você basicamente mantém o arquivo original.
Agora você abre o ExportedFile
PowerPoint.Application ppApp = new PowerPoint.Application();
PowerPoint.Presentation presentation;
presentation = ppApp.Presentations.Open(ExportedFile, MsoTriState.msoFalse, MsoTriState.msoTrue, MsoTriState.msoTrue);
Agora itera todos os slides/formas
foreach (PowerPoint.Slide slide in presentation.Slides)
{
slide.Select();
foreach (PowerPoint.Shape shape in slide.Shapes)
{
if (shape.Type.ToString().Equals("<any type of shape>"))
{
if (shape.TextFrame.TextRange.Text.Equals("<contains a name"))
{
shape.TextFrame.TextRange.Text = <new value>;
shape.Delete(); // or delete
shape.AddPicture(<your new picture>, MsoTriState.msoTrue, MsoTriState.msoTrue, left, top, width, height);
}
}
}
}
Espero que isso possa esclarecer sua solicitação.