如何使用C#在OpenXML电子表格中隐藏列?

5
我正在使用C#的DocumentFormat.OpenXML。如何隐藏特定的列?部分代码如下:
using (SpreadsheetDocument sDocument = SpreadsheetDocument.Open(resultFileName, true))
{
    WorkbookPart workbookPart = sDocument.WorkbookPart;
    WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();

    var relId = workbookPart.GetIdOfPart(worksheetPart);

    GenerateWorksheetPartContent(worksheetPart, data, templateSheet);

    var columns = worksheetPart.Worksheet.Descendants<Column>(); <-- Empty

    int[] colomnsToHide = new int[] { 3, 8, 16, 17, 18 };

    foreach (int i in colomnsToHide)
    {
        columns[i].Hidden = true;
    }
}

templateSheet - xlsx-template中的SheetData。
data - 要插入的数据。

有任何建议吗?

1个回答

6

只有当存在自定义列行为,例如大小、隐藏或分组时,Column后代才会添加到worksheetpart中。您可以像这样明确添加列定义:

Columns columns = new Columns();

// Min & Max refer to the 1-indexed column ordinal
Column column3 = new Column(){ Min = 3, Max = 3, Width = 0, CustomWidth = true, Hidden = true };
Column column8 = new Column(){ Min = 8, Max = 8, Width = 0, CustomWidth = true, Hidden = true };
// ... repeat for each column

columns.Append(column3);
columns.Append(column8);
worksheetPart.Append(columns);

对于您希望隐藏的每个列,请执行此操作


你可能已经想到了工作表?我在Open XML SDK 2.0生产力工具中打开了我的模板文件,并使用了那里的逻辑:<!-- language: c# --> public Worksheet GenerateWorksheet() { Worksheet worksheet1 = new Worksheet(); .... Columns columns1 = new Columns(); .... worksheet1.Append(columns1); .... return worksheet1; } - Phoenix
2
为了让它起作用,我不得不在SheetFormatProperties对象之后插入它:worksheetPart.Worksheet.InsertAfter(columns, worksheetPart.Worksheet.SheetFormatProperties); - Paul Taylor
如果文档未启用自动保存,请不要忘记调用 worksheetPart.Worksheet.Save() 方法。 - M. Jahedbozorgan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接