Как установить высоту строки для определенного имени (диапазона) в Spreadsheet Light?

Я пытаюсь преобразовать код Excel Interop в Spreadsheet Light. Устаревший код Interop, который я хочу эмулировать:

var columnHeaderRowRange = _xlSheetFillRateByDistributorByCustomer.Range[
    _xlSheetFillRateByDistributorByCustomer.Cells[1, 1],
    _xlSheetFillRateByDistributorByCustomer.Cells[1, 16]];
columnHeaderRowRange.Interior.Color = Color.LightBlue;
columnHeaderRowRange.RowHeight = 12;
columnHeaderRowRange.Font.Bold = true;
columnHeaderRowRange.Font.Size = 11;

Я создаю определенное имя (новое обозначение или описание Spreadsheet Light для диапазона), например, в Spreadsheet Light-ese:

SLDocument sl;
. . .
sl.SetDefinedName("columnHeaderRowRange", "Sheet1!$A$1:$P$4");

Я думаю, я мог бы установить высоту строки для диапазона примерно так:

sl.SetRowHeight("columnHeaderRowRange", 12);

... но это не работает; первый аргумент должен быть int (индекс строки).

Поэтому я подумал, что, возможно, я мог бы добавить его к стилю, который я мог бы затем применить к определенному имени:

SLStyle headerStyle = sl.CreateStyle();

..и затем примените этот стиль к определенному имени следующим образом:

sl.SetCellStyle("columnHeaderRowRange", headerStyle); // Remember Merle Haggard!    

... но я не вижу в SLStyle свойств, которые позволили бы мне это сделать.

Как я могу контролировать высоту всех строк в пределах определенного имени?

Я думаю, что у меня есть все из диапазона Excel Interop, кроме того, что в моем стиле:

headerStyle.Fill.SetPattern(DocumentFormat.OpenXml.
    Spreadsheet.PatternValues.Solid, Color.Black, Color.LightBlue);
headerStyle.Font.Bold = true;
headerStyle.Font.FontSize = 12;

1 ответ

Решение

То же самое можно эффективно сделать с помощью:

sl.SetRowHeight(1, 4, 12);

... или если вы хотите, чтобы диапазон проходил через последнюю добавленную строку:

var stats = sl.GetWorksheetStatistics();
var rowcount = stats.NumberOfRows;
sl.SetRowHeight(1, rowcount, 12);

Несмотря на то, что с помощью Spreadsheet Light невозможно использовать Range для некоторых вещей, кажется, что довольно просто использовать значения, доступные через метод GetWorksheetStatistics(), для выполнения удобных задач, таких как подгонка к каждой строке и столбцу:

SLWorksheetStatistics wsstats = sl.GetWorksheetStatistics();
int rowCount = wsstats.NumberOfRows;
int colCount = wsstats.NumberOfColumns;

sl.AutoFitRow(1, rowCount);
sl.AutoFitColumn(1, colCount);

Конечно, значения, предоставленные определенным именем, также могут быть использованы в подобных случаях:

sl.SetDefinedName("grandTotalRowRange",
        string.Format("Sheet1!${0}${1}:${2}${3}", 
            GetExcelTextColumnName(SHORTNAME_BYDCBYLOC_COL),
            rowToPopulate,
            GetExcelTextColumnName(QTYSHIPPED_BYDCBYLOC_COL),
            rowToPopulate)
        );

sl.AutoFitRow(rowToPopulate, rowToPopulate); // autofit the one row
sl.AutoFitColumn(SHORTNAME_BYDCBYLOC_COL, QTYSHIPPED_BYDCBYLOC_COL); // autofit the subset of columns
Другие вопросы по тегам