zoukankan      html  css  js  c++  java
  • C#按模板生成word文档总结

    最近项目做了个按模板生成word功能,总结如下

    1.首先得设计word模板

        一般段落字段用关建字来设置,比如:【项目名称】等。

        对于表格得用书签来设置了。具体操作:插入=》选择书签,给书签命名。

    2.替换模板中的关键字【...】.

       个人感觉用NPOI组件来实现比较容易。具体实现:在项目中用NuGet管理包来添加NPOI for .net。

       实现源码如下:

        string filepath = "word绝对路径";//
        //string filepath = Server.MapPath("word相对路径");
       using (FileStream stream = File.OpenRead(filepath))
       {
              XWPFDocument doc = new XWPFDocument(stream);
              #region 遍历段落经行修改
              var paragraphArray = doc.Paragraphs.Where(it => it.Text.Trim() != "").ToArray();
              for (int j = 0; j < paragraphArray.Count(); j++)
              {
                    var para = doc.Paragraphs.Where(it => it.Text.Trim() != "").ToArray()[j];
                    var text = para.Text;

                    var runs = para.Runs;

                   for (int i = 0; i < runs.Count; i++)
                   {
                        var run = runs[i];
                        text = run.ToString();
                       if (text.Contains("【XXX】"))
                       {
                             //进行文本替换

                             para.ReplaceText("【XXX】", "ABC");

                        }

                    }

                }
         }

    3.word模板中的书签替换为表格

         网上搜了好久没找到解决方案,你们要是有好的方案提供出来,大家一块学习进步。

         替换书签为table,我用微软自带的Microsoft.Office.Interop.Word来实现。

         实现源码如下:

        

    string filepath = Server.MapPath("word相对路径");
    Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
    Microsoft.Office.Interop.Word.Document doc1 = app.Documents.Add(filepath);
    app = doc1.Application;
    doc1.ActiveWindow.Visible = true;
    foreach (Microsoft.Office.Interop.Word.Bookmark bk in doc1.Bookmarks)
    {
    if (bk.Name == "标签名称")
    {
    Microsoft.Office.Interop.Word.Range range = bk.Range;
    range.Tables.Add(range, 3, 2);
    Microsoft.Office.Interop.Word.Table tb = range.Tables[1];
    tb.set_Style("网格型");
    tb.Cell(1, 1).Range.Text = "姓名";
    tb.Cell(1, 2).Range.Text = "成绩";
    tb.Cell(2, 1).Range.Text = "张三";
    tb.Cell(2, 2).Range.Text = "89";
    tb.Cell(3, 1).Range.Text = "李四";
    tb.Cell(3, 2).Range.Text = "98";

    }
    }
    doc1.SaveAs("保存到哪?");
    app.Quit();

    C#中操作Word(8)—— 向Word中插入图表的三种方法(一)

    https://blog.csdn.net/hyman_c/article/details/53156055

    C#中操作Word(9)—— 向Word中插入图表的三种方法(二)

    https://blog.csdn.net/hyman_c/article/details/53156105

    c#操作word图表(一)

    https://blog.csdn.net/handsomexiaominge/article/details/17185005

    微软的Microsoft.Office.Interop.Word  详解:

    1、创建Application对象

    Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();

      我们创建的app对象就代表了整个的Word的进程,我们可以利用app对象进行word的进程的开启和关闭。

    2、获取文档对象

    Document doc = app.Documents.Open("D:\Test.docx");
     Application的Documents属性是一个存放Document对象容器,利于Documents的Open方法可以打开Word文件。打开后,文件中的所有文档都被存放到Documents中,open函数返回当前的ActiveDucument,也就是鼠标所在的文档对象。
    3、
    Range进行读操作和写操作
    可以通过doc对象的Range()方法获取Range对象,如果Range()不传入实参,则表示获取整个Document范围的Range:
        Range range = doc.Range();
            利用Console打印出来就是:
        Console.WriteLine(range.Text.ToString());                                //读的操作
    range = doc.Range(4, 10); range.Text = "新的测试文档"; doc.Save(); //写的操作


    Word的对象模型介绍


            Word中共有5种常用的对象模型:应用程序对象Application、文档对象Document、Selection对象、Range对象和Bookmark对象。
    下图显示了 Word 对象模型层次结构中这些对象的一个视图。


            初看起来,对象似乎重叠在一起。 例如,Document 和 Selection 对象都是 Application 对象的成员,但 Document 对象也是 Selection 对象的成员。 Document 和 Selection 对象都包含 Bookmark 和 Range 对象。 因为有多种方法可以访问相同类型的对象,所以存在重叠。 例如,你将格式设置应用于 Range 对象;但你可能想要访问当前选定内容、某一特定段落,某一节或整个文档的范围。
    下面分别介绍五种模型对象的含义和作用。

    2.1 Applicatin对象。


            Application 对象表示 Word 应用程序,并且是所有其他对象的父级。 其成员通常作为一个整体应用于 Word。 你可以使用其属性和方法来控制 Word 环境。
    在文档级项目中,可以通过使用 ThisDocument 类的 Application 属性来访问 Application 对象。

    2.2 Document对象


            Microsoft.Office.Interop.Word.Document 对象是 Word 编程的中心。 它表示一个文档及其所有内容。 当你打开文档或创建新文档时,将创建新的 Microsoft.Office.Interop.Word.Document 对象,并将其添加到 Application 对象的 T:Microsoft.Office.Interop.Word.Documents 集合。 具有焦点的文档被称为活动文档。 它由 Application 对象的 P:Microsoft.Office.Interop.Word._Application.ActiveDocument 属性表示。

    2.3 Selection对象


            Selection 对象表示当前所选的区域。 在 Word 用户界面中执行操作(如文本加粗)时,可以选择或突出显示文本,然后应用格式设置。 文档中始终存在 Selection 对象。 如果未选中任何内容,则它表示插入点。 此外,选定内容可包含多个不相邻的文本块。

    2.4 Range对象


            Range 对象表示文档中的相邻区域,并由起始字符位置和结束字符位置进行定义。 并不仅限于单个 Range 对象。 你可以在同一文档中定义多个 Range 对象。 Range 对象具有以下特性:
    · 它可以只包含单独的插入点,也可包含一个文本范围或整个文档。
    · 它包括非打印字符,如空格、制表符和段落标记。
    · 它可以是当前选定内容所表示的区域,也可以表示不同于此内容的区域。
    · 它在文档中不可见,这与选定内容不同,后者总是可见。
    · 它不随文档一起保存,且仅在代码运行时才存在。
     · 当在某个范围的末尾插入文本时,Word 会自动扩展该范围以包括插入的文本。

    2.5 Bookmark对象


            Microsoft.Office.Interop.Word.Bookmark 对象表示文档中的相邻区域,同时具有起始位置和结束位置。 你可以使用书签标记文档中的某个位置,也可将其作为文档中文本的容器。 Microsoft.Office.Interop.Word.Bookmark 对象可以包含插入点,也可以与整个文档一样大。Microsoft.Office.Interop.Word.Bookmark 具有下列特征,以将其与 Range 对象区别开来:
    · 你可以在设计时命名书签。
    · Microsoft.Office.Interop.Word.Bookmark 对象随文档一起保存,因此在代码停止运行或文档关闭时不会被删除。
    · 通过将 T:Microsoft.Office.Interop.Word.View 对象的 P:Microsoft.Office.Interop.Word.View.ShowBookmarks 属性设置为 false 或 true,可以隐藏或显示书签。

     可以学习下这个:http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%B1%87/20293.shtml
     
  • 相关阅读:
    databinding在android studio2.3版本后不再默认支持使用
    html的css选择器
    补间动画Tweened Animations
    ButterKnife使用
    JDK环境变量配置
    Android学习总结——DrawerLayout 侧滑栏点击事件穿透
    Android学习总结——输入法将BottomNavigationBar(底部导航栏)顶上去的问题
    Android学习总结——INSTALL_FAILED_CONFLICTING_PROVIDER
    Android学习总结——去除标题栏
    Android学习总结——强制下线功能(广播)
  • 原文地址:https://www.cnblogs.com/skyfeng-826/p/9453687.html
Copyright © 2011-2022 走看看