C#」カテゴリーアーカイブ

Excel のマクロを Python で書く。

みむらです。IronPython ってのがあるので、ちょちょいと。

仕組みとしては、Visual Studio の VSTO (Visual Studio Tools for Office) を使って、
Office 向けのアドインを作って、その中で IronPython を動かそうーってこと。

359870206

結果としてはこんな感じ!

とりあえず、VSTO の書き方とかは割愛して。

ソースはここに:
https://github.com/mimura1133/mm_Python_for_Excel

using Microsoft.Scripting.Hosting;
using IronPython.Hosting;

namespace ExcelAddIn1
{
    public partial class ThisAddIn
    {
        public static string Code = "";

        static ScriptEngine _python;
        static ScriptScope _python_scope;

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            _python = Python.CreateEngine();
            _python_scope = _python.CreateScope();
            _python_scope.SetVariable("Application", Application);
            _python_scope.SetVariable("Function", Application.WorksheetFunction);
            _python_scope.SetVariable("Cells", Application.Cells);
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }

        public static void Run()
        {
            var cc =_python.CreateScriptSourceFromString(Code);
            cc.Execute(_python_scope);
        }

        #region VSTO generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }

        #endregion
    }
}

メインソースはこんな感じ!

Python.CreateEngine() で、 Python のエンジン作って、

Scope に対して、 SetVariable を使って、参照をがしがし。( python で言うところの、 import )

あと、どこかから Run が実行されたらコンパイルして実行する仕掛け。

動作例ですと、「Run」 ボタンですね。

これ使った場合、 Function 以下に、Excel の関数が存在していて、

Cells 以下に、各セル情報が入っているので、キー入力を捕まえてくれば、Python によるマクロも可能かも。

制作時間30分だから、とっても汚くて、実装がふざけた感じになっているけど、許してね。

結局 .net で。

image

どうも。みむらです。

STEP_M の C# 移行を開始しました。
2ch の方で C++ において開発を進める方向の話も出ていましたが、

  • メモリ管理の点において、安全なコードが書け、メモリリークが発生しない。
  • プラグイン作成が、あらかじめ提供する Interface を継承して制作するだけでできる上、
    構造上、独自拡張版や派生版が登場したとしても、オリジナルバージョンで利用できるプラグインが作れ、
    プラグインを入れ子にして拡張するプラグインを作るにしても可能ということで、
    かなりの拡張性が見込める。
  • テキスト処理が簡単に書けて、いろいろなことができる。
  • 端っからオブジェクト指向言語なので、テキスト処理やオブジェクト処理が後で見やすい、わかりやすい。
  • Unicode ベースなので、多言語処理もできる。
  • Visual Studio Express (無償版) でも開発が行える。
  • 開発時の負担が減らせる。
  • Mono Project の結果を利用すれば、Linux / Mac OSX でも走るかもよ!

というような点から、やはり C# での開発かな。ということになりまして、開発なう。です。

そして、XAML が結構使いづらいと考えていたのですが、使ってみたら使いやすい。
HSP と Win32API を使ってプログラムを作っていたこともあり、
可能な限りテキストベースで行ってもらった方がわかりやすいんですね。

XAML は XML ベース。
image
なっかなかに使いやすかったので、XAML での方向に進もうかと。
もちろん、XAML で書いたオブジェクトの動作を C# コードで書けて、
そこの部分の制御は Windows Form を使ったのとほぼ変わらないので、新たに覚え直す必要もなく。

問題は開発時間ですが、それはまぁ。暇を見つけてやりましょうやりましょう。ということで。

お絵かきソフトやら、メモ帳やら、やろうかなぁ。というやつはあるっちゃぁありますが、
C# + XAML がおもしろいので、こっちの開発に100%タスクを回しそうです。

ただ欠点ももちろんありまして、

  • 動作可能OSが Windows XP 以降 (XAML 使わなければ、Win98 でも走るプログラムができるんですがねw)
  • Windows XP では初回起動が遅い (.net framework の実行環境を立ち上げるため)
    -> ユーザ側で ngen.exe であらかじめネイティブイメージを生成しておくと、初回から起動が速くなります。
  • 動作全体がちょっと遅い
    (.net のしょうがない点。多くの計算をする内容でなければ問題なし。)

まぁ、この辺は、C# でプログラムをいろいろと書いてはいますが、気にならない点ではないかと考えております。

そんな感じで、これからテスト版や制作中スクリーンショットなどを公開していきますが、
よろしく見守っていていただけたらと思います。

 

ではでは。そんな感じで。

U-20 プログラミングコンテスト

情報化月間推進会議 / 経済産業省・文部科学省・内閣府・総務省・財務省・国土交通省
が主催する20歳以下の皆さんに対するプログラミングコンテストの最終審査会が、
10月1日に行われました。

公式ページ:
U-20 プログラミング・コンテスト

結果として、
第31回U-20プロコンで「GeoJapanesis」、「PiQ」、「SARA」の3作品に経済産業大臣賞 – ニュース:ITpro

