Как скрыть строки в Excel, используя OpenXML в C #?

Ответ заключается в том, что существует несколько типов атрибутов на ADObject - Default, Extended и Constructed. Это некоторые примеры.

Default свойства возвращаются во все ADObject запросы, соответствующие определенному типу ADObject (ADUser имеет свой собственный набор свойств по умолчанию, ADGroup имеет свой собственный набор и т. д.).

Extended свойства по умолчанию не возвращаются, но неявно перечислимые статические атрибуты в атрибутах ADObject.

Constructed не являются статическими свойствами, а вычисляются на основе значений других атрибутов, принадлежащих ADObject. Я не мог найти никакой информации об этом, но я полагаю, что перечисление всех атрибутов Constructed может быть дорогостоящей операцией, поскольку значения вычисляются и, как таковые, должны быть явно запрошены с помощью параметра -Properties командлетов Get-ADObject .

Все это похоже на атрибут systemFlags на ADObject, где установлены типы атрибутов. Мое подозрение (я не очень сильно тестировал эту теорию) заключается в том, что атрибуты с флагом Constructed (4) или Non-Replicated (2) должны быть явно указаны для возврата из cmdlet.

Источники

msDS-UserPasswordExpiryTimeComputed Documentation

Список всех построенных атрибутов в ADObject с использованием фильтра LDAP

Определение Тип атрибута

Атрибут SystemFlags

0
задан E Singh 18 January 2019 в 19:57
поделиться

2 ответа

Вы можете создать скрытые 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
ответ дан Mario Z 18 January 2019 в 19:57
поделиться

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

0
ответ дан imjustaboy 18 January 2019 в 19:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: