いつもお世話になっております
只今C#でExcelファイルを出力するプログラムを作成しています。
以前やり方が分からずここに質問し、なんとかExcelに出力できるようになったのですが
Excelのバージョンが2007にしか対応していないことが分かり
遅延バインディング仕様に作り変えている最中です。
ところが、あと少しというところでクリアできない問題が2つ出てきたので、質問させていただきます。
1つは枠線を引く処理です。現在以下のように記述していますが
どうしても例外が発生してしまいます(0x800A03EC)
Type line = Type.GetTypeFromProgID("Excel.XlLineStyle.xlContinuous");
Type insidevertical = Type.GetTypeFromProgID("Excel.XlBordersIndex.xlInsideVertical");
Object tempA = objRange.GetType().InvokeMember("Borders", BindingFlags.GetProperty, null, objRange, null);
Object tempB = tempA.GetType().InvokeMember("Item", BindingFlags.GetProperty, null, tempA, new object[] { insidevertical });
tempB.GetType().InvokeMember("LineStyle", BindingFlags.SetProperty, null, tempB, new object[] { line });
これがどう解決していいかわかりません・・・
遅延バインディングという手法も最近知ったばかりで、見よう見まねという状況です。
2つ目は、ファイル保存時の拡張子です。
現在は以下のように記述しています
(問題なく動作はしてくれます)
object[] mySave ={strFileName,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing};
objBook.GetType().InvokeMember("SaveAs", BindingFlags.InvokeMethod, null, objBook, mySave);
以前はこのようにしていました
objBook.SaveAs(strFileName,
Excel.XlFileFormat.xlExcel8,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Excel.XlSaveAsAccessMode.xlNoChange,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing);
保存する拡張子をxlsに統一したいのですが、遅延にした場合のファイル形式の指定方法がわかりません
Type.Missingにすると、実行環境にあるものに合わせた拡張子で保存されてしまい
Excel2007を使用している環境ではxlsxのファイルを作ってしまいます。
Type exFormat = Type.GetTypeFromProgID("Excel.XlFileFormat.xlExcel8");
のような感じで使えるかとも思ったのですが、できませんでした。。
わかる方がいましたら、よろしくお願いします。
開発環境
Vista
VisualStudio2008
.NET Framework 3.5
No.1ベストアンサー
- 回答日時:
Excel 2000/XP/2003には,xlExcel8 (=56) は存在せず,xlWorkbookNormal (=-4143) を使います。
遅延バインドするのであれば,整数値をそのまま付けばよいです。
素早い回答ありがとうございます
拡張子の問題が解決しました!
数値での指定ができるとは驚きです。
本当にありがとうございます!
あとは枠線・・・
補足なのですが、枠線指定の部分は
Type.GetTypeFromProgID("Excel.XlLineStyle.xlContinuous");
などの部分がどうやらnullとして返されてるようです。
そのあたりが解決すれば上手く引けそうな気がします・・・
ここらへんも数値で指定とかができるのでしょうか?
No.2
- 回答日時:
事前バインディング時に列挙型になっている物は,整数型として扱えます。
私が現在やっているプロジェクトでは,
・インターフェイス用のプロジェクト
・ここにIApplicationやIWorkbookといった,バージョンに依存せず使うためのインターフェース
・共通で使うための列挙型 (2007のPIAからリフレクションで取得)
・各バージョン用のプロジェクト
・各バージョンのIAやPIAへの参照を持つ
・インターフェイス用のプロジェクトのインターフェイスを実装。内部はほぼIA/PIAへの委譲のみ
・列挙値は名前を使って変換
・パラメータが必要数より多い場合は無視
・全体をとりまとめるためのプロジェクト
・バージョンチェックを遅延バインディングで実行
・バージョンによって,各バージョン用のプロジェクトをリフレクションで実行時ロード
という方法を使っています。
各バージョン用の物がコピペになるのが悲しいのですが,バージョンごとの差異も吸収できるので,実用にならない,ということはないと思います。
どちらかというと,それだけのバージョンのExcelを入手できるかにかかってきますが……。
2度も回答ありがとうございます。
整数を調べて実装したら無事動くようになりました!
思わず万歳しそうになりましたw
なるほど、そういうふうに分けて利用する方法もあるのですね
今度試してみて、部品化出来るようにしていけたらと思います。
でも、遅延バインディングを選択せずにExcelを扱う必要がある時っていうのはどういう時なのでしょうか?
今回のことで遅延万歳状態になりつつあるのですがw
メリットやデメリットなんかも教えてもらえるとうれしいです。
Excelにもいろいろとバージョンがあるんですよね、まだ把握しきれていないので、今回の壁にぶつかったことで色々と目が覚めました。
少しずつ色々なことが出来るようになると本当にプログラミングは楽しいですね。
これからもがんばります。
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- その他(パソコン・周辺機器) タブレットで使用するUSBメモリについて 7 2022/05/26 14:27
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- その他(パソコン・周辺機器) PCI-Express の USB Type-C PD 対応拡張カードはありますか? 5 2022/10/08 08:54
- その他(パソコン・周辺機器) USB type A to USB type C変換アダプターについて 4 2022/06/18 07:44
- JavaScript javascriptでテーブルに追加した項目のid追加してローカルストレージを操作したい 5 2023/01/01 15:52
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- その他(パソコン・周辺機器) USB type A(メス)→ USB type C(オス)のハブがほしいです。安いのないですか?? 4 2022/10/20 19:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DirectX SDKのダウンロード
-
gitでバージョン指定してダウン...
-
Windows7でVB2005の開発
-
Microsoft edgeでflash player...
-
JSPファイルのヘッダー部分に画...
-
VBAでDVDのトレイを開く。、
-
qmailについて
-
VB.NETですがバージョンが高い...
-
しばしばバージョン表記に現れ...
-
vba クリップボードクリアにつ...
-
PythonやJavaScriptのように実...
-
VBA(えくせる)ってなんでメン...
-
授業でプログラミングのJavaの...
-
サイドワインダーのドライバ
-
struts2環境構築で不具合が出て...
-
Pythonを勉強する道のり
-
ホームページNinjaネットショッ...
-
Javaでのエラーについて
-
オブジェクト指向について
-
スプライン補間関数が実装され...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
gitでバージョン指定してダウン...
-
使用しているJUnitのバージョン...
-
Selenium/VBA/Chrome エラーで...
-
visual stadio 参照問題
-
VBAでDVDのトレイを開く。、
-
CrystalReportsのバージョン確...
-
Javaのバージョンアップにとも...
-
EclipseでJavaコンパイラのバー...
-
chromedriverのDLについて
-
VMwareの古いバージョンがダウ...
-
【javaコンパイル時のエラーに...
-
qmailについて
-
MSCOMCTL.OCXのアップデートの方法
-
エクセルVBAがMACで動かない
-
URLDownloadToFileのコピペで64...
-
Flashplayerの運用について
-
VS C#で作るアプリのバージョン...
-
Web.configで指定されているバ...
-
ロールバックの逆の言葉は?
-
mavenでtools.jar
おすすめ情報