プロが教える店舗&オフィスのセキュリティ対策術

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を使う事は出来ない状況です。

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

A 回答 (1件)

対象の Excel ファイルを一時的に別名 (必要であれば別の場所に) コピーして、コピーしたものを開くようにしたらどうだろうか。


これなら 「対象のファイルが存在するか」 というチェックを事前に行うことも可能なので、誰かが対象のファイルを間違って消してしまった場合にもプログラムでエラーを検知できる。

この回答への補足

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

補足日時:2013/05/19 23:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す