У меня есть full.docx, который включает в себя два математических вопроса: docx включает в себя несколько картинок и уравнение MathType (oleobject), я разделил do c в соответствии с this , получил два файла (первый. docx, second.docx), first.docx работает нормально, однако, second.docx выдает диалоговое окно с предупреждением, когда я пытаюсь его открыть:
"Word found unreadable content in second.docx. Do you want to recover the contents of this document? If you trust the source of this document, click Yes."
После нажатия «Да», do c можно открыть, содержание тоже правильно, я хочу знать, что не так с second.docx? Я проверил это с помощью «инструмента повышения производительности Open xml sdk 2.5», но не нашел причины. Очень ценю за любую помощь. Спасибо.
Три файла были загружены в здесь .
Показать некоторый код:
byte[] templateBytes = System.IO.File.ReadAllBytes(TEMPLATE_YANG_FILE);
using (MemoryStream templateStream = new MemoryStream())
{
templateStream.Write(templateBytes, 0, (int)templateBytes.Length);
string guidStr = Guid.NewGuid().ToString();
using (WordprocessingDocument document = WordprocessingDocument.Open(templateStream, true))
{
document.ChangeDocumentType(DocumentFormat.OpenXml.WordprocessingDocumentType.Document);
MainDocumentPart mainPart = document.MainDocumentPart;
mainPart.Document = new Document();
Body bd = new Body();
foreach (DocumentFormat.OpenXml.Wordprocessing.Paragraph clonedParagrph in lst)
{
bd.AppendChild<DocumentFormat.OpenXml.Wordprocessing.Paragraph>(clonedParagrph);
clonedParagrph.Descendants<Blip>().ToList().ForEach(blip =>
{
var newRelation = document.CopyImage(blip.Embed, this.wordDocument);
blip.Embed = newRelation;
});
clonedParagrph.Descendants<DocumentFormat.OpenXml.Vml.ImageData>().ToList().ForEach(imageData =>
{
var newRelation = document.CopyImage(imageData.RelationshipId, this.wordDocument);
imageData.RelationshipId = newRelation;
});
}
mainPart.Document.Body = bd;
mainPart.Document.Save();
}
string subDocFile = System.IO.Path.Combine(this.outDir, guidStr + ".docx");
this.subWordFileLst.Add(subDocFile);
File.WriteAllBytes(subDocFile, templateStream.ToArray());
}
lst содержит пункт, клонированный из оригинального документа используя:
(DocumentFormat.OpenXml.Wordprocessing.Paragraph)p.Clone();