Как скрыть строки в Excel, используя OpenXML в C #? - PullRequest
0 голосов
/ 18 января 2019

Я очень старался найти решение, если мы можем скрыть пустые строки в Excel, используя OpenXML в C #. Если у кого-то есть решение, оно очень поможет, если вы поделитесь им.

У меня есть сводная страница, которая содержит данные в ячейках "A1: B7". Я хочу спрятать строки с 8-го по 1048576-й последний. Я пытаюсь как:

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

Ожидаемый результат: все строки с 8 по 1048576 должны быть скрыты.

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Вы можете создавать скрытые Row объекты с значениями от 8 до 1048576 RowIndex и добавлять их к sheetData. Однако это приведет к довольно большому файлу Excel.

Лучшим, оптимизированным способом было бы определить в свойствах форматирования листа, что строки скрыты по умолчанию и видны только, если они указаны.

Например, например:

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 ...
    }
}
0 голосов
/ 18 января 2019

Загрузите OpenXMLSDKTool, если у вас его еще нет, сравните файл со строками, не скрытыми в файле, со скрытыми строками. Я считаю, что он должен показать вам разницу в xml, а также в c #, используемом для его генерации. .

...