C# перезаписывает Word шаблон полей слияния

У меня есть некоторый сценарий C#, который открывает документ word, итерирует по полям слияния и заменяет их значения соответствующим образом. Затем скрипт "SavesAs" для создания нового документа Word.

При следующем запуске скрипта произойдет сбой, поскольку MergeFields шаблона документа Word будут перезаписаны.

Сценарий, который я использую, чтобы перебрать поля слияния и затем сохранить их, приведен ниже.

// Create a new Word application
Word._Application wordApplication = new Word.Application();
Word.Document wordDocument = new Word.Document();

try
{

    // REMOVE ON RELEASE ****************************************************************************************************************************************************************************************
    if (System.Diagnostics.Debugger.IsAttached)
        wordDocument = wordApplication.Documents.Open(Environment.CurrentDirectory + @"\Templates\Summary\Summary Sheet.docx");
    else
        wordDocument = wordApplication.Documents.Open(Application.StartupPath + @"\Templates\Summary\Summary Sheet.docx");

    Word.Selection selection = wordApplication.Selection;

    foreach (Word.Field myMergeField in wordDocument.Fields)
    {
        Word.Range rngFieldCode = myMergeField.Code;
        String fieldText = rngFieldCode.Text;
        if (fieldText.StartsWith(" MERGEFIELD"))
        {
            Int32 endMerge = fieldText.IndexOf("\\");
            Int32 fieldNameLength = fieldText.Length - endMerge;
            String fieldName = fieldText.Substring(11, endMerge - 11);
            fieldName = fieldName.Trim();

            #region Merge fields

            // Principal Contractor

            if (fieldName == "strJobName")
            {
                myMergeField.Select();
                if (summary.GetName() == String.Empty || summary.GetName() == null)
                {
                    selection.TypeText(" ");
                }
                else
                {
                    selection.TypeText(summary.GetName());
                }
            }

            #endregion



        }
    }

    StringBuilder strFilepath = new StringBuilder();
    strFilepath.Append(xmlSettings.SelectSingleNode("//rootfolder").InnerText);
    strFilepath.Append("\\" + summary.StrPrincipalDesigner);
    strFilepath.Append("\\" + summary.GetName() + ", " + summary.StrPostcode);

    // Ensure filepath exists
    DirectoryInfo dInfo = Directory.CreateDirectory(strFilepath.ToString() + "\\" + summary.StrReference + " - " + summary.StrBriefDescription);

    // Save the document to it's output file.
    wordDocument.SaveAs(strFilepath.ToString() + "\\" + summary.StrReference + " - Summary Sheet.docx", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}
finally
{
    // Clean up!
    if (wordDocument != null)
    {
        wordDocument.Close();
        wordDocument = null;
    }

    wordApplication.Quit(Type.Missing, Type.Missing, Type.Missing);
    wordApplication = null;
}

0 ответов

Другие вопросы по тегам