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);
}
} 展开
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);
}
} 展开
展开全部
你的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
//
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)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询