简体   繁体   中英

How to hide rows in Excel using OpenXML in C#?

I tried a lot for finding a solution if we can hide blank rows n Excel using OpenXML in C#. If anyone has a solution to it, it will of great help if you share it.

I have a Summary page which contains data in "A1:B7" cells. I want to hide the rows from 8th till the last 1048576th. I am trying like:

WorkbookPart workbookPart = spreadsheetDocument.AddWorkbookPart();
workbookPart.Workbook = new Workbook();

WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet();

SheetData sheetData = new SheetData();
Row emptyRow = new Row();
emptyRow.Hidden = true;
sheetData.Append(emptyRow);

worksheetPart.Worksheet.Append(sheetData);

Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());

Sheet sheet = new Sheet();
sheets.Append(sheet);

worksheetPart.Worksheet.Save();

Expected outcome: all rows from 8 till 1048576 should be hidden.

如果尚未下载OpenXMLSDKTool,请下载它,将未隐藏行的文件与隐藏行的文件进行比较,我相信它应该向您显示xml以及用于生成它的c#的区别。

You could create hidden Row objects, with 8 to 1048576 RowIndex values, and add them to sheetData . However, that would result in a rather large Excel file.

A better, optimized, way would be to define in the sheet's formatting properties that rows are hidden by default, and only visible if specified.

For instance, like the following:

using (var spreadsheetDocument = SpreadsheetDocument.Create(filePath,
    SpreadsheetDocumentType.Workbook))
{
    var workbookpart = spreadsheetDocument.AddWorkbookPart();
    workbookpart.Workbook = new Workbook();

    var worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
    worksheetPart.Worksheet = new Worksheet();

    workbookpart.Workbook
        .AppendChild(new Sheets())
            .AppendChild(new Sheet()
            {
                Id = workbookpart.GetIdOfPart(worksheetPart),
                SheetId = 1,
                Name = "Sheet 1",
            });

    var sheetFormatProperties = new SheetFormatProperties()
    {
        DefaultRowHeight = 15,
        ZeroHeight = true
    };
    var sheetData = new SheetData();
    worksheetPart.Worksheet.Append(sheetFormatProperties, sheetData);

    // Add first 8th visible rows, the rest will be hidden.
    for (uint i = 1; i < 8; i++)
    {
        var row = new Row() { RowIndex = i };
        sheetData.Append(row);

        // Add cells to row ...
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM