2017-03-27 9 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(); 

어떻게하면됩니까? 자체가 Range 속성이 않는 excelApp 있지만 오피스 버전 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

는, 통합 문서 또는 워크 시트가 모호합니다. 대신, 특정 워크 시트의 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