ExcelファイルをMSFlexGridに表示
                                                         玄関へお回り下さい。
Excel 用ファイルをMSFlexGridに表示する(DAOを利用)      (234)
   Option Explicit   'SampleNo=234 WindowsXP VB6.0(SP5) 2002.12.28

Private Sub Command1_Click()
  MSFlexGrid1.Visible = False
  '参照設定でMicrosoft DAO 3.6 Object Library にチェックを
  '入れておいて下さい。
  'フォームにMSFlexGridコントロールとデータコントロールを貼り付け
  'デザイン時に下記プロパティをセットしておいて下さい
  'MSFlexGrid1.DataSource = Data1
  'Data1.Visible = False

  Dim DB    As DAO.Database
  Dim RS    As DAO.Recordset
  Dim FileName As String
  '読込用のExcelファイル(パスを間違えないように)
  FileName = App.Path & "\test.xls"
  'ファイルをオープン(HDR=YES で1行目を読込まない。下記参照)
  Set DB = OpenDatabase(FileName, False, False, _
                    "Excel 8.0;HDR=NO;IMEX=1")

  'テーブルの内容を格納(Sheet1 = Excelのシート名)
  Set RS = DB.OpenRecordset("Sheet1$", dbOpenTable)
  'MSFlexGridと連結
  Set Data1.Recordset = RS
  Data1.Refresh
  RS.Close
  DB.Close
  Set DB = Nothing
  Set RS = Nothing

  '参考! 下記の部分の表示は 0.05秒位
  Dim i As Long
  With MSFlexGrid1
    For i = 1 To .Rows - 1
      .TextMatrix(i, 0) = i
    Next i
  End With

  MSFlexGrid1.Visible = True
End Sub
 
私のマシン(WinXP AMD Duron 950MHz 256MB)で5000行の8列のファイルの読込表示に
MSFlexGrid を非表示で 1.7秒 表示状態で 3.1秒 と結構早く読み込めます。

因みに同じファイルを CSV形式でシーケンシャルアクセスモードでファイルを開くと
非表示状態でも 8.0秒かかります。

そのCSVファイルをDAOを使って読み込み表示すると4秒で表示できました。

尚、、コード中の "Excel 8.0;HDR=NO;") Excel 8.0 はお使いのExcelのバージョンとは関
係ありません。特にExcelが導入されていない環境でも動作するはずです。

    
但し、読み込むデータに少し、制限があります。
デフォルトでは8行目までのデータで多い方のデータ型で設定します。
オプション機能の IMEX=1; を追加 "Excel 8.0;HDR=YES;IMEX=1;" すれば8行目までのデータ
が同一カラム(列)内に混在している場合 テキスト型として扱います。
従って、そのような可能性があるカラムには1行目に文字列を入力しておくとか、項目名を必要な
データ型で作成するとか、項目を読み込まないとか、レジストリでデフォルトの8行の設定を変更
する等で対処して下さい。
詳しくは掲示板のNo.2389 No.2395 の dai さんの投稿を見て下さい。

又、DAO(データアクセスオブジェクト)を使ってExcelデータを読み込みテキストボックスに表示 も
参考にして下さい。

※最初の行にヘッダーが含まれない場合は、接続文字列の拡張プロパティに HDR=NO と指定します。接続文字列に HDR=NO と指定すると、Jet OLE DB プロバイダーによってフィールドに自動的に名前が付けられます (最初のフィールドは F1、2 番目のフィールドは F2 など)。 これにより通常のExcelファイルの場合1行目からデータとして扱われるので画面に表示されます。逆にHDR=YESの場合、通常のExcelファイルの場合1行目がヘッダーとして扱われるので、2行目のデータからしか表示されない。





2003/01/21