C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.57442 の関連記事表示

<< 0 >>
■57442  VB.NETでエクセルを使ったADOデータベース処理
□投稿者/ ふく -(2011/02/27(Sun) 10:37:20)

    分類:[VB.NET/VB2005 以降] 

    こんにちは

    開発環境はVB.NET2005 WINXP Excel2007です。
    プログラムしているところで、行き詰ってしまいました。
    試行錯誤してみたのですがどうにもうまくいきません。
    どうか、よろしくお願いいたします。
    タイトルのようにVB.NETでエクセルを使ったADOデータベース処理を行っています。
    うまくいかなくなったのは読み取りパスワード付きのエクセルファイルを開いて、処理するようにしてからです。パスワードがかかっている場合、一度、同ファイルをopen(ブックを非表示で)しておいてからデータベース参照をしなくてはならないようです。
    しかしこの実行前にopenするエクセルデバックする前にエクセルが一つでも開いていると、そちらのエクセルのウィンドウ(グループ)にデータベースの参照がいってしまい、読み取り専用で2重に開かれてしまいます。何とか実行前に開いているエクセルのほうに処理が行ってしまわないようにしたいのですが。
    以下の例ようにコーディングしました。

    Dim xlApp As New Microsoft.Office.Interop.Excel.Application 'エクセルデータ用
    Dim xlBooks As Microsoft.Office.Interop.Excel.Workbooks
    Dim xlbook As Microsoft.Office.Interop.Excel.Workbook
    Dim Filename ,Sheetname As String
    Dim cnn As New System.Data.OleDb.OleDbConnection
    Dim cmm As New System.Data.OleDb.OleDbCommand
    Dim daa As New System.Data.OleDb.OleDbDataAdapter
    Dim dss As New DataSet

    xlBooks = xlApp.Workbooks
    xlbook = xlBooks.Open("c:\test.xls", , , , "1234")'事前にopenする
    FileName = System.IO.Path.Combine("c:\test.xls")
    'データベースに接続するための情報を設定
    cnn.ConnectionString = "provider=Microsoft.jet.OLEDB.4.0;Data source=" & FileName & ";Extended properties=""Excel 8.0;HDR=YES;IMEX=1"""
    'コネクションの設定
    cmm.Connection = cnn
    'Excelファイルのシート名を設定
    SheetName = "Sheet1"
    'データソースで実行するSQL文の設定
    cmm.CommandText = "select * from [" & SheetName & "$]"
    daa.SelectCommand = cmm
    daa = New System.Data.OleDb.OleDbDataAdapter(cmm)
    dss = New System.Data.DataSet
    'データを取得
    daa.Fill(dss)


    以上です。
    よろしくお願いいたします。
親記事 /過去ログ96より / 関連記事表示
削除チェック/

■57443  Re[1]: VB.NETでエクセルを使ったADOデータベース処理
□投稿者/ 魔界の仮面弁士 -(2011/02/27(Sun) 12:01:47)
    No57442 (ふく さん) に返信
    > VB.NETでエクセルを使ったADOデータベース処理を行っています。
    これは ADO ではなく、ADO.NET のコードなのでは?


    > パスワードがかかっている場合、一度、同ファイルをopen(ブックを非表示で)しておいてから
    > データベース参照をしなくてはならないようです。
    このあたりは JET I-ISAM の仕様ですね。そもそも、裏で開いておけば読み込めるというのも
    ある意味、裏技的な動作だったりはするのですが。


    > 何とか実行前に開いているエクセルのほうに処理が行ってしまわないようにしたいのですが。
    あまり有効な方法は思いつかないのですが:

    (案1) ROT 経由で、c:\test.xls を開いている Excel インスタンスを調べ、
     それらを事前に閉じてから操作する。
    http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?mode=allread&no=10322

    (案2) C:\test.xls を直接開くのではなく、一時フォルダーに別名でコピーし、
     コピーしたファイルを New Excel.Application() + JET プロバイダで読み込む。

    (案3) Microsoft.Jet.OLEDB.4.0 や Microsoft.ACE.OLEDB.12.0 での取り込みは諦めて、
     Excel オートメーションで Range オブジェクト経由にてデータを取り出すようにする。
記事No.57442 のレス /過去ログ96より / 関連記事表示
削除チェック/

■57444  Re[2]: VB.NETでエクセルを使ったADOデータベース処理
□投稿者/ ふく -(2011/02/27(Sun) 17:06:47)
    魔界の仮面弁士 さん、ありがとうございます。


    > これは ADO ではなく、ADO.NET のコードなのでは?
    そうです。すみません。

    > (案1) ROT 経由で、c:\test.xls を開いている Excel インスタンスを調べ、
    >  それらを事前に閉じてから操作する。
    > http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?mode=allread&no=10322
    私もこのやり方しかないと思い、最終手段としてこれを使おうかと思っていました。
    エクセルファイルを誰でも簡単に開けないようにPW等の処理をしておくことと、そのデータを使った作業を行いたいのです。エクセルを事前に閉じてしまうと、作業中のものを終了しなくてはならなくなり、少しアプリとしての扱いにくさが出てしまうのが課題です。

    > (案2) C:\test.xls を直接開くのではなく、一時フォルダに別名でコピーし、
    >  コピーしたファイルを New Excel.Application() + JET プロバイダで読み込む。
    これも試してみたい方法ですね。別にコピーする際にPWをはずすということができるのでしょうか。また頻繁にやり取りをした場合に処理時間がかかってしまうのかが心配です。

    > (案3) Microsoft.Jet.OLEDB.4.0 や Microsoft.ACE.OLEDB.12.0 での取り込みは諦めて、
    >  Excel オートメーションで Range オブジェクト経由にてデータを取り出すようにする。
    これは私には難しそうです。チャレンジしてみたいですが。

    ありがとうございました。今後ともよろしくお願いします。


記事No.57442 のレス /過去ログ96より / 関連記事表示
削除チェック/

■57445  Re[3]: VB.NETでエクセルを使ったADOデータベース処理
□投稿者/ 魔界の仮面弁士 -(2011/02/27(Sun) 18:17:45)
    No57444 (ふく さん) に返信
    問題はまだ解決していないようですが、本題とは関係ない所に反応しておきます。

    No57443
    >> (案2) C:\test.xls を直接開くのではなく、一時フォルダーに別名でコピーし、

    No57444
    >> (案2) C:\test.xls を直接開くのではなく、一時フォルタ゛に別名でコピーし、

    私の発言を引用するに当たり、何故か、「半角カナへの改変」 & 「長音記号の除去」を
    行われたようですが、ここでの半角カナの利用は禁じられています。次回利用時にはご注意ください。
    http://bbs.wankuma.com/index.cgi?mode=man

    また、folder の日本語表記は、「フォルダ」ではなく「フォルダー」が正しいとされています。
    http://www.microsoft.com/Language/ja-jp/StyleGuides.aspx
    http://www.microsoft.com/japan/presspass/detail.aspx?newsid=3491

    とはいえ私も、昔の癖で、長音記号を抜いてしまう事がたびたびあるのですけれどね。
    (今回も、Provider の末尾長音記号を忘れてしまいましたし)


    > 私もこのやり方しかないと思い、最終手段としてこれを使おうかと思っていました。
    であれば、質問時にその案を提示しておいてもらえるとありがたかったです。
記事No.57442 のレス /過去ログ96より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -