2009年07月09日

相変わらず動かないサンプルが付いてるMS-VS・・・

困るなぁ・・・

VS2008を買ってもらいました。

困るなぁ・・・

仕事しないといけないから・・・

困るなぁ・・・



というわけで年報作成業務を行っています。
フォームにボタンがあって、ボタンを押すと、クエリ発行 → 統計処理 → Excel出力 という感じのアプリにしようと思っています。
印刷はExcelでやれば良いかなと。

面倒なのでプレビューもなし。
なんもなし。
それでもそもそものExcel出力は調べないと話になりません。
やったことないからね・・・。
※C#なのは何となく趣味的な問題です。VB.NETが良いよとか書いてあったりするんですが・・・どうしますかね・・・



VSのヘルプで出てくるサンプルは全うに動かなかったので調査するしかありませんでした・・・説明不足なんだよぉ > MS。
案の定というか何というか・・・ともかくgoogle先生にお伺いしながらExcelに吐き出すサンプルプログラムを色々と調査しました。


でもって出来上がったのが以下

追加したネームスペース
※あとMicrosoftOffice何タラかんたらをオブジェクト参照に追加しました
using System.Reflection; // For Missing.Value and BindingFlags
using System.Runtime.InteropServices; // For COMException
using Microsoft.Office.Interop.Excel;
using Excel=Microsoft.Office.Interop.Excel;

==============================
以下、ボタンクリック時の処理
==============================

private void button1_Click(object sender, EventArgs e)
{
// Excel起動(エイリアス切らないとApplicationがFormのメンバになるようです)
Excel.Application app = new Excel.Application();
if (app == null)
{
MessageBox.Show("ERROR: EXCEL couldn't be started!");
return;
}
// Excel表示
app.Visible = true;
// ブックの追加
Workbooks workbooks = app.Workbooks;
// Excelブックを開く(開けないとExceptionが発生します)
Workbook wb = workbooks.Open("c:\\test.xls", Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing);
// シートの選択(この辺も間違うとExceptionが発生します)
Worksheet ws = (Worksheet)wb.Worksheets["Sheet3"]; // SheetsからWorksheetへのキャストを知らずに苦労しました
ws.Select(true);
// 範囲指定(選択したシートに出力されます)
Range range1 = app.get_Range("G2", Missing.Value);
if (range1 == null)
{
MessageBox.Show("ERROR: range == null");
}
// 値を設定
const int nCells = 5;
range1.Value2 = nCells;
}



こんな感じです。
あとはget_Range駆使しながら出力するのみです。
(恐らくですが、出力中に違うシートにしたり、違うブック開いたらそっちにデータを出力してしまうと思います。つまり出力時に選択されているシートが出力対象のシートってことです)
取りあえずデータとして1つのシートに全データを吐き出して、計算式でレイアウトされたシートに引っ張り込もうという作戦です。

足りないデータはプログラム修正しながら調整しますが、レイアウト如きでは修正しないよという魂胆です。



ここからは面倒な作業ですね。
クエリも色々と工夫していかないといけないし・・・。
まぁ、できるだけましですかね。


色々なところの質問コーナーや自前でTips公開されている方のところを参考にさせていただきました。
もう、どこが参考になったのか分かりませんが、感謝しています。
お礼に私のも公開させていただきますので、今後も皆さん持ちつ持たれつでよろしくお願いします。

ほな参考までに、ということで。


※15:18追記
前に開いたExcelブックを閉じずにプログラムを再度動かして新たにブックを開くと読み取り専用で開きます。
posted by ケイ at 15:00| Comment(0) | TrackBack(0) | プログラム | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。