c#Interop.Word加入两个WordDocument而不保存到磁盘

时间:2014-05-11 20:06:38

标签: c# merge office-interop mailmerge

我已经可以从他们的文件路径中加入两个或多个word文档。

如何在不将它们保存到磁盘的情况下加入它们?

string TemporaryPath = "";
string TemplatePath = "";
Object MissingValue;
object OFalse = false;
object OTrue = true;

public WordWorker()
{
    TemporaryPath = AppDomain.CurrentDomain.BaseDirectory + "Temporary";
    MissingValue = Missing.Value;
    TemplatePath = @"C:\TemplateTest.dotx";
}
public void Merge()
{
    object wdPageBreak = 7;
    object wdStory = 6;


    Application WordApplication = new Application();
    Document WordDocument = WordApplication.Documents.Add(ref MissingValue, ref MissingValue, ref MissingValue, ref MissingValue);

    for (int i = 0; i < 100; i++)
    {
        string Path = CreateWordFromTemplate(WordApplication, TemplatePath, new Dictionary<string, string>() { { "Name", "MyNewValue" + i } });
        WordDocument.Application.Selection.Range.InsertFile(Path, ref MissingValue, ref MissingValue, ref MissingValue, ref OFalse);
    }

    object WordSaveFormat = WdSaveFormat.wdFormatDocument;
    object MergedDocumentPath = TemporaryPath + "Merged.dox";
    WordDocument.SaveAs(ref MergedDocumentPath, ref WordSaveFormat, ref MissingValue, ref MissingValue, ref MissingValue, ref MissingValue, ref MissingValue, ref MissingValue, ref MissingValue, ref MissingValue, ref MissingValue, ref MissingValue, ref MissingValue, ref MissingValue, ref MissingValue, ref MissingValue);
    WordApplication.Application.Quit();
}
public string CreateWordFromTemplate(Application WordApplication, Object oTemplatePath, Dictionary<string, string> dictionary)
{
    Guid DocumentID = Guid.NewGuid();

    Document WordDocument = new Document();

    WordDocument = WordApplication.Documents.Add(ref oTemplatePath, ref MissingValue, ref MissingValue, ref MissingValue);

    foreach (Field FieldToMerge in WordDocument.Fields)
    {
        Range FieldRange = FieldToMerge.Code;
        String FieldText = FieldRange.Text;

        if (FieldText.StartsWith(" MERGEFIELD"))
        {
            Int32 EndMerge = FieldText.IndexOf("\\");
            Int32 FieldNameLength = FieldText.Length - EndMerge;
            String FieldName = FieldText.Substring(11, EndMerge - 11).Trim();

            if (dictionary.ContainsKey(FieldName))
            {
                FieldToMerge.Select();
                WordApplication.Selection.TypeText(dictionary[FieldName]);
            }
        }
    }
    string Path = @"{0}\{1}.doc".SFormat(TemporaryPath, DocumentID);

    WordDocument.SaveAs(Path);
    WordDocument.Close();
    return Path;
}

1 个答案:

答案 0 :(得分:0)

使用其中一个不需要Office COM的库,结果直接与其中的内存或其他内容相关联的二进制数据工作。

https://www.codeplex.com/site/search?tagname=office&projectsearchtext=%22office%22

然后假设,使用MemoryStream,你就可以用你想要的格式创建你想要的文档,然后用你想要的Stream做任何事情。

V /