前言

本文主要介绍C#使用标签替换的方法导出数据,导出的数据模板使用Word文档。

模板建立

首先创建一个Word文档,然后建立一个基础模板。然后将上方菜单切换到插入菜单。

然后在想填充数据的地方添加书签,如下图,光标在年的前方,点击上方的书签按钮。

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

书签全部添加完如下图所示:

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

书签默认是看不到的,我们可以打开文件下的选项页面,然后在视图里勾选书签选项,让书签显示出来,如下图:

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

勾选后,书签位置会有一个竖线显示,结果如下图所示:

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

代码实现

新建一个项目WordExport。

然后Nuget添加引用Microsoft.Office.Interop.Word。

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

然后在页面里添加一个按钮,然后在点击事件里实现如下代码:

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<string, string> wordLableList = new Dictionary<string, string>();
                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<string, string> 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 > 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);
​
}
09-22 13:22