我目前有一个窗口形式,当按下按钮时,会将3个单独的单词docx合并为一个合并文件。
private void button1_Click(object sender, EventArgs e)
{
string document1 = @"C:\Test\Test1.docx";
string document2 = @"C:\Test\Test2.docx";
string document3 = @"C:\Test\Test3.docx";
string[] documentsToMerge = { document1, document2, document3 };
string outputFileName = String.Format(@"C:\Test\Merge\Combined.docx", Guid.NewGuid());
MsWord.Merge(documentsToMerge, outputFileName, true);}
但是,我想选择包含文件夹(" C:\ Test")而不是每个单独的文件。这将允许我组合更多的文件,而无需单独将它们编码到程序中,这将使它在使用时更加实用。
是否有任何建议如何实现?
public static void Merge(string[] filesToMerge, string outputFilename, bool insertPageBreaks, string documentTemplate)
{
object defaultTemplate = documentTemplate;
object missing = System.Type.Missing;
object pageBreak = Word.WdBreakType.wdSectionBreakNextPage;
object outputFile = outputFilename;
// Create a new Word application
Word._Application wordApplication = new Word.Application();
try
{
// Create a new file based on our template
Word.Document wordDocument = wordApplication.Documents.Add(
ref missing
, ref missing
, ref missing
, ref missing);
// Make a Word selection object.
Word.Selection selection = wordApplication.Selection;
//Count the number of documents to insert;
int documentCount = filesToMerge.Length;
//A counter that signals that we shoudn't insert a page break at the end of document.
int breakStop = 0;
// Loop thru each of the Word documents
foreach (string file in filesToMerge)
{
breakStop++;
// Insert the files to our template
selection.InsertFile(
file
, ref missing
, ref missing
, ref missing
, ref missing);
//Do we want page breaks added after each documents?
if (insertPageBreaks && breakStop != documentCount)
{
selection.InsertBreak(ref pageBreak);
}
}
// Save the document to it's output file.
wordDocument.SaveAs(
ref outputFile
, ref missing
, ref missing
, ref missing
, ref missing
, ref missing
, ref missing
, ref missing
, ref missing
, ref missing
, ref missing
, ref missing
, ref missing
, ref missing
, ref missing
, ref missing);
// Clean up!
wordDocument = null;
}
catch (Exception ex)
{
//I didn't include a default error handler so i'm just throwing the error
throw ex;
}
finally
{
// Finally, Close our Word application
wordApplication.Quit(ref missing, ref missing, ref missing);
}
}
}
这是代码第一部分中引用的MsWord.merge。我试图使用' lnkResult.NavigateUrl ='但是我没有成功。
答案 0 :(得分:1)
使用getFiles
方法
string[] filePaths = Directory.GetFiles(@"c:\Test\");
string[] documentsToMerge = filePaths;
string outputFileName = (@"C:\Test\Merge\Combined.docx");
MsWord.Merge(documentsToMerge, outputFileName, true);
谢谢你的帮助。
答案 1 :(得分:1)
由于GetFiles()
将为您提供所有文件,因此第二次重载更适合。
要获取所有字文档(*.doc
& *.docx
),请致电:
//Add *.doc
string[] allWordDocuments = Directory.GetFiles("YourDirectory", "*.doc", SearchOptions.AllDirectorys); //Or if you want only SearchOptions.TopDirectoryOnly
正如 NineBerry 在评论中所说,这也包括*.docx
!!!
这将为您提供所有其他文件类型*.doc & *.docx
和忽略。
这样可以避免错误,因为如果您移交GetFiles("directoryName")
MsWord.Merge()
将获取*.exe
中可能导致错误的所有文件
所以一个简单的方法是:
string outputPath = @"C:\Test\Merge\Combined.docx";
MsWord.Merge(allWordDocuments, outputPath, true);