私は、ExcelアプリケーションのSheetChangeイベントを使用して、Excelのアプリケーションシートの変更を取得しています。典型的な戻り値は「$ C $ 11」である上記の例でExcelの範囲を反復する
void CellsChange(object Sh, Excel.Range Target)
{
....
string changedCell = Target.get_Address(Missing.Value, Missing.Value, Excel.XlReferenceStyle.xlA1, Missing.Value, Missing.Value);
....
}
: ユーザがセル座標を取得し、1つだけのセルを変更した場合は、経由して行うことができます。
しかし、複数のセルをハイライト表示してshift-enterを使用して範囲全体を同じ値にすると、返される文字列は次のようになります。 "$ C $ 11:$ K $ 11 "(行内で9セルの変化を示す)。
どのように範囲をスローすることができますか?各セルの座標と値をforeachまたはforループで取得します。 私は、次の...
for (int i = 0; i < Target.Count; i++)
{
Excel.Range r = Target.Item[i];
MessageBox.Show(Convert.ToString(r.Value2));
}
を試みたが、このコードは私に新しい値を元の範囲のセルを与えていません。 私もTarget.Itemロジックに従っていませんでした。ゼロベースの配列か1つのベースの配列ですか? いくつか試行してみると、Item配列は配列として整形されたシートセル範囲全体であるように見えます(したがって、強調表示された範囲の左側にある1つのセルであるItem [0]も同様に使用できます)。
Rangeオブジェクトや上記のイベントの使用経験が豊富な人はいますか?
おかげ
何のライブラリを使用していますExcelで作業しますか? – Jethro
Excelで何かを実行するときに構文、オブジェクト、またはロジックが何であるかを知る必要があるときは、マクロを記録してみてください。通常、それが生成するものは、あなたの問題を解決する方法のかなり良いアイデアを与えます。 –