zoukankan      html  css  js  c++  java
  • word模板导出的几种方式:第二种:C#通过模板导出Word(文字,表格,图片) 占位符替换

    原文出处:https://www.cnblogs.com/ilefei/p/3508463.html

    一:模板的创建   (注意文件后缀只能是.docx或.doct)

    在需要位置 插入-文档部件-域,

      域名:MacroButton
      宏名:DoFieldClick
      显示文字:这个自己设置,为了与模板其他文字区分,可以用"[]"括起来.
      需要多少替换内容,添加多少域即可.

    二:添加项目                                 

      在解决方案中添加项目WordMLHelper,在原项目中添加对WordMLHelper的引用后可以直接调用.(见头部出处)

    三:调用方法                      

      首先确定模板文件位置和导出文件的生成路径.

            private string mubanFile = "muban.docx";
            private string outputPath = @"test1.docx";
      string templatePath = System.Web.HttpContext.Current.Request.MapPath(mubanFile );
    

      //mvc读取文件路径跟原文出处不一样

     List<TagInfo> tagInfos = wordMLHelper.GetAllTagInfo(System.IO.File.OpenRead(templatePath));//打开模板文件,获取所有填充域
                    for (int i = 0; i < tagInfos.Count; i++)
                    {
                        //填充域有两种类型,1:段落或图片,2:表格
                        //对填充域填充时需先判断填充域类型
                        if (tagInfos[i].Tbl == null)
                        {
                            if (string.Equals(tagInfos[i].TagTips.Trim(), "[NO]"))
                            {
                                TxtInfo txtInfo = new TxtInfo();
                                txtInfo.Content = info.NO;////////NO;--info实体类
                                txtInfo.ForeColor = "000000";
                                txtInfo.Size = 32;
                                txtInfo.HightLight = HighlightColor.None;
                                txtInfo.underlineStyle = UnderlineStyle.Single;
                                tagInfos[i].AddContent(txtInfo);
                            }
    
                        }
                        else
                        {
                            TableStructureInfo tblInfo = tagInfos[i].Tbl;
                            if (tagInfos[i].Seq == 2)//整个表格创建
                            {
                                for (int j = 0; j < 3; j++)
                                {
                                    RowStructureInfo row = new RowStructureInfo();
    
                                    for (int k = 0; k < 3; k++)
                                    {
                                        CellStructureInfo cell = new CellStructureInfo();
                                        TxtInfo txtInfo = new TxtInfo();
                                        txtInfo.Content = "第" + (j + 1) + "行,第" + (k + 1) + "列";
                                        txtInfo.Size = 25;
                                        txtInfo.ForeColor = "0000ff";
                                        cell.AddContentLine(txtInfo);
                                        row.AddCell(cell);
                                    }
                                    tblInfo.AddRow(row);
                                }
                            }
    
                        }
                    }
                    if (!string.IsNullOrEmpty(saveFile))
                    {
                        templatePath = System.Web.HttpContext.Current.Request.MapPath(tempFile);
                        wordMLHelper.GenerateWordDocument(System.IO.File.OpenRead(templatePath)
                            , System.Web.HttpContext.Current.Request.MapPath(saveFile)
                            , tagInfos);
    
                        Assistance.RemoveAllTmpFile();// 删除所有临时文件
                        //Response.Redirect(Request.Url.AbsoluteUri);
                    }
    

      四、导出结果文档如果原来有下滑线,则在引用的项目中添加枚举类(在HighlightColor枚举下添加)

    public enum UnderlineStyle
        {
            Single=0,
            Words,
            Double,
            Thick,
            Dotted,
            DottedHeavy,
            Dash,
            DashedHeavy,
            DashLong,
            DashLongHeavy,
            DotDash,
            DashDotHeavy,
            DotDotDash,
            DashDotDotHeavy,
            Wave,
            WavyHeavy,
            WavyDouble,
            None,
        }
    

      添加下滑线枚举变量(在TxtInfo类中)

       public UnderlineStyle underlineStyle = UnderlineStyle.None;
    

      在WordMLHelper类中的AssembleTxtRun方法中添加判断:

     if (txtInfo.underlineStyle!=UnderlineStyle.None)
                    {
                        Underline underline = new Underline();
                        underline.Val = (UnderlineValues)((int)txtInfo.underlineStyle);
                        rPr.AppendChild(underline);
                    }
                    txtRun.AppendChild(rPr);//在上面插入下滑线的判断
    

      其他内容参照原出处

     对word已有表格更新操作:

    if (tagInfos[i].Seq == 0)
                        {
                            TxtInfo txtInfo;
                            var cell2 = tblInfo.Rows[2].Cells[1];//通过表格索引修改,word文档不需要操作,注意:word中不能含相同名称否则会报索引大小错误
      ,同名可通过修改word中的同名文字然后用代码替换回来 txtInfo = new TxtInfo(); txtInfo.Content = newRow["RecordType1"].ToString();//////// cell121.AddContentLine(new TxtInfo() { Content = "" }); cell121.AddContentLine(new TxtInfo() { Content = "☑ A", Size = 24 }); cell121.AddContentLine(new TxtInfo() { Content = "☐ B", Size = 24 }); cell121.AddContentLine(new TxtInfo() { Content = "☐ C", Size = 24 }); } }

      

  • 相关阅读:
    第十一单元 beego验证
    第九单元 ORM
    第六单元 go操作redis
    第五单元 go操作mysql
    第四单元 参数配置
    springboot使用外置tomcat
    ⚡ 第二.三章顺序表与链表⚡
    c语言程序设计题 译密码
    翁恺 java进阶第一周作业
    Java 构造素数表的两种方法
  • 原文地址:https://www.cnblogs.com/daizhipeng/p/10684467.html
Copyright © 2011-2022 走看看