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 }); } }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM