粗茶でございます日本語 プログラミング 言語 「なでしこ」 大好き 

このページの記事目次 (カテゴリー: C#

スポンサーサイト

   ↑  --/--/-- (--)  カテゴリー: スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

(記事編集) http://nadesocha.blog.fc2.com/?overture" target="_new

--/--/-- | Comment (-) | ホーム | ↑ ページ先頭へ ↑ |

C#とエクセル

   ↑  2010/10/31 (日)  カテゴリー: C#

プラグインでエクセル起動


 プラグインからエクセルを操作してみました。

 通常、C#からエクセルを操作するには、COMオブジェクトを利用するわけですが、COMオブジェクトはアンマネージドであり、アプリケーションの終了時に参照カウントを解放(メモリ解放)しなければ、プロセスに残ってしまうという問題があります。

 C#とCOM連携についてインターネットで検索すると、皆さんこの参照カウントの解放に苦労されています。しかしながら、Visual Studio 2010になり、フレームワークが.NET Framework 4になったことにより、どうやら自動的にメモリ解放されるようで、開発時にCOMオブジェクトの参照カウントを意識しなくても良いらしいです。(本当のところはわかりませんので、詳しい方は教えて下さい)

COMオブジェクトの実例


 Visual C# 2010 Expressにおいて、対象のフレームワークを「.NET Framework 4」に設定し、次のプロジェクトをビルドして実行します。デバッグのままだと、参照カウントが残ってしまいますので注意です。

プロジェクト名:NakoPluginSocha3
参 照 設 定:Libnako、Microsoft.CSharp、Microsoft.Office.Interop.Excel、System、System.Windows.Forms
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using NakoPlugin;
using Excel = Microsoft.Office.Interop.Excel;
//using System.Runtime.InteropServices;

namespace NakoPluginSocha3
{
public class NakoPluginSocha3 : INakoPlugin
{
//--- プラグインの宣言 ---
string _description = "エクセル操作テスト by 粗茶";
double _version = 1.0;
//--- プラグイン共通の部分 ---
public double TargetNakoVersion { get { return 2.0; } }
public bool Used { get; set; }
public string Name { get { return this.GetType().FullName; } }
public double PluginVersion { get { return _version; } }
public string Description { get { return _description; } }
//--- 関数の定義 ---
public void DefineFunction(INakoPluginBank bank)
{
bank.AddFunc("エクセル処理", "", NakoVarType.Void, _xl, "エクセルを開いてセルの値を取得する", "えくせるしょり");
}
// プラグインの初期化処理
public void PluginInit(INakoInterpreter runner)
{
}
// プラグインの終了処理
public void PluginFin(INakoInterpreter runner)
{
}
// Define Method
public Object _xl(INakoFuncCallInfo info)
{
dynamic xlApp = new Excel.Application { Visible = true };
var xlBooks = xlApp.Workbooks;
var xlBook = xlBooks.Open(@"Sample.xlsx"); //ファイルをフルパスで指定
var xlSheets = xlBook.Worksheets;
var xlSheet = xlSheets[1];
var xlCells = xlSheet.Cells;
var xlRange = xlCells[1, 1];

var a1val = xlRange.Value2;

//--- COMオブジェクト解放 ---
//Marshal.ReleaseComObject(xlRange);
//Marshal.ReleaseComObject(xlCells);
//Marshal.ReleaseComObject(xlSheet);
//Marshal.ReleaseComObject(xlSheets);

xlBook.Close(false);

//--- COMオブジェクト解放 ---
//Marshal.ReleaseComObject(xlBook);
//Marshal.ReleaseComObject(xlBooks);

xlApp.Quit();

//--- COMオブジェクト解放 ---
//Marshal.ReleaseComObject(xlApp);

MessageBox.Show(a1val.ToString());

return null;
}
}
}

なでしこプログラム


エクセル処理。

 実行すると、エクセルを起動し、指定したブックを開いて、最初のシートにあるA1セルの値を取得します。

 実行後は、DemoCNako2のProgram.csにより、コンソールが開いたままとなります。この時点ではまだ、プロセスにEXCEL.EXEが残っています。

 Enterキーを押してコンソールを終了します。この時点で、プロセスにEXCEL.EXEが残っていないことが確認できました。

COM解放を検証してみる

スポンサーサイト

この記事に含まれるtag : なでしこ2.0 プラグイン C# Excel 

FC2スレッドテーマ : プログラミング (ジャンル : コンピュータ

(記事編集) http://nadesocha.blog.fc2.com/blog-entry-138.html

2010/10/31 | Comment (0) | Trackback (0) | ホーム | ↑ ページ先頭へ ↑ |

Excel連携プラグインを希望。

   ↑  2010/10/16 (土)  カテゴリー: C#

 なでしこ2.0では、プラグインの仕様が一応完成したため、様々な命令を追加できるようになりました。

 そこで、Excelを操作できるプラグインを誰か作ってくれないかなぁと思っているのです。


 C#では、Excelを操作するためにはアンマネージドのCOMを使用することになり、C#の特徴であるガベージ・コレクションを使うことがでないため、すべての参照カウントを解放する処理を書かなければなりません。


 Excelの多重起動は不可としても、複数のBookを開いたり、その中に複数のセルが含まれていたり、多くの参照カウントが作成されます。これらを管理して、最後にはきちんと解放する処理をしなければ、プロセスにExcelが残ってしまいます。


 Excelに限らず、OfficeなどのCOMを使う場合は、いつでもこの参照カウントの解放が問題となります。


 誰か解決してくれませんかねぇ?

 とても参考になるブログ。いげ太のブログ

(記事編集) http://nadesocha.blog.fc2.com/blog-entry-125.html

2010/10/16 | Comment (0) | Trackback (0) | ホーム | ↑ ページ先頭へ ↑ |

シングルトンを理解。

   ↑  2010/07/16 (金)  カテゴリー: C#

 前回の記事で、デザインパターン-シングルトンが何のために必要か、という疑問がありましたが、この本を読んで納得しました。


 グローバル変数(グローバルオブジェクト)ではなく、シングルトンを使うのは、プログラム内にインスタンスがたったひとつしか存在しないことを保証するのが第一の目的とするからなんですね。

 また、グローバル変数だと、結果として使われなくても最初から存在しますが、シングルトンだと、必要な時にはじめて生成されるんですね。

 小さなプログラムをいくつか作って、実験してみました。なるほどなるほど。


 私はC#を勉強し始めたばかりで、デザパタなんてまだまだですが、なでしこ2.0のコードを読むことで、いっぱい勉強できそうです。

 先輩方、よろしくお願いします。


 あと、この本に書かれていることも、たいへん参考になりました。

(記事編集) http://nadesocha.blog.fc2.com/blog-entry-117.html

2010/07/16 | Comment (0) | Trackback (0) | ホーム | ↑ ページ先頭へ ↑ |

C#の学習。

   ↑  2010/07/12 (月)  カテゴリー: C#

なでしこ2.0が、C#で開発されると、

みなさんの書いたコードを見ながら、

C#の勉強ができるので、うれしいです。

そして、いずれはOffice連携の部分を

開発できればいいなと思っております。

また、豊富なGUIを駆使できるように

なれば、グリッド問題も解決されるかも。

よろしくお願いします。


さて、ヒアドキュメントに使えそうな記号を

考えてみました。

“非常に大きい、小さい”

文字列文字列

文字列文字列

※二重山括弧《》や比較<>と似ている

からNGかも

“すみ付き括弧”

文字列文字列

文字列文字列

※配列で使用しているからNGかも

“亀甲括弧”

文字列文字列

文字列文字列

※角括弧[ ]と似ているからNGかも

やはり、「「「 」」」が簡単ですね。

(記事編集) http://nadesocha.blog.fc2.com/blog-entry-115.html

2010/07/12 | Comment (0) | Trackback (0) | ホーム | ↑ ページ先頭へ ↑ |

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。