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を使う事は出来ない状況です。 何か良い手段は御座いませんでしょうか? 詳しい方が居られましたらご教示頂きたく思います。
↧