人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Windows8・VB.NET(Visual Basic 2010)とOffice2013がインストールされているPCで質問です。この環境でサムネイル含むListViewの内容をExcelオートメーションクライアント/Excel.ShapesのAddPicture等を用いて書き出すプログラムを作ったのですが、完成したプログラムをOffice2007/2010がインストールされている別のPCでも実行できるようにする方法を教えてください。
作成したプログラムは、最初に参照でMicrosoft Excel 15.0 Object LibraryとかMicrosoft Office 15.0 Object Libraryを指定したせいか、別のPC(旧Officeがインストールされている)で実行するとfilenotexceptionが発生して動作しないのが現状です。
現在のコードは破棄してEPPlus( http://epplus.codeplex.com/ )やNPOI( http://npoi.codeplex.com/ )で動作するよう組みなおさないといけないのか迷っています。
よろしくお願いいたします。

●質問者: くじぇ
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● cx20
●500ポイント ベストアンサー

オートメーションの事前バインディングの制約により、
新しいバージョンのOfficeが入った環境でビルドした場合、
古いバージョンのOfficeが入った環境で動作させることは出来ません。

対応案としては、

の2通りかと思います。

■ 全ては時の中に… : 【VB.NET】Officeのバージョンに極力依存しないコードの作成
http://blog.livedoor.jp/akf0/archives/51300168.html
■ VB2005 Excel操作 (遅延バインディングを使う方法): T_Nary ブログ
http://nary.cocolog-nifty.com/blog/2009/11/vb2005-excel-2c.html

以下は参考情報です。

■ Visual Basic .NET による Office オートメーション サーバーでのバインディング
http://support.microsoft.com/kb/304661/ja


くじぇさんのコメント
cx20さんありがとうございます。 遅延バインディング上でExcel.ShapesのAddPictureを用いる方法がわからず困っています。 前のコードのままでは「エラー1 型 'Microsoft.Office.Core.MsoTriState' を含むアセンブリ 'office, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' への参照が必要です。参照をプロジェクトに追加してください。」と同部分あたりでエラーが発生します。 何を参照に加えたら(もしくはコードを書き換えたら)古いOfficeでも対応できるようになるのか、助言がありましたらよろしくお願いします。

cx20さんのコメント
遅延バインディングの場合は、Excelの参照設定を解除して、自前で定数宣言をする必要があります。 MsoTriState であれば >> ■ MsoTriState 列挙 (Office) http://msdn.microsoft.com/ja-jp/library/office/ff860737.aspx << |*名前|*値|*説明| |msoFalse|0|False| |msoTrue|-1|True| を定義します。 以下、遅延バインディングのサンプルです。 >|vb| Public Class Form1 Public Enum MsoTriState msoFalse = 0 msoTrue = -1 End Enum Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim excel = CreateObject("Excel.Application") excel.Visible = True Dim book = excel.WorkBooks.Add Dim sheet = book.ActiveSheet Dim strFileName = "C:\home\edu\vs2010\vb\ExcelAutomation\xyz.png" sheet.Shapes.AddPicture(strFileName, MsoTriState.msoFalse, MsoTriState.msoTrue, 0, 0, 100, 100) End Sub End Class ||<

くじぇさんのコメント
cx20さん、サンプルコードまで頂きありがとうございます。 ただMsoTriState.msoFalseまわりをTrue等に置き換えるのはすでに行ったのですが、私の環境ではAddPicture自身が「'Microsoft.Office.Core.MsoTriState' を含むアセンブリ…」エラーの対象になっているので悩んでいます。 同様に .ScaleHeight/.ScaleWidthもTrue/Falseに置き換えたのですが、同命令自体もエラー対象と扱われており、頭を抱えています。

cx20さんのコメント
エラーが出るのは、やはり、参照設定が残っている為と思われます。 以下の何れかのツールを用いて「Microsoft.Office.Interop.Excel」が設定されていないことを確認してみてください。 設定されている場合、参照設定がまだ残っていると思われます。 ・ildasm(http://msdn.microsoft.com/ja-jp/library/f7dy01k1.aspx) ・ILSpy(http://ilspy.net/)

くじぇさんのコメント
cx20さん、根気強く付き合ってくださりありがとうございました。 自分はと言いますと、申し訳ないのですが心が折れてしまったので、結局EPPlusで組みなおしました。 Excel2003フォーマットに対応していないのは残念ですが、Excelオートメーションクライアントと比較して、きちんと計測はしていませんけど数倍処理が早い印象でビックリしました。 また別の機会がありましたら、よろしくお願いいたします。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