C#使用Aspose.Word读取word文档里的文本域

原创 2015年11月18日 16:45:00

这是开博客第一篇分享,记录代码的文字


C#使用Aspose.Word读取word文档里的文本域


using Aspose.Words;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
namespace ContractDocumentMaster {
    public class Program {
        public static string DocPath = @"E:\work_api\";
        public static string DocName = "contractTemplate.doc";

        /// <summary>
        /// 读取Word文档,提前文档里的输入域。从«工程名称» 中查找工程名称
        /// 使用破解版Aspose.Word,版本6.5.0.0
        /// </summary>
        public static void Main(string[] args) {
            Console.WriteLine("Program running...wait...\n\n");

            //PrintAllAsposeWordNodeType();
            Run();
            //TestRegExp();
            Console.WriteLine("\n\nProgram Finished. Press any key to exit....");
            Console.ReadKey();
        }

        /// <summary>
        /// 测试正则表达式,多行模式
        /// </summary>
        public static void TestRegExp() {
            var str = "«工程名称»---------«工程__名称»";
            var reg = new Regex(@"«([^\s»]*)»", RegexOptions.Multiline);
            var match = reg.Match(str);

            while(match.Success) {
                Console.WriteLine("Match : " + match.Groups[1].Value);
                match = match.NextMatch();
            }
        }

        /// <summary>
        /// 主函数
        /// </summary>
        public static void Run() {
            Aspose.Words.Document doc = new Aspose.Words.Document(DocPath + DocName);
            var nodeTypeCollection = new Dictionary<string, int>();
            var mergedFieldCollection = new Dictionary<string, int>();
            var emptyLine = 0;
            //var section = (Section)doc.ChildNodes[0];
            //var body = section.Body;
            var body = doc.FirstSection.Body;
            var c = 0;

            foreach(var node in body.ChildNodes) {
                var nt = node.ToString().Trim();
                if(!nodeTypeCollection.Keys.Contains(nt)) {
                    nodeTypeCollection.Add(nt, 1);
                } else {
                    var i = nodeTypeCollection[nt]+1;
                    nodeTypeCollection[nt] = i;
                }
                if(c++ > 30) break;

                var showNodeType = true;
                var value = string.Empty;
                
                if(node is Paragraph) {
                    var pg = (Paragraph)node;
                    if(pg.Runs != null && pg.Runs.Count > 0) {
                        value = pg.Runs[0].Text.Trim();
                        //var s = ((Section)node).GetAncestor(NodeType.Section);
                        //HightLinePrint(s.GetText());
                    } else {
                        showNodeType = false;
                        emptyLine++;
                    }
                } else if(node is Aspose.Words.Tables.Table) {
                    var table = (Aspose.Words.Tables.Table)node;
                    //foreach(Aspose.Words.Tables.Row row in table.Rows) {
                    //    foreach(Aspose.Words.Tables.Cell cell in row.Cells) {
                    //        sCellValue = cell.Paragraphs[0].Runs[0].Text;
                    //        listWord.Add(sCellValue);
                    //    }
                    //}
                }
                CollectMergeField((Aspose.Words.Node)node, mergedFieldCollection);
                if(showNodeType) {
                    Console.WriteLine(nt.Replace("Aspose.Words.",""));
                    Console.WriteLine("\t\t" + value);
                }

            }
            Console.WriteLine("\n\n");
            Console.WriteLine("Total Empty Line :" + emptyLine);
            Console.WriteLine("Total Node Type :" + nodeTypeCollection.Count);
            var ntc = 1;
            foreach(var key in nodeTypeCollection.Keys){
                Console.WriteLine(ntc++ +" : "+ key + "  ==>  "+ nodeTypeCollection[key]);
            }

            Console.WriteLine("\n\n");
            Console.WriteLine("Total Field Node Type :" + mergedFieldCollection.Count);
            ntc = 1;
            foreach(var key in mergedFieldCollection.Keys) {
                Console.WriteLine(ntc++ + " : " + key + "  ==>  " + mergedFieldCollection[key]);
            }

        }

