2011-10-20 39 views
4

我在C#中使用DocumentFormat.OpenXML。我如何隱藏特定列?
代碼的某些部分:如何使用C#在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 - SheetData從XLSX模板。
要插入的數據 - 數據。

有什麼建議嗎?

回答

4

只有在存在某些自定義列行爲(如大小,隱藏或分組)時纔會將列後代添加到工作表部分。你可以明確地添加列定義是這樣的:

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); 

爲你做這個希望隱藏

+0

你可能已經在腦海工作表中的每一列?我在Open XML SDK 2.0生產力工具中打開了我的模板文件,並使用了以下邏輯: <! - language:c# - > 'public Worksheet GenerateWorksheet() { Worksheet worksheet1 = new Worksheet(); .... 列columns1 = new Columns(); .... worksheet1.Append(columns1); .... return worksheet1; }' – Phoenix

+1

爲了得到這個工作,我不得不將其插入後SheetFormatProperties對象: 'worksheetPart.Worksheet.InsertAfter(列,worksheetPart.Worksheet.SheetFormatProperties);' –

+0

也不要忘記調用worksheetPart.Worksheet .Save()方法,如果文檔沒有啓用AutoSave。 – CSharper

相關問題