[リストへもどる]
一括表示

投稿時間:2004/07/22(Thu) 15:18
投稿者名:hiro
Eメール:
URL :
タイトル:
DataGrid上でのエクセルファイル編集
初めて投稿させて頂きます。
VB6で既存のエクセルファイルを読み込み、データベース化しようと思っているのですが、
なかなか思うようにいかず行き詰まっています。

自分がやった状況は、ADOを利用してDataGridとエクセルファイルを接続して、DataGrid上に
エクセルファイルのセル内容を表示させるところまでは出来たのですが、データの書き換え、
削除等の編集ができません・・・

DataGridプロパティのAllowAddNew、AllowArrows、AllowDelete、AllowUpdateは全てTrueに
設定してあります。

以下ソースの一部です。
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim mySQL As String
    
    cn.ConnectionString = "provider=MSDASQL;" & "DSN=cnExcel"
    cn.Open
    
    mySQL = "select * from [取引先$]"
    rs.Open mySQL, cn, adOpenStatic, adLockOptimistic
    Set DataGrid1.DataSource = rs

    
環境はwin2000、VB6(SP5)、エクセルファイルは97を使用しています。
心当たりがある方いましたら、何卒宜しくお願いします。

投稿時間:2004/07/22(Thu) 15:53
投稿者名:dai
Eメール:dee_bassist@hotmail.com
URL :http://homepage2.nifty.com/Dee/
タイトル:
Re: DataGrid上でのエクセルファイル編集

> VB6で既存のエクセルファイルを読み込み、データベース化しようと思っているのですが、

ExcelをADOで直接編集する場合、いくつかの制限事項(後述URL)があります。
Excel上のデータ編集はExcelのマクロで行い、
MDBファイル等のデータベースへ取り込んでからADOでデータ編集されたほうが、何かと便利です。
  
>     cn.ConnectionString = "provider=MSDASQL;" & "DSN=cnExcel"

Excel への ODBC 接続はデフォルトでは読み取り専用になります。
また、一度にレコード単位での削除ができない等の制限があります。

[HOWTO] VB または VBA から ADO を Excel データで使用する
http://support.microsoft.com/default.aspx?scid=kb;JA;257819
を参考にしてみてください。

投稿時間:2004/07/22(Thu) 16:09
投稿者名:りっとっと
Eメール:
URL :
タイトル:
Re^2: DataGrid上でのエクセルファイル編集
    Set cn = New ADODB.Connection
    cn.CursorLocation = adUseClient
    cn.Open "Provider=MSDASQL;Driver={Microsoft Excel Driver (*.xls)};DBQ=" & xlFilePath & ";ReadOnly=False;"
    Set rs = New ADODB.Recordset
    
    rs.Open "[Sheet1$]", cn, adOpenStatic, adLockOptimistic
    rs.AddNew
    rs.Fields("フィールド1").Value = 123
    rs.Fields("フィールド2").Value = "テスト"
    rs.Fields("フィールド3").Value = "参照"
    rs.Update

とりあえずこんな感じで編集できますね。接続文字列にReadOnly=Falseをつければ編集可能となります。

投稿時間:2004/07/23(Fri) 13:37
投稿者名:hiro
Eメール:
URL :
タイトル:
Re^3: DataGrid上でのエクセルファイル編集
daiさん、りっとっとさんレスありがとうございます。

>>daiさん
>MDBファイル等のデータベースへ取り込んでからADOでデータ編集されたほうが、何かと便利です。
確かにMDBファイルを扱った方が問題なく扱いやすいかと思います。
しかし、何故なのかは良く分からないのですが、
「エクセルファイルをデータベース化したい」
という風に仕事上で言われていますので、今回はそれに従って作ろうかと・・・
今のままでは制限事項等が問題となりそうですので、
「DataGrid+ADO」以外の方法も視野に入れて
データベース化の方法を考え直してみたいと思います。

>>りっとっとさん
>接続文字列にReadOnly=Falseをつければ編集可能となります。
大変参考になりました。
ReadOnly=Falseを指定してやることにより、編集できるようにはなったのですが、
DataGrid上での編集(エクセルのセルを書き換えるような)
は相変わらずできない状況です・・・
別にテキストボックスを設けて、エクセルファイルと連結することにより
テキストボックス上では編集可能となりました。
半歩前進という感じでしょうか・・


また何かあったら宜しくお願いします。

投稿時間:2004/07/23(Fri) 14:30
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^4: DataGrid上でのエクセルファイル編集
>> MDBファイル等のデータベースへ取り込んでからADOでデータ編集されたほうが、何かと便利です。
> 確かにMDBファイルを扱った方が問題なく扱いやすいかと思います。
> 今のままでは制限事項等が問題となりそうですので、

結構制限がありますよ。仕様を確認してみたのですが、

・ワークシート(Excel 3.0, Excel 4.0)形式がサポートされている。
・ワークブック(Excel 5.0, Excel 7.0, Excel 8.0)形式もサポートされている。
・インデックスを作成できないので、データ量が多いとパフォーマンスが落ちる。
・パスワード付きファイルを開く事はできない。
・ワークシートやワークブックから、行を削除する事はできない。
・ワークシートの個々のセルからデータを消去する事はできるが、式を含めたセルの消去や変更はできない。

のような制限があります。

[Working with Microsoft Excel Worksheets and Workbooks]
| The Microsoft Excel product line includes the following
| single-sheet worksheet and multiple-sheet workbook versions
| supported by the Microsoft Jet IISAM driver for Microsoft Excel:
| Microsoft Excel 3.0 and 4.0 (single-sheet) and Microsoft Excel
| 5.0, 7.0, and 8.0 (multiple-sheet workbooks). There are a few
| operations that you cannot perform on Microsoft Excel worksheets
| or workbooks through the Microsoft Excel IISAM driver:
| * You cannot delete rows from Microsoft Excel worksheets or
|   workbooks.
| * You can clear data from individual cells in a worksheet, but
|   you cannot modify or clear cells that contain formulas.
| * You cannot create indexes on Microsoft Excel worksheets or
|   workbooks.
| * You cannot read encrypted data through the Microsoft Excel
|   IISAM driver. The PWD argument in the connection string cannot
|   be used to open an encrypted worksheet or workbook, even if
|   you supply the correct password. You must decrypt all
|   Microsoft Excel worksheets or workbooks through the Microsoft
|   Excel user interface if you plan to link or open them in your
|   Microsoft Jet database.


それと、データ型の自動判定に失敗する事も考えて、TypeGuessRows も
設定しておいた方が良いでしょう。
http://www.users.gr.jp/ml/archive/viewer.aspx?name=Access&no=12119


個人的には、Excelファイルをデータベースとして開くのではなく、
VBからMicrosoft Excel をオートメーション操作する(もしくは、
最初からExcel VBAで組む)方が、トラブルが少ないかと思いますよ。