2010-03-01 11 views
3

J'ai besoin d'une application pour copier le texte et les images de PowerPoint à Word. J'utilise ces bibliothèques: Microsoft.Office.Interop.PowerPoint et Microsoft.Office.Interop.Word.C# copier le formulaire de l'image PowerPoint à Word

Le texte est facile à transférer, mais quand je trouve dans PowerPoint une forme contenant uniquement une image, il affiche cette erreur: « Une erreur générique est survenue GDI + », à cette partie du code:

foreach (PowerPoint.Shape shape in slide.Shapes) 
{ 
    if (shape.HasTextFrame != MsoTriState.msoTrue){ 
     shape.Copy(); 
     Image img = (Image)Clipboard.GetData(DataFormats.Bitmap); 
     string filepath = Environment.SpecialFolder.Desktop + "\\img.jpg"; 
     if (File.Exists(filepath)) 
     { 
     File.Delete(filepath); 
     } 
     img.Save(filepath); 
     doc.Shapes.AddPicture(filepath, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing); 
    } 
} 

Comment est-ce que je peux copier une forme contenant une image de PowerPoint à Word dans ce cas? Toute aide est la bienvenue. Je préfère un échantillon de code.

Merci.

+0

Est-ce que shape.Copy() ou Clipboard.GetData (..) échoue? –

+0

Echec à Clipboard.GetData (..) – Emanuel

+0

Le code fonctionne correctement sur ma boîte Win7 (.Net4 et Office 2010). Quel système d'exploitation fonctionne-t-il et quelle version de .Net? –

Répondre

0

Si vous réécrivez votre code comme ceci, cela fonctionnera-t-il? GetImage fera une conversion automatique pour s'assurer que c'est une image. Si vous savez que c'est un bitmap, vous pouvez inclure la vérification que j'ai dans le code pour s'assurer que le presse-papiers contient effectivement une image.

shape.Copy(); 
bool imgOk = Clipboard.ContainsImage(); 
if (imgOk) 
{ 
    Image img = Clipboard.GetImage(); 
    MessageBox.Show(imgOk.ToString()); 
    string filepath = @"c:\temp\img.jpg"; 
    if (File.Exists(filepath)) 
    { 
     File.Delete(filepath); 
    } 
    img.Save(filepath); 
}