C# winform读取word中的图片、文字并保存

想把word中的图片提取出来保存为jpg格式,并在该位置加上图片的地址。然后把其他文字的保存为txt格式,代码如下:(文字保存部分还未实现),请教错在哪里?调试的时候是f... 想把word中的图片提取出来保存为jpg格式,并在该位置加上图片的地址。然后把其他文字的保存为txt格式,代码如下:(文字保存部分还未实现),请教错在哪里?调试的时候是 foreach (Paragraph item in docWord.Paragraphs)这里报错,远程过程调用失败。 (异常来自 HRESULT:0x800706BE)。求解,为什么?

private void ReadWord(string FilePath, string SavePath)
{
object oMissing = System.Reflection.Missing.Value;
object filename = FilePath;
Microsoft.Office.Interop.Word._Application appWord = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word._Document docWord = appWord.Documents.Open(ref filename, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
//int i = docWord.Paragraphs.Count;
//循环文章中的各个章节
foreach (Paragraph item in docWord.Paragraphs)
{
if (item != null)
{
if (item.Range.Text.Trim() != "")
{
//判断该范围内是否存在图片
if (item.Range.InlineShapes.Count != 0)
{
foreach (InlineShape shape in item.Range.InlineShapes)
{
//string txt = "";
if (shape.Type == WdInlineShapeType.wdInlineShapePicture)
{
//利用剪贴板保存数据
shape.Select();//选定当前图片
appWord.Selection.Copy();//copy当前图片
string fileName = "";
if (Clipboard.ContainsImage())
{
Bitmap bmp = new Bitmap(Clipboard.GetImage());
filename = txt_Before.Text.Trim() + lbl_Number.Text + ".jpg";
bmp.Save(SavePath + “//"+fileName, System.Drawing.Imaging.ImageFormat.Jpeg);
//txt += SavePath “//"+fileName;
}
}
if (shape.Type == WdInlineShapeType.wdInlineShapeChart)
{
//txt += shape.ToString();
}
}
}
}
}
docWord.Close(ref oMissing, ref oMissing, ref oMissing);
appWord.Quit(ref oMissing, ref oMissing, ref oMissing);
}
}
展开
 我来答
zhouge870103
2013-05-05 · TA获得超过1112个赞
知道小有建树答主
回答量:724
采纳率:0%
帮助的人:501万
展开全部
你的docWord是不是null
//
Word 开发人员参考
Paragraphs集合对象
所选内容、范围或文档中的Paragraph对象的集合。

上面是官方API说明,意思是【选择】的段落内容,所以遍历前先全选文章。

官方api可以在word中查看
office2007:视图-宏-查看宏-开发帮助
office2003:工具-宏-查看宏-开发帮助

示例

本示例将活动文档第一节中所有段落集合的行距设置为单倍行距。

Visual Basic for Applications

ActiveDocument.Sections(1).Range.Paragraphs.LineSpacingRule = _
wdLineSpaceSingle
本示例将选定内容的首段的行距设置为双倍行距。

Visual Basic for Applications

Selection.Paragraphs(1).LineSpacingRule = wdLineSpaceDouble
更多追问追答
追问
不是很明白,如何修改?
Microsoft.Office.Interop.Word._Document docWord =null;
docWord= appWord.Documents.Open………………
这样?还是不行啊,现在就是读不到,调试的时候可以读到段落有多少个(i有值),但遍历段落的时候就出问题了。
追答
你试下foreach (Paragraph item in appWord.ActiveDocument.Paragraphs)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式