想要完整提取word文件中的图片,VBA宏中并没有相应的方法,在网络中能找的方法一般就2种,一种是另存为网页,然后在files文件夹下会自动产生图片,此方法有弊端,当一个图片重复使用则只会保存一份,当然这其实正常,而且是按照浏览顺序产生的文件名,如图中所示:
这种还是比较简单的图片类型,但是如果你有需要顺序数据的需求的话,重复的图片会导致index错误。所以记录一种单独提取图片的方法,代码如下:
int picindex = 0;
foreach (Word.InlineShape item in _doc.InlineShapes)
{
if (item.Type == Word.WdInlineShapeType.wdInlineShapePicture ||
item.Type == Word.WdInlineShapeType.wdInlineShapeLinkedPicture)
{
FileStream fstream = new FileStream($@"{TempPath}\{picindex}.emf", FileMode.Create, FileAccess.Write);
var buffer = (byte[])item.Range.EnhMetaFileBits;
fstream.Write(buffer, 0, buffer.Length);
fstream.Close();
imageList.Add($@"{TempPath}\{picindex}.emf");
picindex++;
Thread.Sleep(200);
}
}
遍历文档中的所有图片,以流的方式单独保存还可以自定义文件名,这里需要注意!必须添加延迟等待,因为需要等文档预加载完毕通过流传输的图片才正确,如果不添加延迟等待图片会丢失,固态硬盘可以忽略。