こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ADOで別ユーザが開いているエクセルを読み込む方法

VisualBasic.NETからADOをEXCELデータで使用して、ブック内のシート内容を読み出して集計するソフトを作っています。
題名の通りなのですが、既に別ユーザが開いているEXCELブックの内容をADOを使って読み出すにはどうすれば良いでしょうか?
開かれていない状態のEXCELなら問題なく読めるのですが、既に別ユーザに開かれているEXCELを読もうとするとエラーとなってしまいます。

以下、ソースコードの一部です。
コメントアウト箇所はいろいろ試した残骸です。
fsに開こうとしているEXCELパスが入ってます。

rsExcel = CreateObject("ADODB.Recordset")
cnExcel = CreateObject("ADODB.Connection")

'cnExcel.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
' "DBQ=""" & fs(ii) & """;"

'With cnExcel
' .Provider = "MSDASQL"
' .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
' "DBQ=" & fs(ii) & "; ReadOnly=True;"
' .Open()
'End With

'System.IO.File.Open(fs(ii), IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)

With cnExcel
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & fs(ii) & ";" & _
"Extended Properties=Excel 8.0;"
.Open()
End With


cnExcel.Mode = ADODB.ConnectModeEnum.adModeRead

cnExcel.Open()

sSQL = "SELECT * FROM [" & SheetName & "$]"

rsExcel.Open(sSQL, cnExcel, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly)


どの方法を試してもOPENしようとする所でエラーとなります。
エラーメッセージ「ファイル '' を開くことができませんでした。ほかのユーザーが排他的に開いているか、データを読み取る権限がありません。」
既に誰かが使用中の.xlsをダブルクリックしてEXCELで開けば、読み取り専用ですが開けて内容が読める訳ですが、それをADOで行う事は出来ないんでしょうか?
COMコンポーネントのEXCELライブラリのWORKBOOKS.OPENで読み取り専用で事前に開いた後にADOでOPENすれば読めたのですが、ソフトをインストールする予定のPCはEXCEL未インストール状態なのでCOMを使う事は出来ない状況です。

何か良い手段は御座いませんでしょうか?
詳しい方が居られましたらご教示頂きたく思います。

投稿日時 - 2013-05-17 17:40:18

QNo.8092319

困ってます

質問者が選んだベストアンサー

対象の Excel ファイルを一時的に別名 (必要であれば別の場所に) コピーして、コピーしたものを開くようにしたらどうだろうか。
これなら 「対象のファイルが存在するか」 というチェックを事前に行うことも可能なので、誰かが対象のファイルを間違って消してしまった場合にもプログラムでエラーを検知できる。

投稿日時 - 2013-05-18 07:29:25

補足

ご回答ありがとうございます。
なるほど、その手は思いつきませんでした。
OPEN時に異常をキャッチしたらコピーして、そのコピーからやり直す方法を試してみます。
ただ、本当ならそのような事せずにADOで読んでしまいたい所ではあります...
とにかく、”出来ない”状態を”出来るに”まずは持って行く事を優先したいと思います。

投稿日時 - 2013-05-19 23:29:33

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問