我有一个Word文档(在下面的代码中称为“ doc”),其中包含一堆.jpg图片。其中一些文本环绕着它们(=形状),而有些则没有(= InlineShapes)。我可以像这样保存InlineShapes:
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()”检查格式,则会注意到未列出位图,这说明了为什么它不起作用。而是列出了“ Office绘图形状格式”。我想我应该尝试以某种方式将Shape转换为InlineShape,但是我无法使其工作。当我尝试这样做时–
s.ConvertToInlineShape();
–我收到“无效参数”异常。
最佳答案
好的,问题似乎出在我尝试在错误的时间进行转换的问题。如果我尝试遍历所有Shape并进行转换,然后再尝试进行其他操作,则效果很好。
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);
}