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