基于C# 语言直接读取大量word文档的技术探讨

发表时间:2020/7/2   来源:《基层建设》2020年第7期   作者:杨永
[导读] 摘要:本文讨论了如何对大量结构相似的word文件进行同时读写,并提取其中的关键信息,写入另一批word或excel文档的常用方法。
        广东电网有限责任公司茂名供电局  广东茂名
        摘要:本文讨论了如何对大量结构相似的word文件进行同时读写,并提取其中的关键信息,写入另一批word或excel文档的常用方法。详细探讨了如何使用com 组件来对word文档进行批量读写,极大地提升了工作效率。
        关键词:C#;文件读取;MSExcel
        1 引言
        在项目管理当中,项目的基本信息需要大量的重复用到,如在项目的中期检查、验收、结算、奖励申报材料中,均需要从项目的计划任务书中提取项目的基本信息。在编制项目材料时,均通过手工复制粘贴实现,效率十分低下。解决这个问题的最好办法,是通过编程语言,针对某种固定格式的材料模板,编制一套批量读取的程序,然后将提取到的信息,写入需要编制的材料当中,以实现工作效率的明显提升。
        2 编程工具与语言
        Visual Studio .NET(VS) 是一套完整的开发工具,用于ASP Web 应用程序、XML Web services、GUI 程序和移动应用程序的架构。VS作为集成开发环境 (IDE)可以兼容Visual Basic .NET、Visual C++ .NET、Visual C# .NET 和 Visual J# .NET,能够创建拥有混合语言的解决方案。具有以下特点:调试简单,可以自动编译执行源代码,并监视程序的状态;文本编辑器可与所支持的语言相配合,智能化开展错误检测;创建部署安装项目极其方便,在输入代码时给出相应的推荐代码,非常人性化。.NET Framework框架对 ASP Web 应用程序开发和 XML Web服务开发的关键技术进行了大量的简化。
        C#是微软公司发布的一种面向对象的高级程序设计语言。它运行在.NET Framework之上,是微软公司研究员Anders Hejlsberg的最新成果。C#在表面上看来与SUN公司发布的Java有着很大的相似之处:比如单一继承、存在接口、语法与Java几乎相同、先编译成中间代码然后再运行的过程[1]。但是C#与Java又有着明显的不同点,它是与组件对象模型(COM)直接集成的,这就决定了它有能力成为微软公司.NET网络框架的主力军。
        3 项目架构
        计算机体系结构的发展共经历了三个时期:终端/主机结构、客户机/服务器结构以及浏览器/服务器结构[2]。客户机/服务器模式也称为C/S(Client/Server)模式,由客户端应用程序(Client)与服务器应用程序(Server)构成。客户端负责与服务器进行通信、也负责与用户进行交互;服务器端则是信息的处理中枢,其任务是响应和执行客户端的服务请求。在以往的应用系统开发中,C/S模式结构得到了广泛的应用。在C/S模式下,用户所运行的程序都在本地执行,应用程序的逻辑在客户端与服务器端都有。客户端首先发出数据访问请求,服务器接受请求后,将结果返回给客户端。C/S模式的优点是交互性强,执行的速度异常快。
        4 系统实现的关键技术
        4.1 选择文件目录,设置项目基本信息字段。将同模版的同一类型文件全部放入同一目录,批量进行文件选择。
        string docmodelpath = Application.StartupPath + "\\项目文件资料模板";
        Word.Application cls = null;
        Word.Document doc = null;
        Word.Table table = null;
        object missing = System.Reflection.Missing.Value;
        object oReadOnly = false;
        //获取文件夹下所有的文件
        string[] dir_files = Directory.GetFiles(textBox1.Text);
        DeleteDir(Application.StartupPath + "\\项目文件资料");
        int xmhzb_js = 0;
        string[,] xmzcy = new string[20, 5];  //项目组成员信息
        string[] xmjffxys = new string[10];   //项目经费分项预算
        string[,] xmlb = new string[20, 5];  //项目类别信息
        string xmsszy = "";  //项目所属专业信息
        string[,] xmyqxg = new string[20, 5];  //项目预期效果信息
        4.2 依次读取word文档,存储在已设置的字段中备用。


        doc = cls.Documents.Open(ref path, ref missing, ref oReadOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
        //模板当中的第一个表格
        table = doc.Tables[1];
        //项目名称
        xmmc = table.Cell(1, 2).Range.Text.ToString().Replace("\r\a", "");
        //项目责任人
        xmfzr = table.Cell(3, 3).Range.Text.ToString().Replace("\r\a", "");
        //项目责任人性别
        xmfzrxb = table.Cell(3, 5).Range.Text.ToString().Replace("\r\a", "");
        //项目责任人年龄
        xmfzrnl = table.Cell(3, 7).Range.Text.ToString().Replace("\r\a", "");
        //项目责任人专业
        xmfzrzy = table.Cell(4, 3).Range.Text.ToString().Replace("\r\a", "");
        //项目责任人职称
        xmfzrzc = table.Cell(4, 5).Range.Text.ToString().Replace("\r\a", "");
        //项目责任人电话
        xmfzrdh = table.Cell(4, 7).Range.Text.ToString().Replace("\r\a", "");
        //项目起止时间
        xmyysj = table.Cell(16, 2).Range.Text.ToString().Replace("\r\a", "");
        //项目总经费
        xmzjf = table.Cell(16, 4).Range.Text.ToString().Replace("\r\a", "");
        //项目内容
        xmnr = table.Cell(17, 2).Range.Text.ToString();
        4.3 创建文件目录,
        //创建目录
        dir_xmmc = Application.StartupPath + "\\项目文件资料\\" + xmmc;
        Directory.CreateDirectory(dir_xmmc);
        dir_xmlx = dir_xmmc + "/1、立项";
        Directory.CreateDirectory(dir_xmlx);
        dir_xmcg = dir_xmmc + "/2、采购";
        Directory.CreateDirectory(dir_xmcg);
        dir_xmss = dir_xmmc + "/3、实施";
        Directory.CreateDirectory(dir_xmss);
        dir_xmtz = dir_xmmc + "/4、调整";
        Directory.CreateDirectory(dir_xmtz);
        dir_xmfx = dir_xmmc + "/5、风险";
        Directory.CreateDirectory(dir_xmfx);
        dir_xmys = dir_xmmc + "/6、验收";
        Directory.CreateDirectory(dir_xmys);
        //立项文件夹中放入申请书,注意文件扩展名
        object filename = dir_xmlx + "\\" + xmmc + "." + file_ext;
        doc.SaveAs(ref filename, 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);
        filename = dir_xmys + "\\1、项目申请书(" + xmmc + ")." + file_ext;
        doc.SaveAs(ref filename, 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);
        4.4 将文档内容写入到相关材料中。
        //处理验收下的项目验收申请表
        path = docmodelpath + "\\6、验收\\2、项目验收申请表.docx";
        doc = cls.Documents.Open(ref path, ref missing, ref oReadOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
        //第一个表格
        table = doc.Tables[1];
        //修改项目名称
        //  string aa = table.Cell(2, 2).Range.Text.ToString();
        table.Cell(4, 2).Range.Text = xmkssj[0] + "." + xmkssj[1] + "-" + xmjssj[0] + "." + xmjssj[1];
        table.Cell(4, 4).Range.Text = xmzjf + "万";
        //  table.Cell(5, 2).Range.Text = table.Cell(5, 2).Range.Text.Replace("[项目名称]", xmmc);
        doc.Content.Find.Text = "[项目名称]";
        //要查找的文本
        object FindText = "[项目名称]";
        //替换文本
        object ReplaceWith = xmmc;
        5 总结
        本文简要介绍了使用C#语言批量读取word文档的方法,实现了相同模版文档的批量生成与修改功能。
        参考文献
        [1]Watson K, Nagel C. C#入门经典. 清华大学出版社, 2008
        [2]周亚娟. 基于. NET框架的WEB综合查询系统的开发:硕士学位论文. 保定:华北电力大学,2005
投稿 打印文章 转寄朋友 留言编辑 收藏文章
  期刊推荐
1/1
转寄给朋友
朋友的昵称:
朋友的邮件地址:
您的昵称:
您的邮件地址:
邮件主题:
推荐理由:

写信给编辑
标题:
内容:
您的昵称:
您的邮件地址: