0

Excel Interop コードを Spreadsheet 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で、定義された名前(範囲の新しい指定、またはSpreadsheet Lightの説明)を次のように作成しています:

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;
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 に答える