|
分類:[.NET 全般]
Visual Studio Express 2017を使用しています。 言語はC#で、Windowsフォームアプリケーションを作成しています。
Excelの操作について教えてください。
コピー元(セル範囲)を指定してセルのコピーをし、 次にコピー先(セル範囲)を指定してセルのペーストをします。 この時、コピー元に計算式(例えば、"=A1*A2"といった式)があれば、コピー先では対応するセルのアドレスにしたいです。
具体的には A1セルに2、A2セルに3、A3セルに=A1*A2 と入力しておきます。(A3セルは6と表示されています) B1セルには5と入力しておきます。
A2〜A3セルの内容をB2〜B3セルにコピーしたとき、B3セルの式を=B1*B2としたいです。(B3セルに15と表示されるのが期待結果です)
以下のようなコードを書いていますが、現在はコピー元のセルの計算式と同じアドレスを指定してしまいます。 対応方法について教えていただけないでしょうか。
m_wsはワークシートオブジェクト
// Rangeを指定 dynamic kRange = m_ws.GetType().InvokeMember("Range", BindingFlags.GetProperty, null , m_ws, new object[] { "A2:A3", Missing.Value });
object[,] obj1; object[] parameters = new Object[1]; // 二次元配列に値をセット obj1 = (System.Object[,])kRange.GetType().InvokeMember("Formula", BindingFlags.GetProperty, null, kRange, null); parameters[0] = obj1;
// 書込み先の範囲を取得 dynamic wRange = m_ws.GetType().InvokeMember("Range", BindingFlags.GetProperty, null , m_ws, new object[] { "B2:B3", Missing.Value });
kRange.GetType().InvokeMember("Copy", BindingFlags.InvokeMethod, null, kRange, null); wRange.GetType().InvokeMember("Select", BindingFlags.InvokeMethod, null, wRange, null); m_ws.GetType().InvokeMember("Paste", BindingFlags.InvokeMethod, null, m_ws, null); wRange.GetType().InvokeMember("Value2", BindingFlags.SetProperty, null, wRange, parameters);
|