选择单元格集合

时间:2017-03-27 13:39:33

标签: c# excel interop excel-interop

我需要在工作表中选择一组单元格。我可以找到如何选择范围,但不能在单元格被隔离时#34;

例如" $ 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();
});

这里的问题是,每次选择新范围时,先前的选择都会丢失。

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

我得到的范围如下:"$D$8,$E$8,$D$9,$E$9,$D$10,$E$10,$D$11,$E$11,$D$12,$E$12"

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

我怎么能实现它?

Office Version 2016

2 个答案:

答案 0 :(得分:0)

虽然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";

为我做了一些最小的测试。

答案 1 :(得分:0)

iris %>%
    mutate(Sepal.Area = Sepal.Length * Sepal.Width,
           Petal.Area = Petal.Length * Petal.Width,
           range = cut(Sepal.Area, breaks = c(0, 17, 22, Inf))) %>%
    group_by(Species, range) %>%
    summarize(count = n())

#      Species    range count
#       <fctr>   <fctr> <int>
# 1     setosa   (0,17]    25
# 2     setosa  (17,22]    22
# 3     setosa (22,Inf]     3
# 4 versicolor   (0,17]    28
# 5 versicolor  (17,22]    21
# 6 versicolor (22,Inf]     1
# 7  virginica   (0,17]    10
# 8  virginica  (17,22]    31
# 9  virginica (22,Inf]     9

似乎我错过了工作表名称。