C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: Excel 保存


(過去ログ 57 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■32746 / inTopicNo.1)  Excel 保存
  
□投稿者/ くろ (2回)-(2009/02/13(Fri) 15:57:34)

分類:[VB.NET/VB2005 以降] 

開発環境 
Windows XP
VS2008(VB) Excel2003

リリース環境
Windows XP,Vista
Excel 2003,2007

いつもお世話になっております。
VB側で作成したExcelファイルを

Imports Excel = Microsoft.Office.Interop.Excel
xlsBook.SaveAs(FilePath, Excel.XlFileFormat.xlExcel9795)

で保存しておりますが、Vistaでリリースすると「HRESULTからの例外」が発生してしまいます。
(XlFileFormat.xlExcel8は使用不可)

現在、参照しているExcelのライブラリバージョンは11.0(1.5.0.0)
リリース環境は12.0(1.6.0.0)

参照設定を変えずにこのままリリースする良い方法はありますでしょうか?
また、リリース環境を判断し、動的に参照を変化させる方法がありましたら、
ぜひご教授願います。


引用返信 編集キー/
■32751 / inTopicNo.2)  Re[1]: Excel 保存
□投稿者/ 魔界の仮面弁士 (996回)-(2009/02/13(Fri) 17:05:53)
2009/02/13(Fri) 17:15:44 編集(投稿者)

No32746 (くろ さん) に返信
> で保存しておりますが、Vistaでリリースすると「HRESULTからの例外」が発生してしまいます。
> (XlFileFormat.xlExcel8は使用不可)

開発機が WinXP + VS2008 + Excel 2003 PIA で、
実行環境が Vista + .NET 3.5 + Excel 2007 なのでしょうか。


> xlsBook.SaveAs(FilePath, Excel.XlFileFormat.xlExcel9795)

Workbook.SaveAs は、2000 → 2002 の際に "Local" という Optional 引数が追加されたのみで、
それ以降のバージョンでは、インターフェイス自体は仕様変更されていません。

ただし、使用できるフォーマットには差異がありますので、Excel.Application の
Version プロパティを見て、保存方法を切り替えて使用せねばならないかも。

当方の 2007 環境では、手動保存の場合も、Excel 2007 には 95 互換形式の選択肢が
見当たらず、VBA からの保存においても xlExcel9795 による SaveAs はエラーとなりました。

同様に DefaultSaveFormat の動作も確認してみましたが、xlExcel9795 は使えませんでした。

Application.DefaultSaveFormat = XlFileFormat.xlExcel5 'OK
Application.DefaultSaveFormat = XlFileFormat.xlExcel7 'OK
Application.DefaultSaveFormat = XlFileFormat.xlExcel8 'OK
Application.DefaultSaveFormat = XlFileFormat.xlExcel9795 'NG★
Application.DefaultSaveFormat = XlFileFormat.xlWorkbookDefault 'OK
Application.DefaultSaveFormat = XlFileFormat.xlWorkbookNormal 'OK



> 参照設定を変えずにこのままリリースする良い方法はありますでしょうか?
それは、「参照設定を変えれば解決する」事を確認済みであるという事でしょうか?

問題の原因が参照設定の差異にあるのだとしたら、対処療法的には、
問題の発生する箇所だけ、レイトバインドで運用するという方法が使えるでしょう。

しかし、参照設定を変えても解決しないのだとしたら、その対処法は意味を成さないので、
修正するだけ無駄になってしまいます。是非とも、事前にテスト環境を用意して確認してください。


> また、リリース環境を判断し、動的に参照を変化させる方法がありましたら、
実行時判定となると、レイトバインドにせざるを得ないと思います。
Office 2007 環境でコンパイルした物と、2003 との物をそれぞれ用意し、
インストール時点で選択インストールさせた方が安全かと。

# さもなくば、Excel 処理だけは VBA や VBS で作っておき、.NET からはそれを呼び出すとか。
引用返信 編集キー/
■32756 / inTopicNo.3)  Re[2]: Excel 保存
□投稿者/ くろ (3回)-(2009/02/13(Fri) 19:14:42)
No32751 (魔界の仮面弁士 さん) に返信
> 2009/02/13(Fri) 17:15:44 編集(投稿者)

早速の返信ありがとうございます。

> 開発機が WinXP + VS2008 + Excel 2003 PIA で、
> 実行環境が Vista + .NET 3.5 + Excel 2007 なのでしょうか。

そうです。
厳密に言うと、当初 XP + .NET 3.5 + Excel 2003 でしたが、
急遽先方から対応環境の拡張要請が来ました。

当初は、リリースを別バージョンでの提供で対応。を考えておりましたが、要望により1パッケージでの対応となりました


> 当方の 2007 環境では、手動保存の場合も、Excel 2007 には 95 互換形式の選択肢が
> 見当たらず、VBA からの保存においても xlExcel9795 による SaveAs はエラーとなりました。
>
> 同様に DefaultSaveFormat の動作も確認してみましたが、xlExcel9795 は使えませんでした。

リリース環境に依存されないように修正したいのですが、他の形式だと不都合があり
他のフォーマットの使用をためらっております。


> それは、「参照設定を変えれば解決する」事を確認済みであるという事でしょうか?

はい。
参照しているバージョン情報を取得し、内部で処理を分岐させれば…と考えておりました


> 問題の原因が参照設定の差異にあるのだとしたら、対処療法的には、
> 問題の発生する箇所だけ、レイトバインドで運用するという方法が使えるでしょう。
>
> しかし、参照設定を変えても解決しないのだとしたら、その対処法は意味を成さないので、
> 修正するだけ無駄になってしまいます。是非とも、事前にテスト環境を用意して確認してください。

> 実行時判定となると、レイトバインドにせざるを得ないと思います。
> Office 2007 環境でコンパイルした物と、2003 との物をそれぞれ用意し、
> インストール時点で選択インストールさせた方が安全かと。

選択インストールという方法、いただきます。

インストール環境から判断し動的に参照を生成するというのは現実的ではないのでしょうか?



引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -