闲适人生 發表於 2021-9-22 09:05:00

C#导出数据—使用Word模板

<p style="width: 100%; background: rgba(65, 105, 225, 1); color: rgba(255, 255, 255, 1); height: 50px; font-size: 30px; line-height: 50px">前言</p>
<p class="md-end-block md-p"><span class="md-plain">本文主要介绍C#使用标签替换的方法导出数据,导出的数据模板使用Word文档。</span></p>
<p style="width: 100%; background: rgba(65, 105, 225, 1); color: rgba(255, 255, 255, 1); height: 50px; font-size: 30px; line-height: 50px">模板建立</p>
<p class="md-end-block md-p"><span class="md-plain">首先创建一个Word文档,然后建立一个基础模板。然后将上方菜单切换到插入菜单。</span></p>
<p class="md-end-block md-p"><span class="md-plain">然后在想填充数据的地方添加书签,如下图,光标在年的前方,点击上方的书签按钮。</span></p>
<p class="md-end-block md-p"><img src="https://img2020.cnblogs.com/blog/243596/202109/243596-20210918164828808-516744489.png" alt="" loading="lazy"></p>
<p class="md-end-block md-p"><span class="md-plain">书签全部添加完如下图所示:</span></p>
<p class="md-end-block md-p"><img src="https://img2020.cnblogs.com/blog/243596/202109/243596-20210918164854466-1703420805.png" alt="" loading="lazy"></p>
<p class="md-end-block md-p"><span class="md-plain">书签默认是看不到的,我们可以打开文件下的选项页面,然后在视图里勾选书签选项,让书签显示出来,如下图:</span></p>
<p class="md-end-block md-p"><img src="https://img2020.cnblogs.com/blog/243596/202109/243596-20210918164926862-358229054.png" alt="" loading="lazy"></p>
<p class="md-end-block md-p"><span class="md-plain">勾选后,书签位置会有一个竖线显示,结果如下图所示:</span></p>
<p class="md-end-block md-p"><img src="https://img2020.cnblogs.com/blog/243596/202109/243596-20210918164945991-1197442722.png" alt="" loading="lazy"></p>
<p style="width: 100%; background: rgba(65, 105, 225, 1); color: rgba(255, 255, 255, 1); height: 50px; font-size: 30px; line-height: 50px">代码实现</p>
<p class="md-end-block md-p"><span class="md-plain">新建一个项目WordExport。</span></p>
<p class="md-end-block md-p"><span class="md-plain">然后Nuget添加引用Microsoft.Office.Interop.Word。</span></p>
<p class="md-end-block md-p"><img src="https://img2020.cnblogs.com/blog/243596/202109/243596-20210918165002521-277228322.png" alt="" loading="lazy"></p>
<p class="md-end-block md-p"><span class="md-plain">然后在页面里添加一个按钮,然后在点击事件里实现如下代码:</span></p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">private void Button_Click(object sender, RoutedEventArgs e)
{
    try
    {
      string wordTemplatePath = System.Windows.Forms.Application.StartupPath + @"\Word模板.docx";
      if (File.Exists(wordTemplatePath))
      {
            System.Windows.Forms.FolderBrowserDialog dirDialog = new System.Windows.Forms.FolderBrowserDialog();
            dirDialog.ShowDialog();
            if (dirDialog.SelectedPath != string.Empty)
            {
                string newFileName = dirDialog.SelectedPath + @"\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".docx";
               
                Dictionary&lt;string, string&gt; wordLableList = new Dictionary&lt;string, string&gt;();
                wordLableList.Add("年", "2021");
                wordLableList.Add("月", "9");
                wordLableList.Add("日", "18");
                wordLableList.Add("星期", "六");
                wordLableList.Add("标题", "Word导出数据");
                wordLableList.Add("内容", "我是内容——Kiba518");

                Export(wordTemplatePath, newFileName, wordLableList);
                MessageBox.Show("导出成功!");
            }
            else
            {
                MessageBox.Show("请选择导出位置");
            }
      }
      else
      {
            MessageBox.Show("Word模板文件不存在!");
      }
    }
    catch (Exception Ex)
    {
      MessageBox.Show(Ex.ToString());
      return;
    }
}
public static void Export(string wordTemplatePath, string newFileName, Dictionary&lt;string, string&gt; wordLableList)
{
    Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
    string TemplateFile = wordTemplatePath;
    File.Copy(TemplateFile, newFileName);
    _Document doc = new Document();
    object obj_NewFileName = newFileName;
    object obj_Visible = false;
    object obj_ReadOnly = false;
    object obj_missing = System.Reflection.Missing.Value;
   
    doc = app.Documents.Open(ref obj_NewFileName, ref obj_missing, ref obj_ReadOnly, ref obj_missing,
      ref obj_missing, ref obj_missing, ref obj_missing, ref obj_missing,
      ref obj_missing, ref obj_missing, ref obj_missing, ref obj_Visible,
      ref obj_missing, ref obj_missing, ref obj_missing,
      ref obj_missing);
    doc.Activate();

    if (wordLableList.Count &gt; 0)
    {
      object what = WdGoToItem.wdGoToBookmark;
      foreach (var item in wordLableList)
      {
            object lableName = item.Key;
            if (doc.Bookmarks.Exists(item.Key))
            {
                doc.ActiveWindow.Selection.GoTo(ref what, ref obj_missing, ref obj_missing, ref lableName);//光标移动书签的位置
                doc.ActiveWindow.Selection.TypeText(item.Value);//在书签处插入的内容
                doc.ActiveWindow.Selection.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft;//设置插入内容的Alignment
            }
      }
    }

    object obj_IsSave = true;
    doc.Close(ref obj_IsSave, ref obj_missing, ref obj_missing);

}</pre>
</div>
<p class="md-end-block md-p"><span class="md-plain">代码里我们模拟了一个标签要替换的内容字典,然后调用Microsoft.Office.Interop.Word命名空间下的类,实现对Word模板的书签的替换。</span></p>
<p class="md-end-block md-p"><span class="md-plain">运行项目,如下图:</span></p>
<p class="md-end-block md-p md-focus"><img src="https://img2020.cnblogs.com/blog/243596/202109/243596-20210918165041707-1748441364.png" alt="" loading="lazy"></p>
<p class="md-end-block md-p"><span class="md-plain">点击导出按钮,导出Word文档如下:</span></p>
<p class="md-end-block md-p">&nbsp;<img src="https://img2020.cnblogs.com/blog/243596/202109/243596-20210918165055393-435027717.png" alt="" loading="lazy"></p>
<p>----------------------------------------------------------------------------------------------------</p>
<p class="md-end-block md-p">到此,C#导出数据—使用Word模板就已经介绍完了。</p>
<p>代码已经传到Github上了,欢迎大家下载。</p>
<p style="border: 2px solid rgba(115, 191, 0, 1); padding: 10px 40px; background: rgba(204, 255, 128, 1); border-radius: 15px; -moz-border-radius: 15px">Github地址:&nbsp;https://github.com/kiba518/WordExport</p>
<p>----------------------------------------------------------------------------------------------------</p>
<p>注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!<br>若您觉得这篇文章还不错,请点击下方的<span style="color: rgba(255, 0, 0, 1)">【<strong>推荐】</strong></span>,非常感谢!</p>
<p>https://www.cnblogs.com/kiba/p/15309344.html</p>
<p>&nbsp;<img src="https://img2018.cnblogs.com/blog/243596/201909/243596-20190904083750507-629449790.png" alt=""></p>
<p>&nbsp;</p>

</div>
<div id="MySignature" role="contentinfo">
    https://www.cnblogs.com/kiba/<br><br>
来源:https://www.cnblogs.com/kiba/p/15309344.html
頁: [1]
查看完整版本: C#导出数据—使用Word模板