0

我正在尝试将 Excel 互操作代码转换为电子表格 Light。我要模拟的遗留互操作代码是:

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-ese 中创建一个定义的名称(新名称或电子表格 Light 的描述范围):

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

我想我可以为范围设置行高,如下所示:

sl.SetRowHeight("columnHeaderRowRange", 12);

...但这不起作用;第一个 arg 必须是 int(行索引)。

所以我想也许我可以将它添加到一个样式中,然后我可以将其应用于定义的名称:

SLStyle headerStyle = sl.CreateStyle();

..然后将该样式应用于定义的名称,如下所示:

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

...但我在 SLStyle 中也没有看到允许我这样做的属性。

如何控制定义名称中所有行的高度?

我认为除了我的风格之外,我还转换了 Excel 互操作范围中的所有内容:

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

1 回答 1

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
于 2016-04-07T18:03:50.590 回答