1

我正在尝试删除 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();
    }
}

但是执行后,以下是我得到的: 在此处输入图像描述

很明显,图像丢失了,即使我只删除了必要的行,不相关行中的图像也似乎已损坏/删除。有人可以解释为什么会发生这种情况以及如何解决这个问题吗?

4

0 回答 0