- - PR -
ExcelからC#を操作
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-08-09 16:03
Excelのオートメーションアドインを利用して、ExcelからC#を通してDBの読み書きを
したいと考えています。 具体的には、Excelシート上で、 「=GetData()」とすると、C#側から2次元配列のデータが戻され、 「=SetData("A1:B4")」とすると、シート上のデータをC#側に渡しDB更新。 「=GetData()」のC#側からExcel側に2次元配列を渡すことはできるのですが、 「=SetData("A1:B4")」のExcel側からC#側にレンジのようなデータを渡すことが できません。 どなたか渡し方をご存知の方はいないでしょうか? ちなみに、C#側のソースは以下のようにしています。 public object[,] GetData(string KeyWord) { xxx = KeyWordを条件にしたDB検索処理 return xxx } public string SetData(object[,] RangeData) { return "OK"; } 上記のSetDataで、引数の型をobject[,]からstringに変更し、単一セル値を渡すと Excel側に"OK"と返されますが、object[,]のままでレンジを渡すと"OK"と帰って来ず、 Excel側で"#VALUE!"となってしまいます。 ※SetDataでは、渡すことじたいができているか確認するために即リターンさせています。 | ||||
|
投稿日時: 2006-08-10 11:30
自己解決しましたので方法を載せておきます。
私は、C#→Excel時がobject[,]だったため、逆のExcel→C#も何かしらの配列型と 思っていましたが、Excelから受け取る場合は1つのobjectとして受け取り、 メソッドの内部でobjectをrangeに変換することで実現できるようです。 具体的には、 public string SetData(object RangeData) { Excel.Range r = RangeDataas as Excel.Range; return r.Cells.Count.ToString(); } ※渡したrangeのセル数が戻ります。 | ||||
|
投稿日時: 2006-08-10 12:29
2 行目が C# と VB が混ざっているような... SetData メソッドは、C# 側なのですよね? r.Cells.Count については、直接 Count メンバまでアクセスしてしまうと、 Cells (Excel.Range) の参照カウントをデクリメントするタイミングを失いますので、まずいかと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1