편지 병합 여기에, VSTO에서 매우 간단 here
이 코드 블록은 문서의 모든 필드를 검색합니다 나는 다른 모든 예를 발견
//Pass in the path of external file
document.MailMerge.OpenDataSource(Name: vm.FilePath.FullName);
document.MailMerge.Destination = WdMailMergeDestination.wdSendToNewDocument;
을 할 것 두 가지 마법 라인입니다
public static List<string> GetFieldsUsedInDocument(Document document)
{
var fields = new List<string>();
foreach (MailMergeField fld in document.MailMerge.Fields)
{
if (fld.Code != null)
{
fields.Add(fld.Code.Text.ToUpper());
}
}
return fields;
}
위에 반환 된 필드 목록에서 MergeField 이름을 가져 오려면 GetFieldsUsedInDocument
public static List<string> GetMergeFields(List<string> allFields)
{
var merges = new List<string>();
foreach (var field in allFields)
{
var isNestedField = false;
foreach (var fieldChar in field)
{
int charCode = fieldChar;
if (charCode == 19 || charCode == 21)
{
isNestedField = true;
break;
}
}
if (!isNestedField)
{
var fieldCode = field;
if (fieldCode.Contains("MERGEFIELD"))
{
var fieldName = fieldCode.Replace("MERGEFIELD", string.Empty).Replace('"', ' ').Trim();
var charsToGet = fieldName.IndexOf(" ");
if (charsToGet < 0)
charsToGet = fieldName.IndexOf(@"\");
charsToGet = charsToGet > 0 ? charsToGet : fieldName.Length;
fieldName = fieldName.Substring(0, charsToGet);
if (!merges.Contains(fieldName))
{
merges.Add(fieldName);
}
}
}
}
return merges;
}
이 여전히 내 질문에 대답하지 않습니다 ... 병합 필드에서 값을 검색 할 필요가 실제로 데이터 원본으로 필드를 병합 할 필요가 없습니다. – JRO
대답을 mergefield 이름을 얻으려면 – Kiru
" allFields"를 채우는 방법을 게시 할 수도 있습니까? –
JRO