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

Pho*_*nix 4 c# excel openxml

我在 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

templateSheet - 来自 xlsx 模板的 SheetData。
数据 - 要插入的数据。

有什么建议?

jkl*_*ack 5

仅当存在某些自定义列行为(例如大小、隐藏或分组)时,才会将列后代添加到工作表部分。您可以像这样显式添加列定义:

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);
Run Code Online (Sandbox Code Playgroud)

对要隐藏的每一列执行此操作

  • 为了使其正常工作,我必须将其插入到 SheetFormatProperties 对象之后:`worksheetPart.Worksheet.InsertAfter(columns, worksheetPart.Worksheet.SheetFormatProperties);` (2认同)