- 2022年4月28日
NetOfficeを利用して、Excel操作をしたかったのですが、なぜかBookが開けない罠にハマったので備忘録です。
エラー内容
出力されたエラー内容は以下のような感じです。
ファイル ‘C:\Users\XXXXX\AppData\Local\Temp\XXXXX.xlsx’ にアクセスできません。次のいずれかの理由が考えられます。
• ファイル名またはパスが存在しません。
• ファイルが他のプログラムによって使用されています。
• 保存しようとしているブックと同じ名前のブックが現在開かれています。
状況を確認
エラー内容に書かれている可能性を一個ずつ確認してみます。
ファイル名またはパスが存在しません。
そもそも開こうとしているBookのパスはあっているのか?
確認してみます。
var path = "C:\\Users\\XXXXX\\AppData\\Local\\Temp\\TEST.xlsx"; var exists = System.IO.File.Exists(path); var file = System.IO.File.Open(path, FileMode.Open);
exists
では true
が返ってきますし、file
もちゃんと取得できています。
実際に path
の場所へファイルを確認しに行きましたが、確かに当該ファイルは存在していました。
ファイルが他のプログラムによって使用されています。
そんなハズはないと思いつつも、一応、他のプログラムが使用している可能性を調査します。
リソースマネージャーを開いて、当該ファイルパスで検索。
……う~んやっぱりないですね。
保存しようとしているブックと同じ名前のブックが現在開かれています。
う~ん……いろいろと確認してみましたが、特に開かれている様子はありません。
以前ファイルを開いた際に、ロックファイルが残ってい閉まっていた、なんて様子もありません。
他の原因を模索してみる
何が原因なのか、他の可能性を調べてみます。
ファイルが壊れている可能性
もしかして、そもそもファイル壊れてたりして……?
なんて思いましたが、問題なく開けました。
フォルダへのアクセス権がない可能性
そもそも当該ファイルを保存しているフォルダへのアクセス権がない可能性を確認。
クライアント アプリケーションが Web サービスを呼び出す際に System.IO.FileNotFoundException エラーが表示される
こちらのページに従ってフォルダに権限を付与して、再度確認。
……しましたが、ダメでした。。。かなしみ。
結局
新しくブック作ってみたり、ファイルの場所を変えてみたり、なんだかんだ色々してみたんですが、どれもこれも解決せず。
最終的に、こちらのサイトに流れ着き……
Intermittent File Not Found Exception retrieving COM class using NetOffice to create Excel File (C#)
Why does systemprofile need Desktop folder to open excel file
C:\Windows\SysWOW64\config\systemprofile\
に Desktop
という名前のフォルダを作れということらしい……
この対応でなんとか無事、ファイルが開けるようになりました……
でも根本原因は分からずで、なんともモヤモヤの残る結果に……
もし原因が分かったらまた追記するかもしれません。。。
蛇足
ちなみに今回使用したのは NetOfficeFW.Excel
でした。
別プロジェクトでは FW
がついていないライブラリを使用していましたが、何やら不具合があるご様子。
詳しくはこちら