- PR -

xmlスプレッドシート形式のファイルが開けない

投稿者投稿内容
まなか
常連さん
会議室デビュー日: 2008/04/17
投稿数: 37
投稿日時: 2009-03-02 09:29
以前、↓の質問をしましたが、回答がいただけませんでした。

xsj形式のワークシートを開きたい
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=48331&forum=7

この件は「Microsoft Excel97-Excel 2003 および5.0/95ブック(*.xls)」で
保存しなおしてファイルを取り込む、という対応をしました。

同じく、今回はxmlスプレッドシート形式のExcelファイルを開くことができません。

Excelファイルを開いて、DBにインポートする処理をしています。

ファイルの種類:XMLスプレッドシート2003(*.xml)で作成されたExcelファイルを指定すると以下のエラーが出ます。

サーバーによって例外が返されました。 (HRESULT からの例外: 0x80010105 (RPC_E_SERVERFAULT))
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

例外の詳細: System.Runtime.InteropServices.COMException: サーバーによって例外が返されました。 (HRESULT からの例外: 0x80010105 (RPC_E_SERVERFAULT))

ソース エラー:

xlBooks = xlApp.Workbooks
Try
xlBook = xlBooks.Open(importFile) ←ここが赤くなっています。

取り込むファイルの拡張子は「xls」なのですが、ファイルの種類が「xml」です。
一旦開いて「Microsoft Excel97-Excel 2003 および5.0/95ブック(*.xls)」で保存しなおしたファイルは正常に処理できます。

サーバーは2003Serverで、Excel2007です。
Excel2003の時はエラーになりませんでした。
ちなみに、Windows XPのクライアントマシンにIISを立てて同じようにExcel2007にした場合はエラーになりません。

今回はMicrosoft Excel 12.0 Object Libraryの参照設定を行ってみましたが、エラーになります。

同じ現象をご存じの方がいらっしゃれば教えてください。


[ メッセージ編集済み 編集者: まなか 編集日時 2009-03-02 09:32 ]
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-03-02 10:58
XMLスプレッド形式を扱ったことがありませんが
引用:

取り込むファイルの拡張子は「xls」なのですが、ファイルの種類が「xml」です


という拡張子と中身が不一致な状態では開けないのでは?
XPの場合は拡張子xlsで開けてるんですか?



何で開発しているのか、アプリケーションの種類なども明記したほうがいいと思います。

# いずれかのバージョンのVB.NETでWebアプリかWebサービスみたいに見受けられますが。

[ メッセージ編集済み 編集者: デューン 編集日時 2009-03-02 11:03 ]
まなか
常連さん
会議室デビュー日: 2008/04/17
投稿数: 37
投稿日時: 2009-03-02 12:10
デューンさんありがとうございます。

Microsoft Visual Web Developer 2005
ASP.NETでWebアプリです。

拡張子と中身が不一致の警告メッセージが出ます。
 「開こうとしているファイル 'name.ext' の形式は、ファイル拡張子が示す形式と
  異なります。このファイルを開く前に、ファイルが破損していないこと、信頼でき
  る発行元からのファイルであることを確認してください。ファイルを今すぐ開き
  ますか?」

そこで、拡張子を「*.xml」に変更し、Openxmlメソッドに変えてみましたが、
同様のエラーでした。
XPの場合は、警告メッセージが表示されることなく開くことができます。
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-03-02 13:03
office2003が今使えないので、検証できませんが

引用:

拡張子と中身が不一致の警告メッセージが出ます。


これは、サーバー側で拡張子xlsでOpenメソッドを使用した場合と解釈して話を続けます。


OpenXmlメソッドはXMLデータ形式を開くメソッドの様ですが、
拡張子xml+Openメソッドではエラーですか?

DisplayAlerts=falseにした場合は?


まなか
常連さん
会議室デビュー日: 2008/04/17
投稿数: 37
投稿日時: 2009-03-02 13:43
デューンさん、ありがとうございます。

拡張子xml+Openメソッドでも同じエラーでした。
DisplayAlerts=falseにしています。

コードは遅延バインディングですが、事前バインディングにしても同様です。

コード:

Try
oExcel = CreateObject("Excel.Application")

oExcel.DisplayAlerts = False
Dim oBooks As Object = oExcel.Workbooks

Try
Dim oBook As Object = oBooks.Open(sXlsFile)

… … … …



[ メッセージ編集済み 編集者: まなか 編集日時 2009-03-02 13:43 ]
まなか
常連さん
会議室デビュー日: 2008/04/17
投稿数: 37
投稿日時: 2009-03-02 15:28
出てくるエラーが少し変わりました。
やはりxlsファイル形式の場合はエラーになりません。
エラーを指している行の処理は
Dim oBook As Object = oBooks.Open(sXlsFile)
のところのままです。

--------------------------------------------------
System.Runtime.InteropServices.COMException (0x800A03EC): Workbooks クラスの Open プロパティを取得できません。
場所 Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet(Object o, Type objType, String name, Object[] args, String[] paramnames, Boolean[] CopyBack)
場所 Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack)

[ メッセージ編集済み 編集者: まなか 編集日時 2009-03-03 13:36 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2009-03-02 21:01
スタック トレースを見る限り、遅延バインディングをやめれば一歩前進しそうなのですが。

引用:

まなかさんの書き込み (2009-03-02 15:28) より:

Workbooks クラスの Open プロパティを取得できません。


それにしてもプロパティ... って。(^-^;)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
まなか
常連さん
会議室デビュー日: 2008/04/17
投稿数: 37
投稿日時: 2009-03-03 09:13
じゃんぬねっとさん

遅延バインディングでなく、事前バインディングでもエラーになります。

System.Runtime.InteropServices.COMException (0x800A03EC): HRESULT からの例外: 0x800A03EC
場所 Microsoft.Office.Interop.Excel.Workbooks.Open(String Filename, Object UpdateLinks, Object ReadOnly, Object Format, Object Password, Object WriteResPassword, Object IgnoreReadOnlyRecommended, Object Origin, Object Delimiter, Object Editable, Object Notify, Object Converter, Object AddToMru, Object Local, Object CorruptLoad)

エラーの場所は
  Dim oBook As Excel.Workbook = oBooks.Open(sXlsFile)
です。
コード:

Dim oExcel As Excel.Application = Nothing
Try
oExcel = New Excel.Application

oExcel.DisplayAlerts = False
Dim oBooks As Excel.Workbooks = oExcel.Workbooks

Try
Dim oBook As Excel.Workbook = oBooks.Open(sXlsFile)



[ メッセージ編集済み 編集者: まなか 編集日時 2009-03-03 13:36 ]

スキルアップ/キャリアアップ(JOB@IT)