したいこと
VSTO エクセルでクリックしたセルの値を取得したい
VSTO エクセルで選択したセルの値を取得するには
結論1 イベントハンドラが必要な場合
現在のシートにイベントハンドラを以下のように追加します。
Microsoft.Office.Interop.Excel.Worksheet activeSheet; activeSheet.SelectionChange += new Microsoft.Office.Interop.Excel.DocEvents_SelectionChangeEventHandler(SelectionChanged);
また呼ばれる側の関数は以下のような引数を持っていること。
Rangeの中に、Row(行の位置情報)と, Column(列の位置情報)があります。
private void SelectionChanged(Microsoft.Office.Interop.Excel.Range _target) { int col = _target.Column; int row = _target.Row; System.Windows.Forms.MessageBox.Show("SelectionChanged " + "col:" + col.ToString() + "," + "row:" + row.ToString()); }
結論2 イベントハンドラが不要な場合 Cells
Cells[,]で配列の形で必要な時に取得可能。
// 現在のワークシート取得 Microsoft.Office.Interop.Excel.Worksheet activeSheet = Globals.ThisAddIn.Application.ActiveSheet; // 現在のセル Microsoft.Office.Interop.Excel.Range actCetll = Globals.ThisAddIn.Application.ActiveCell; // 現在のセルを起点(左上)として、AxBのセルの範囲を指定する int col = actCetll.Column; int row = actCetll.Row; // ターゲットセルのデータを取得します ☆☆☆ここが重要 Microsoft.Office.Interop.Excel.Range target = activeSheet.Cells[row + 1, col + 2]; float left = (float)target.Left;
結論3 イベントハンドラが不要な場合 Range
Rangeで指定する場合、以下のように数値を文字列に変換して指定する必要あり。一度関数を作成すれば、問題ないが、それまでは不便だなぁと思っていました。
C# Excelの列の26進数風(アルファベットのみ)の数列計算方法
したいこと
Excelの列で用いられている26進数風の数列(アルファベットのみ)を計算したい。
26進数風の数列(アルファベットのみ)にて、数値→アルファベット、アルファベット→数値の関数が欲しい。
計算したい理由
エクセルのセ...
// ターゲットセル選択 - 数値を文字列に変換して指定 string pasteTargetCell = ExcelUtilityClass.GetColumnString(colStart) + (i + rowStart).ToString("0"); // ターゲットセルのデータを取得します ☆☆☆ここが重要 Microsoft.Office.Interop.Excel.Range range = activeSheet.Range[pasteTargetCell]; range.Cells.ColumnWidth = ....; range.Cells.RowHeight = ....;
まとめ
実際にエクセルのVSTOアドインに組み込んだ部分は、以下のようになります。参照ください。(イベントハンドラが必要な方法)
VSTOでのExcelアドイン開発手順
Excelアドイン開発について
VSTOでのExcelアドイン開発をしたくなったので、開発した記録を書きます。
内容的には、上記のOutlookのアドイン開発と全くかわらないのですが、それでは面白くないので、今回は選択された...
その他・自分用メモ
上記を調査しているときに、検索で引っかかった VSTO オフィシャルさんに書かれてる NamedRage コントロールの使い方が分からない。。
ワレコさんの記事も参考になった。