如何在Spreadsheet Light中为已定义的名称(范围)设置行高?

时间:2016-04-06 23:09:02

标签: c# excel-interop named-ranges spreadsheetlight

我正在尝试将Excel Interop代码转换为Spreadsheet Light。我想模仿的传统Interop代码是:

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

我在Spreadsheet Light-ese中创建一个如此定义的名称(新名称或电子表格之光的范围说明):

sl.SetRowHeight("columnHeaderRowRange", 12);

我认为我可以为这个范围设置行高:

SLStyle headerStyle = sl.CreateStyle();

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

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

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

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

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

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

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

我认为除了我的风格之外,我还可以从Excel Interop范围转换所有内容:

<div class="get-more" data-id="<?php $id; ?>">WHATEVER</div>

<script>
$(document).ready(function(){
    $(".get-more").click(function(){ 
        var url = 'path-to-php-handler.php';
        var id = $(this).data("id");
        var postit = $.post( url, {id:id});
        postit.done(function( data ) {
            // what you echo on the php handler is returned as data -  do what you want with data
    });
});
</script>

1 个答案:

答案 0 :(得分: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
相关问题