Как установить высоту строки для определенного имени (диапазона) в 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;

person B. Clay Shannon    schedule 06.04.2016    source источник


Ответы (1)


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

sl.SetRowHeight(1, 4, 12);

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

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

Несмотря на то, что в Spreadsheet Light нельзя использовать диапазон для некоторых вещей, кажется довольно простым использование значений, доступных через метод 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
person B. Clay Shannon    schedule 07.04.2016