C# Interop 定义工作表数组

C# Interop define an array of Worksheets

我如何定义一个包含 4 worksheets 的数组?

例如这些是我的 worksheets:

    var wb = (Excel.Workbook)Globals.ThisAddIn.Application.ActiveWorkbook;
    var wsEvars = wb.Sheets["Evars"];
    var wsProps = wb.Sheets["Props"];
    var wsEvents = wb.Sheets["Events"];
    var wsListVars = wb.Sheets["List Vars"];

我想将它们包含在一个数组中,如下所示:

var sheets = [wsEvars, wsProps, wsEvents, wsListVars];

您可以按如下方式声明和初始化数组:

var sheets = new Microsoft.Office.Interop.Excel.Sheets[] { wsEvars, wsProps, wsEvents, wsListVars };

有了这些参考资料...

using Microsoft.Office.Tools.Excel;
using System.Linq;
using Worksheet = Microsoft.Office.Tools.Excel.Worksheet;
using Excel = Microsoft.Office.Interop.Excel;

如果您只需要 com 对象,您可以...

var wsEvars = wb.Sheets["Evars"];
var wsProps = wb.Sheets["Props"];
var wsEvents = wb.Sheets["Events"];
var wsListVars = wb.Sheets["List Vars"];

var sheets = new Excel.Worksheet[] {wsEvars, wsProps, wsEvents, wsListVars};

如果您需要 VSTO 主机接口...

var _factory = Globals.Factory;    

var wsEvars = _factory.GetVstoObject(wb.Sheets["Evars"]);
    var wsProps = _factory.GetVstoObject(wb.Sheets["Props"]);
    var wsEvents = _factory.GetVstoObject(wb.Sheets["Events"]);
    var wsListVars = _factory.GetVstoObject(wb.Sheets["List Vars"]);

    var sheets = new Worksheet[] {wsEvars, wsProps, wsEvents, wsListVars};

或者使用 linq...

var _sheetsArray = new[]{"wsEvars", "wsProps", "wsEvents", "wsListVars"}.Join(
    _wb.Worksheets.Cast<Excel.Worksheet>(), // outer  
    name => name, s => s.Name,              // key accessors
    (tag, s) => _factory.GetVstoObject(s)   // output selector
).ToArray();