2017-03-27 195 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