2014-12-25 4 views
2

У меня есть документ Word (называемый «doc» в коде ниже) с кучей изображений .jpg. У некоторых из них есть текст, обернутый вокруг них (= Shapes), некоторые из них не (= InlineShapes). Я могу спасти InlineShapes так:image (noninlineshape) from Word to clipboard to file

InlineShape ils = doc.InlineShapes[1]; 
ils.Select(); 
application.Selection.Copy(); 
IDataObject data = Clipboard.GetDataObject(); 
if (data.GetDataPresent(DataFormats.Bitmap)) { 
    Image image = (Image)data.GetData(DataFormats.Bitmap, true); 
     image.Save("c:\\image.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); 
} 

Но если я пытаюсь получить другие из них, заменив первые две строчки с ними -

Shape s = doc.Shapes[1]; 
s.Select(); 

- это не будет работать. И если я проверю форматы с помощью «data.GetFormats()», я заметил, что Bitmap не указан, что объясняет, почему он не работает. Вместо этого он отображает «Формат формы чертежа Office». Я полагаю, что я должен попытаться каким-то образом преобразовать форму в InlineShape, но я не смог заставить ее работать. Когда я пытаюсь сделать это вот так:

s.ConvertToInlineShape(); 

- Я получаю исключение «недопустимый параметр».

ответ

1

ОК, проблема в том, что я пытался конвертировать ее в неподходящее время. Если я прокручу все фигуры и преобразую их, прежде чем пытаться сделать что-нибудь еще, он отлично работает.

int number = doc.InlineShapes.Count; 
MessageBox.Show(number.ToString()); // 0 to begin with 

foreach (Microsoft.Office.Interop.Word.Shape s in doc.Shapes) { 
    MessageBox.Show(s.Type.ToString()); 
    if (s.Type.ToString() == "msoTextBox") { 
     MessageBox.Show(s.TextFrame.TextRange.Text); 
    } else if (s.Type.ToString() == "msoPicture") { 
     s.ConvertToInlineShape(); 
    } 
} 

number = doc.InlineShapes.Count; 
MessageBox.Show(number.ToString()); // Now it's 1 as it should be 

InlineShape ils = doc.InlineShapes[1]; 
ils.Select(); 
application.Selection.Copy(); 

IDataObject data = Clipboard.GetDataObject(); 
if (data.GetDataPresent(DataFormats.Bitmap)) { 
    Image image = (Image)data.GetData(DataFormats.Bitmap, true); 
    image.Save("c:\\image.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); 
}