最優秀賞である経済産業大臣賞に地図ビューワー「GeoJapanesis」、「PICエミュレータ PiQ」、「擬似言語シミュレータ SARA」の3作品が選出された。

最終審査会に勝ち残った、経済産業大臣賞の以外の7作品が経済産業省商務情報政策局長賞を受賞した。

・KNOWALL LIBRARY 2.0
3次元グラフィックス・物理演算ライブラリ
京都コンピュータ学院 2回生 米山哲平氏

・カーレース
レースゲーム
愛知県高浜市立高浜中学校 2年 木下拓己氏

・Vis-LiTer
堀川高等学校講堂舞台照明シミュレータ
京都市立堀川高等学校 自然探究科3年 下村祥生氏

・スクリーンキーボードエディタ
ソフトウエアキーボード作成ツール
城県工業高等学校 情報技術科3年 笹木信吾氏

・FAL(深谷エアライン)システム
航空券販売Webアプリケーション
深谷商業高等学校 専攻科情報システム2年 FALチーム

・TreisPyles
ゲートボールゲーム
新潟コンピュータ専門学校 ゲームクリエーター科2年 Endless NEET’s

・ULO (Unidentified Launch Object)
アプリケーションラウンチャー
新潟コンピュータ専門学校 システム科2年 my.t

知り合いの所ではあれですね。
Knowall Library の作者さん。

あと、
深谷商高情報会計専攻科がU-20プログラミング・コンテスト入賞
FAL システムの作者のみなさん。

Knowall Library の作者さんは前から知っていた人で、
3D 系に関してものすごく開花したすごい人。
FAL の皆さんはとっても気さくな皆さんで、良い人だなーと。

 

ま・・まぁ、何を隠そうですね。私もその会場にいました。

どういう立場でその会場に入っていたかってのは、
Mimura’s Homepage – Software
もしかするとこう、私のウェブサイトを参照すると、わかるのかもしれません。

 

 

作品出品してました。

 

 

「擬似言語シミュレータ SARA」の紹介をしている人いますでしょ。
あれ、私の抜け殻です。クローンです。アンドロイドです。

 

 

・・いや、私です。このブログ、およびウェブサイトの中にはあいつが住んでます。

 

 

とりあえず、賞を受けた訳ですが、
受賞の際は、まじめに賞の名前を聞かずに、呼ばれたのでほほーい。と言ってみたらあれれー。という。そんな感じです。脳天気な私ですいません。

賞の名前は後から聞きました。

 

このコンテストに参加して、
超豪華審査員の皆さんと話ができたりしたのがとっても有益でした。うん。

セプキャンウェルカム みたいなことを言われたり、
超豪華でなーを目の前に、しゃべってしゃべってあんまり手を付けられなかったとか、
いろいろとネタはありますが割愛。

 

 

さて。

その後、大学では謎に取り上げて頂いて、
【受賞】U-20プログラミングコンテストで「経済産業大臣賞」受賞
どうなのねー。っていう印象は受けます。受けてます。怖いです。

その一方で、地元紙(千葉日報 2010年10月8日)では、
結構小さく載っているとの情報もあるような無いような。

千葉日報取っている人がいたら、是非とも是非とも見せてもらいたい物です。

後日談(10月16日)
新聞見ました。意外と良い感じで載っていましてびっくり。

 

とりあえず、なんだか記憶から吹っ飛ばしたくない経験だったのでこっちに書きましたが、
あれですかね。

 

U-20 の人で、プログラム書きたい or 書いているひとは、参加したらいいんじゃないかな。と思うわけです。

きっと面白いと思うんです。

CUDAコンパイラはマクロに弱い。

覚え書き。(突っ込み入ったので、語弊がないように一部書き直し。

 

弱いんだかなんだか、評価は出来ませんが、
とりあえず、CUDA コンパイラ(nvcc) はマクロ展開に際して非常によろしくない挙動を取ります。

 

CUDAコンパイラは糞。マクロを正常に展開しない。 – 簡潔で覚えやすいタイトルを3秒で思いつく程度の能力
詳細については上記リンクの記事を参照して頂ければとおもいます。

とりあえず、

HWND hwnd = CreateWindow(lpClassName,  // CLASS NAME

                          lpWindowName, //WINDOWNAME

というような、引数が複数行にわたって記述される場合で、コメントを1行コメントなんぞ付けたりすると、
マクロが良い感じで展開してくれないよ-。ということ。

 

C コンパイラというから、きっと、全部コメントは /* */ だろ!ということで、
NVIDIAの中の人がかなり手を抜いているような気がしてなりません。

 
/* ~ */ で括れば、とりあえず、コメントの範囲はわかるし! みたいな。うん。
なんかそんなこと考えたら余程ステキな仕様な気がしてきた。うん。

ま・・まぁ、とりあえず、
ユーザはコメントを /* */ で書いて、
NVIDIAの中の人にはマクロ展開部分をきっちり作ってもらって。と。

 

でも、C99 って1行コメント使えるよなぁ・・。
Cでも使える時代が到来しているのに・・。むぅ。