Word OpenXML删除表内的填充

时间:2015-09-30 11:06:51

标签: c# ms-word openxml

我正在使用word open XML。

rowCopy.Descendants<TableCell>().ElementAt(0).Append(new Paragraph(new Run(new Text(dr["NAME"].ToString()))));

about代码是将名称写入表中的单元格。但它正在细胞内部创建顶部和底部填充。我该如何删除它。是因为新的段落?我是开源XML的新手。

enter image description here

[![在此处输入图像说明] [2]] [2]

1 个答案:

答案 0 :(得分:1)

如果您的现有Docx文件中包含空表,则可能会发现每个Paragraph中都有一个空的Cell。通过使用Append,您将在空的Paragraph之后添加新的Cell,这会在单元格顶部产生一个看起来像填充的空格。

鉴于您只需要Paragraph中的新文字,您可以在添加新的Paragraph 之前删除所有现有的RemoveAllChildren元素,方法是调用{{ 1}}在Cell上(或Table,如果您确信自己不需要Table):

TableCell cell = body.Descendants<TableCell>().ElementAt(0);
cell.RemoveAllChildren<Paragraph>();
cell.Append(new Paragraph(new Run(new Text(dr["NAME"].ToString()))));

如果问题不存在,那么您可以通过编辑TableCellMargin来控制填充。以下内容应该有效:

if (cell.TableCellProperties != null && cell.TableCellProperties.TableCellMargin != null)
{
    cell.TableCellProperties.TableCellMargin.BottomMargin = new BottomMargin() { Width = "0" };
    cell.TableCellProperties.TableCellMargin.TopMargin = new TopMargin() { Width = "0" };
}

修改

完整的代码列表将是这样的:

static void AddDataToTable(string filename)
{
    using (WordprocessingDocument wordDoc =
            WordprocessingDocument.Open(filename, true))
    {
        var body = wordDoc.MainDocumentPart.Document.Body;
        var paras = body.Elements<TableCell>();

        TableCell cell = body.Descendants<TableCell>().ElementAt(0);
        cell.RemoveAllChildren<Paragraph>();
        cell.Append(new Paragraph(new Run(new Text(dr["NAME"].ToString()))));

        if (cell.TableCellProperties != null && cell.TableCellProperties.TableCellMargin != null)
        {
            cell.TableCellProperties.TableCellMargin.BottomMargin = new BottomMargin() { Width = "0" };
            cell.TableCellProperties.TableCellMargin.TopMargin = new TopMargin() { Width = "0" };
        }

        wordDoc.Close(); // close the template file
    }
}