2017-03-27 148 views
0

我需要在工作表中选择单元格集合。我可以找到如何选择一个范围,但不是当细胞“孤立”时。选择单元格集合

例如 “$ 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版本2016

+0

在循环中创建一个单元格引用的字符串,并使用您在循环之后创建的字符串来选择这些单元格。 – ManishChristian

+0

@ManishChristian我已经试过这个解决方案,并没有工作。我会修改这个问题来展示我也做了什么。 – blfuentes

+0

看看[** this **](http://stackoverflow.com/a/6155286/1652222)答案可能适用于您。 – ManishChristian

回答

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

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(); 

看来我错过了工作表名称。

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

为我工作极少的一些测试。

+0

我试过了。也不行,同样的错误。我怀疑这与我的办公版有关。任何想法? – blfuentes