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