        /// <summary>
        /// 收集所有输入域
        /// </summary>
        public static void CollectMergeField(Node node, Dictionary<string, int> dic){
            var reg = new Regex(@"«([^\s»]*)»", RegexOptions.Multiline);
            if(node is Paragraph) {
                var pg = (Paragraph)node;
                var txt = pg.GetText();
                var match = reg.Match(txt);
                while(match.Success) {
                    var mergedFieldName = match.Groups[1].Value.ToString();
                    if(!dic.Keys.Contains(mergedFieldName)) {
                        dic.Add(mergedFieldName, 1);
                    } else {
                        dic[mergedFieldName] = dic[mergedFieldName] + 1;
                    }
                    match = match.NextMatch();
                }
            }
        }

        public static void HightLinePrint(object o) {
            Console.WriteLine("########\t\t" + o.ToString());
        }

        /// <summary>
        /// 打印Aspose.Word.NodeType 所有分类
        /// </summary>
        public static void PrintAllAsposeWordNodeType() {
            foreach(var node in Enum.GetValues(typeof(NodeType))) {
                Console.WriteLine(node);
            }
        }
    }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

Aspose.Words使用教程大全(操作Word大全帖子)

http://blog.csdn.net/ibigpig/article/details/8432245
  • zhuyu19911016520
  • zhuyu19911016520
  • 2013年08月13日 16:51
  • 26972

Aspose.Words 操作 Word文件

需要填写文章内容
  • leoppeng
  • leoppeng
  • 2017年11月29日 16:56
  • 32

用Aspose.Words 从Word文档中提取表格数据

用Aspose.Words 从Word文档中提取表格数据 对于某些项目,开发人员需要从Word文档中提取数据并导出到数据库。最大的挑战是必须支持现有Word文档。 相同格式且带多个数据块的...
  • kenkao
  • kenkao
  • 2016年11月07日 10:28
  • 1644

aspose.words 操作word生成试卷

最近做了一个在线组卷的项目。主要功能实现word排版、预览,生成试卷。刚开始涉及到word操作一心想到的就是 office COM组件 来操作word 。大概两周时间就写好整个系统的代码。然后就开始反...
  • fraing
  • fraing
  • 2013年05月29日 16:18
  • 17632

aspose.words 操作word生成试卷

最近做了一个在线组卷的项目。主要功能实现word排版、预览,生成试卷。刚开始涉及到word操作一心想到的就是 office COM组件 来操作word 。大概两周时间就写好整个系统的代码。然后就开始反...
  • dhdhxgx
  • dhdhxgx
  • 2015年05月04日 10:10
  • 2063

c#用aspose.word读取word文件内容,并显示图片

  • 2013年09月22日 15:14
  • 643B
  • 下载

JAVA使用aspose.word 实现html转换word

使用aspose的原因:1.使用简单,功能强大 2.可以自动将html中可以访问的img标签存入word文档中 3.可以轻松实现HTML中的样式转换到word文档中首先使用的jar包是:aspos...
  • ted5612689
  • ted5612689
  • 2015年07月20日 16:15
  • 4564

aspose.words for java 破解包

  • 2014年05月25日 19:50
  • 2.07MB
  • 下载

如何破解aspose.words

声明:本破解教程仅作为技术探讨,由本博客产生的一切侵权行为,与本人无关! 背景:破解的动机是需要将word文档转换成pdf文档,尝试了很多开源的组件(libreoffice,openoffice,p...
  • xiaosanshao9
  • xiaosanshao9
  • 2016年07月15日 11:08
  • 2940

Aspose.word 2016 7月最新版破解办

  • 2016年11月18日 08:38
  • 11.08MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#使用Aspose.Word读取word文档里的文本域
举报原因:
原因补充:

(最多只允许输入30个字)