2016-08-03 1 views
0

〜{fieldToBeReplaced}のようなプレーンテキストの場所マーカーを持つドキュメントがたくさんあり、それをマージフィールドに置きたいのですが。Syncfusion DocIOテキストをマージフィールドに置き換えます

私は、マージフィールドを挿入し、次にテキスト< < MERGEFIELD_NAME >>を挿入する次のコードを持っています。

私が望むのは、単語を挿入 - >マージする場合と同じように、名前が表示されたマージフィールドであることです。

//linqPad Script 
void Main() 
{ 
    Console.WriteLine("::::: Replacing BookMarks ::::: "); 
    //Search And Replace bookmarks 
    try 
    { 
     var replaceDir = new DirectoryInfo(saveFileLocation); 
     var bookmarkFiles = replaceDir.GetFiles().ToList(); 
     foreach (var bkmFile in bookmarkFiles) 
     { 
      if (SearchReplaceBookmarks(bkmFile.FullName)) 
      { 
       Console.WriteLine("Bookmarks Replace:" + bkmFile.Name + " ::: "); 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("ERROR: ::: " + ex.Message); 
    } 
} 
static string startDir = Path.GetDirectoryName(Util.CurrentQueryPath); 
string saveFileLocation = startDir + @"\Converted\"; 
    private List<fieldReplace> fieldList = new List<fieldReplace>() { 
    //new fieldReplace("",""), 
    new fieldReplace("~{U-nm}","_Doctor"), 
    new fieldReplace("~{P-nl}","_Patient_Surname","Patient_Firstname"), 
    new fieldReplace("~{DOBN}","_Patient_DOB"), 
    new fieldReplace("~{U-ph","_Doctor_PhoneWork"),//Surgeon Business 
    new fieldReplace("~{U-pm}","_Doctor_PhoneMobile")//Surgeon After Hours 
} 
// Define other methods and classes here 
private bool SearchReplaceBookmarks(string filename) 
{ 
    try 
    { 
     WordDocument wordDocument = new WordDocument(filename); 
     //Adds one section and one paragraph to the document 
     foreach (var fld in fieldList) 
     { 
      var replaceBookmark = wordDocument.Find(fld.TextToReplace, false, true); 
      //if the bookmark is in the list then 
      while (replaceBookmark != null) 
      { 
       //Find and replace text with merge field. 
       var paragraph = new WParagraph(wordDocument); 
       for (int i =0 ; i<= fld.FieldNames.Length-1;i++){ 
        var field = paragraph.AppendField(fld.FieldNames[i], FieldType.FieldMergeField); 
        field.FieldType = FieldType.FieldMergeField; 
        if (i < fld.FieldNames.Length - 1) { paragraph.AppendText(", ");} 
       } 
       var selection = new TextSelection(paragraph, 0, paragraph.Text.Length); 
      wordDocument.Replace(fld.TextToReplace, selection, true, true); //This is where the Merge Field is meant to be inserted 
       replaceBookmark = wordDocument.FindNext(paragraph, fld.TextToReplace, false, true); 
      } 
     } 
     //Debug.Write(wordDocument.MailMerge.MappedFields); 
     wordDocument.Save(filename, FormatType.Docx); 
     wordDocument.Close(); 
     return true; 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("ERROR:" + filename + " ::: " + ex.Message); 
     return false; 
    } 
} 
private class fieldReplace 
{ 
    public fieldReplace(string oldText, params string[] newNewFieldName) 
    { 
     this.TextToReplace = oldText; 
     this.FieldNames = newNewFieldName; 
    } 
    public string TextToReplace { get; set; } 
    public string[] FieldNames { get; set; } 
} 

答えて

2
ご述べたシナリオに分析することで

、 1)Word文書からプレースホルダのテキストを検索します。 2)プレースホルダーのテキストをマージフィールドと置き換えるフィールドをMS Wordドキュメントで置き換える。

はい、DocIOを使用すると、プレースホルダーのテキストをMS Wordと同等のマージフィールドに置き換えることができます。要件を満たすためにコードを変更しました。 Replace()メソッドのTextBodyPartオーバーロードを使用しました。下記のコードスニペットをご覧ください。

修正コードスニペット TextBodyPart bodyPart = new TextBodyPart(wordDocument); bodyPart.BodyItems.Add(段落); wordDocument.Replace(fld.TextToReplace、bodyPart、true、true);

詳細については、サポートチーム([email protected])までお問い合わせください。

関連する問題