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

どのように私はそれを達成するだろうか?

オフィスバージョン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

関連する問題