Select 细胞集合

Select collection of cells

我需要 select 工作表中的一组单元格。我可以找到如何 select 一个范围,但当单元格是 "isolated".

时却找不到

例如“$D$4”、“$G$9”...

我的代码:

var excelApp = Globals.ThisAddIn.Application;

List<string> unlockedCells = new List<string>();
foreach (_Excel.Range cells in excelApp.ActiveSheet.UsedRange)
{
    if (!cells.Locked)
    {
        unlockedCells.Add(cells.Address);
    }
}

unlockedCells.ForEach(_c =>
{
    excelApp.Range[_c].Select();
});

这里的问题是每次 selected 一个新的范围时,之前的 selection 就会丢失。

另一种方法。它不起作用,引发异常 Exception from HRESULT: 0x800A03EC at Microsoft.Office.Interop.Excel._Application.get_Range(Object Cell1, Object Cell2)

我得到的范围如下:"$D,$E,$D,$E,$D,$E,$D,$E,$D,$E"

StringBuilder output = new StringBuilder();
...
output.Append(String.Format("{0},", cells.Address));
string rangeDef = output.ToString().Left(output.Length - 1);
excelApp.Range[rangeDef].Select();

我该如何实现?

Office 版本 2016

虽然 excelApp 本身确实有 Range 属性,但工作簿或工作表不明确。相反,尝试引用某个工作表的 Range

StringBuilder output = new StringBuilder();
output.Append("C4,");
output.Append("D5,");
output.Append("E6,");
string rangeDef = output.ToString().Substring(0, output.Length - 1);

Worksheet worksheet = excelApp.ActiveSheet;
Range range = worksheet.Range[rangeDef];
range.Value = "test";

为我工作了一些最小的测试。

List<string> cells = new List<string>();
cells.Add("$C");
cells.Add("$D");
cells.Add("$H");

for (int idx = 0; idx < cells.Count; idx++)
    cells[idx] = String.Format("'{0}'!{1}", (excelApp.ActiveSheet as _Excel.Worksheet).Name, cells[idx]);
string rangeDef = String.Format("={0}", String.Join(";", cells));

var sheet = (excelApp.ActiveSheet as _Excel.Worksheet).get_Range(rangeDef, Type.Missing).Select();

我好像遗漏了工作表名称。