Tôi có khoảng 10 tài liệu từ mà tôi tạo bằng cách sử dụng xml mở và các nội dung khác. Bây giờ tôi muốn tạo một tài liệu từ khác và từng tài liệu một, tôi muốn kết hợp chúng vào tài liệu mới được tạo này. Tôi muốn sử dụng xml mở, bất kỳ gợi ý nào cũng sẽ được đánh giá cao. Dưới đây là mã của tôi:Hợp nhất nhiều tài liệu từ thành một Mở Xml
private void CreateSampleWordDocument()
{
//string sourceFile = Path.Combine("D:\\GeneralLetter.dot");
//string destinationFile = Path.Combine("D:\\New.doc");
string sourceFile = Path.Combine("D:\\GeneralWelcomeLetter.docx");
string destinationFile = Path.Combine("D:\\New.docx");
try
{
// Create a copy of the template file and open the copy
//File.Copy(sourceFile, destinationFile, true);
using (WordprocessingDocument document = WordprocessingDocument.Open(destinationFile, true))
{
// Change the document type to Document
document.ChangeDocumentType(DocumentFormat.OpenXml.WordprocessingDocumentType.Document);
//Get the Main Part of the document
MainDocumentPart mainPart = document.MainDocumentPart;
mainPart.Document.Save();
}
}
catch
{
}
}
Cập nhật (sử dụng AltChunks):
using (WordprocessingDocument myDoc = WordprocessingDocument.Open("D:\\Test.docx", true))
{
string altChunkId = "AltChunkId" + DateTime.Now.Ticks.ToString().Substring(0, 2) ;
MainDocumentPart mainPart = myDoc.MainDocumentPart;
AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart(
AlternativeFormatImportPartType.WordprocessingML, altChunkId);
using (FileStream fileStream = File.Open("D:\\Test1.docx", FileMode.Open))
chunk.FeedData(fileStream);
AltChunk altChunk = new AltChunk();
altChunk.Id = altChunkId;
mainPart.Document
.Body
.InsertAfter(altChunk, mainPart.Document.Body.Elements<Paragraph>().Last());
mainPart.Document.Save();
}
Tại sao mã này ghi đè nội dung của các tập tin cuối cùng khi tôi sử dụng nhiều file? Cập nhật 2:
using (WordprocessingDocument myDoc = WordprocessingDocument.Open("D:\\Test.docx", true))
{
MainDocumentPart mainPart = myDoc.MainDocumentPart;
string altChunkId = "AltChunkId" + DateTime.Now.Ticks.ToString().Substring(0, 3);
AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.WordprocessingML, altChunkId);
using (FileStream fileStream = File.Open("d:\\Test1.docx", FileMode.Open))
{
chunk.FeedData(fileStream);
AltChunk altChunk = new AltChunk();
altChunk.Id = altChunkId;
mainPart.Document
.Body
.InsertAfter(altChunk, mainPart.Document.Body
.Elements<Paragraph>().Last());
mainPart.Document.Save();
}
using (FileStream fileStream = File.Open("d:\\Test2.docx", FileMode.Open))
{
chunk.FeedData(fileStream);
AltChunk altChunk = new AltChunk();
altChunk.Id = altChunkId;
mainPart.Document
.Body
.InsertAfter(altChunk, mainPart.Document.Body
.Elements<Paragraph>().Last());
}
using (FileStream fileStream = File.Open("d:\\Test3.docx", FileMode.Open))
{
chunk.FeedData(fileStream);
AltChunk altChunk = new AltChunk();
altChunk.Id = altChunkId;
mainPart.Document
.Body
.InsertAfter(altChunk, mainPart.Document.Body
.Elements<Paragraph>().Last());
}
}
Mã này được gắn thêm các dữ liệu Test2 hai lần, ở vị trí của dữ liệu Test1 là tốt. Phương tôi nhận được:
Test
Test2
Test2
thay vì:
Test
Test1
Test2
Giống như chirs chỉ ra , bạn đang sử dụng cùng một Id cho tất cả các AltChunk's. Chúng phải là duy nhất. – Flowerking
Ok, đã xong, Cảm ơn bạn đã kiên nhẫn với tôi. –
Tôi rất vui khi thấy rằng cuối cùng bạn đã giải quyết được vấn đề của mình :) Đúng vậy, nó liên quan đến Altchunkid. Tôi đã chỉnh sửa câu trả lời của tôi vì nó có thể không rõ ràng lắm. – Chris