如何使用 Excel-DNA 遍历行?

How do I use Excel-DNA to iterate over rows?

我正在寻找 excel-dna 迭代工作表中单元格的简单示例。我想我会有这样的东西:

public static class Test {

    [ExcelCommand(MenuName = "Range Tools", MenuText = "Iterator")]
    public static void IterateOverRows(string worksheetName, string startAddress, string endAddress) {
    ...
    }
}

我会从 Excel 调用此加载项,使用单击按钮 运行:

   Application.Run("IterateOverRows", "Sheet1", "A1", "C3")

关于如何在 Excel-DNA 中执行此操作的任何指示?

这个有效:

using Excel = Microsoft.Office.Interop.Excel;

[ExcelCommand]
public static void IterateOverRows(string worksheetName, string startAddress, string endAddress) {
    var app = (Excel.Application)ExcelDnaUtil.Application;
    var ws = (Excel.Worksheet)app.ActiveWorkbook.Sheets[worksheetName];
    var rows = ws.Range[$"{startAddress}:{endAddress}"].Rows.OfType<Excel.Range>();
    foreach (var row in rows) {
        row.Cells[1, 1].Value = "aaaa";
    }
}

或者您可以使用它并像这样称呼它 Application.Run "IterateOverRows2", [Sheet1!B2:C10]:

[ExcelCommand]
public static void IterateOverRows2([ExcelArgument(AllowReference = true)] object range) {
    var app = (Excel.Application)ExcelDnaUtil.Application;
    var xlRng = app.Range[XlCall.Excel(XlCall.xlfReftext, (ExcelReference)range, true)];
    var rows = xlRng.Rows.OfType<Excel.Range>();
    foreach (var row in rows) {
        row.Cells[1, 1].Value = "aaaa";
    }
}