我正在尝试删除 MS Word 文档的表格中的一些行。下面是表格在处理之前的样子:
我分析了这张表以了解开放的 XML 表示,下面是InnerText
属性的制定方式:
项目 | 描述 | null |
---|---|---|
课堂 | empty |
互动课堂... |
empty |
empty |
案例研究教室... |
empty |
empty |
礼堂讲座教室... |
电脑 | empty |
大型计算机... |
empty |
empty |
超级计算机... |
empty |
empty |
工作站电脑... |
中间empty
列是插入图像的位置。图像和描述位于两个不同的单元格中,它们之间有一个不可见的边界。
下面是删除项目“案例研究教室”、“超级计算机”、“工作站计算机”、“个人计算机”和“平板电脑”的代码。
var itemsToBeExcluded = new List<string>{"Case Study Classrooms", "Supercomputer", "Workstation Computer","Personal Computer","Tablet"};
using (MemoryStream stream = new MemoryStream())
{
//pageData is a byte[] to represent the word file
stream.Write(pageData, 0, (int)pageData.Length);
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(stream, true))
{
var table = wordDoc.MainDocumentPart.Document.Body.OfType<Table>().FirstOrDefault();
int rowCount = 0;
string firstColumnInnerXml = string.Empty;
for (int t = 0; t<table.ChildElements.Count; t++)
{
if(table.ChildElements[t] is TableRow)
{
// Skip the header
if (rowCount++ != 0)
{
// Gets the inner xml of first column of the table and set if it is null for the subsequent rows
if (table.ChildElements[t].ChildElements[1].InnerText.Length > 0)
{
firstColumnInnerXml = table.ChildElements[t].ChildElements[1].InnerXml;
}
else
{
table.ChildElements[t].ChildElements[1].InnerXml = firstColumnInnerXml;
}
foreach (var removableItem in itemsToBeExcluded)
{
if (table.ChildElements[t].ChildElements[3].InnerText.ToLower().StartsWith(removableItem.ToLower()))
{
table.ChildElements[t].Remove();
t--;
goto OUTERCONTINUE;
}
}
OUTERCONTINUE:;
}
}
}
wordDoc.MainDocumentPart.Document.Save();
wordDoc.Close();
}
}
很明显,图像丢失了,即使我只删除了必要的行,不相关行中的图像也似乎已损坏/删除。有人可以解释为什么会发生这种情况以及如何解决这个问题吗?