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