c#通过标签读取word段落表格(解析无法操作读取的真正原因)
2013-09-28 12:50
489 查看
我是一名c#零基础的大一学生,因最近手头有一个c#操作word的企业项目开始了c#的征程,项目需要通过word标签来操作word的方法,但是网上大多数只有通过标签来插入的代码,对于通过标签读取word段落和表格的方法资源少,而且大多数描述不详细,且好多人都是小坑,在此把我研究的结果共享给大家。
1. 首先是第一个常遇问题:
2.第二个问题
解决通过标签读取段落表格结果为空的问题
这个问题时本文章的精华所在,之所以大多数人通过标签读取word的表格内容会失败(结果总是为空),是因为在通过插入方法插入段落和表格并把它保存时,会自动删除原先的标签(标签名和位置都会删除),所以无法读取。 所以要解决此类的方法就需要在插入内容时生成一个和原先标签名和标签位置一模一样的标签,具体方法如下:
1. 首先是第一个常遇问题:
【操作WORD问题】无法将类型为“Word.ApplicationClass”的COM对象强制转换为接口类型“Word._Application”-.NET技术/C#
此类问题一般不是网上所说的少添加了什么引用的问题,一般是你的office的问题,可能是版本的问题,也可能是office组件不全的问题,对于这种问题不要照着网上修改了,费时费力,果断卸载重装,卸载之后记得使用360或金山安全卫士删除一下无用的注册表,解决版本的问题。2.第二个问题
解决通过标签读取段落表格结果为空的问题
这个问题时本文章的精华所在,之所以大多数人通过标签读取word的表格内容会失败(结果总是为空),是因为在通过插入方法插入段落和表格并把它保存时,会自动删除原先的标签(标签名和位置都会删除),所以无法读取。 所以要解决此类的方法就需要在插入内容时生成一个和原先标签名和标签位置一模一样的标签,具体方法如下:
//插入表格,bookmark书签 public Table InsertTable(string bookmark, int rows, int columns, float width) { object miss = System.Reflection.Missing.Value; object oStart = bookmark; Range range = wordDoc.Bookmarks.get_Item(ref oStart).Range;//表格插入位置 Table newTable = wordDoc.Tables.Add(range, rows, columns, ref miss, ref miss); //由于附值以后书签自动消除,为了以后便于修改,需要把书签再自动生成一个 object oRng = range; wordDoc.Bookmarks.Add(oStart.ToString(), ref oRng); //设置表的格式 newTable.Borders.Enable = 1; //允许有边框,默认没有边框(为0时报错,1为实线边框,2、3为虚线边框,以后的数字没试过) newTable.Borders.OutsideLineWidth = WdLineWidth.wdLineWidth050pt;//边框宽度 if (width != 0) { newTable.PreferredWidth = width;//表格宽度 } newTable.AllowPageBreaks = false; return newTable; } //通过标签读取表格中的数据(路径,第几行,第几列的数据,标签名) public string readtable(string filePath, int row, int columns, string book) { killWinWordProcess(); wordApp = new ApplicationClass(); wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone; wordApp.Visible = false; object missing = System.Reflection.Missing.Value; object templateName = filePath; wordDoc = wordApp.Documents.Open(ref templateName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing); wordDoc.Activate(); object bq = "book"; Bookmark mbook = wordDoc.Bookmarks.get_Item(ref bq); Table ta = mbook.Range.Tables[1]; string value = ta.Cell(row, columns).Range.Text; MessageBox.Show(value); return value; } //插入一段文字,text为文字内容 public void InsertText(string bookmark, string text) { object missingValue = System.Reflection.Missing.Value; if (text != null) { object oStart = bookmark; string TT = text; char[] cText = new char[TT.Length]; cText = TT.ToCharArray(); string tText = ""; for (int n = 0; n < TT.Length; n++) { //由于回车建“\n”作为标志,所以每当有回车时表示一段文字开始,确定该标签下每段的字体一致(设定字体只能按段落来设置) if (cText != '\n' && n < TT.Length - 1) tText = tText + cText ; else { Word.Range bookRng = wordDoc.Bookmarks.get_Item(ref oStart).Range; bookRng.Text = tText; //********************************************************************** bookRng.Font.Bold = 1;//设置粗细 bookRng.Font.Size = 22;//字体大小 bookRng.InsertParagraphAfter(); //由于附值以后书签自动消除,为了以后便于修改,需要把书签再自动生成一个 object oRng = bookRng; wordDoc.Bookmarks.Add(oStart.ToString(), ref oRng); object bSaveChange = true; tText = ""; } } } } //通过一个标签读取word的内容 public string reading(string filePath, string book) { killWinWordProcess(); wordApp = new ApplicationClass(); wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;///////////////////////?????????????????? wordApp.Visible = false; object missing = System.Reflection.Missing.Value; object templateName = filePath; MessageBox.Show(templateName.ToString()); wordDoc = wordApp.Documents.Open(ref templateName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing); wordDoc.Activate(); object bq = "book"; Bookmark mbook = wordDoc.Bookmarks.get_Item(ref bq); string s = mbook.Range.Text; MessageBox.Show(s); return s; }
相关文章推荐
- C# / .net服务端程序,无法通过防火墙的真正坑爹原因
- C# 操作Word书签(二)——插入图片、表格到书签;读取、替换书签
- Word C# 操作表格 提示集合所要求的成员不存在
- 【20090313-01】C#读取Word表格中的数据 (转)
- c#调用Aspose.Word组件操作word 插入文字/图片/表格 书签替换套打
- (转)无法将类型为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Word._Application”。此操作失败的原因是对 IID 为“{00020970-
- C# 操作Word书签(二)——读取、替换Word书签
- c#操作word表格
- C#实现Word中表格信息读取
- c#之Word基本操作----创建,打开,绘制表格,插入图片等
- c#操作word中表格
- [原]C# 读取Word 表格数据(单元格纵合并)
- Word C# 报异常 无法访问此集合中的单独的行,因为表格有纵向合并的单元格
- c#操作word表格
- C#操作Office文件,成功释放,但读取文件时提示"文件***正由另一进程使用,因此该进程无法访问此文件"的解决办法
- C#对Word文档的创建、插入表格、设置样式等操作!
- C#通过COM组件对WORD文档操作
- C#实现Word中表格信息读取
- c#操作word表格
- POI操作word在标签位置插入表格