6.MSFlexGrid/MSHFlexGrid の表示データをファイルに保存方法色々 |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Option :[Option Explicit] 参照設定: 使用 API: その他 :プロジェクト→コンポーネント→コントロールで Microsoft FlexGrid Control 6.0(SP6) 又は、 :Microsoft Hierarchical FlexGridにチェックを入れ、表示されたコントロールをフォームに貼り付けて下さい。 :尚、当サイトで掲載している MSFlexGrid / MSFlexGrid 関係のサンプルは、上記と同様とし、今後は省略します。 |
1.Write # ステートメントでの保存(データ全てを、"" で囲う) |
保存したデータ全てを、"" で囲まれています。 エクセルに表示しても数字や日付データが問題なく表示される Write # ステートメント Write # ステートメントを使用して書き込んだデータは、Input # ステートメントで読み込みます。 Private Sub Command1_Click() ' On Error Resume Next Dim i As Long Dim j As Long Dim intFileNo As Integer intFileNo = FreeFile Open "SaveTest1.csv" For Output As #intFileNo With MSHFlexGrid1 For i = 0 To .Rows - 1 For j = 0 To .Cols - 2 Write #intFileNo, .TextMatrix(i, j), 'セルデータが続く場合 Next j Write #intFileNo, .TextMatrix(i, .Cols - 1) '行末のデータのみ Next i End With Close #intFileNo End Sub |
2.Write # で列幅 0 を除いての保存(データ全てを、"" で囲う) |
Write # ステートメント Write # ステートメントを使用して書き込んだデータは、Input # ステートメントで読み込みます。 Private Sub Command2_Click() ' On Error Resume Next Dim i As Long Dim j As Long Dim intFileNo As Integer Dim CellsData As Variant Dim n As Integer Dim SaveCols As Integer '保存する列数を事前に調べて置く With MSHFlexGrid1 For i = 0 To .Cols - 1 If .ColWidth(i) = -1 Or .ColWidth(i) > 30 Then SaveCols = SaveCols + 1 End If Next i End With intFileNo = FreeFile '保存したファイルを確認しやすいように拡張子を txt にして保存 '(メモ帳で保存した状態が確認できるので、実使用時は、.csv で保存) Open "SaveTest2.csv" For Output As #intFileNo With MSHFlexGrid1 For i = 0 To .Rows - 1 n = 0 For j = 0 To .Cols - 1 If .ColWidth(j) = -1 Or .ColWidth(j) > 30 Then CellsData = .TextMatrix(i, j) n = n + 1 ' "" を付加する、しないはお好みで If i = 0 Or j = 1 Then CellsData = CellsData Else CellsData = CellsData End If If n = SaveCols Then Write #intFileNo, CellsData '行末のデータのみ Else Write #intFileNo, CellsData, 'セルデータが続く場合 End If End If Next j Next i End With Close #intFileNo End Sub |
3.Print # ステートメント で列幅 0 を除いての保存(データ全てを、"" で囲わない) |
Print # ステートメント 通常、Print # ステートメントを使用して書き込んだデータは、Line Input # ステートメントまたは Input 関数を使用して読み込みます。 保存したデータは、"" で囲まれていません。 Private Sub Command3_Click() ' On Error Resume Next Dim i As Long Dim j As Long Dim intFileNo As Integer Dim TxtLine As String intFileNo = FreeFile Open "SaveTest3.csv" For Output As #intFileNo With MSHFlexGrid1 For i = 0 To .Rows - 1 TxtLine = "" For j = 0 To .Cols - 1 '手動で列幅を設定した場合0に上手くならないので大きめに設定 If .ColWidth(j) = -1 Or .ColWidth(j) > 30 Then TxtLine = TxtLine & .TextMatrix(i, j) & "," End If Next j If Right$(TxtLine, 1) = "," Then TxtLine = Left$(TxtLine, Len(TxtLine) - 1) Print #intFileNo, TxtLine End If Next i End With Close #intFileNo End Sub |
4.Print # ステートメント で列幅 0 を除いての保存(データ全てを、"" で囲う) |
Print # ステートメント 通常、Print # ステートメントを使用して書き込んだデータは、Line Input # ステートメントまたは Input 関数を使用して読み込みます。 保存したデータ全てを、"" で囲む。 Private Sub Command4_Click() ' On Error Resume Next Dim i As Long Dim j As Long Dim intFileNo As Integer Dim TxtLine As String intFileNo = FreeFile '保存したファイルを確認しやすいように拡張子を txt にして保存 '(メモ帳で保存した状態が確認できるので、実使用時は、.csv で保存) Open "SaveTest4.txt" For Output As #intFileNo With MSHFlexGrid1 For i = 0 To .Rows - 1 TxtLine = "" For j = 0 To .Cols - 1 '手動で列幅を設定した場合0に上手くならないので大きめに設定 If .ColWidth(j) = -1 Or .ColWidth(j) > 30 Then TxtLine = TxtLine & Chr$(34) & CStr(.TextMatrix(i, j)) & Chr$(34) & "," End If Next j If Right$(TxtLine, 1) = "," Then TxtLine = Left$(TxtLine, Len(TxtLine) - 1) Print #intFileNo, TxtLine End If Next i End With Close #intFileNo End Sub |
5. |
6. |
7.保存処理速度比較及び保存処理プログラム使用上の留意事項 |
データ件数1万件での保存処理速度比較 1.での方法 0.28 秒 2.での方法 0.45 秒 3.での方法 0.39 秒 4.での方法 0.49 秒 保存した、CSV ファイルをエクセルで読み込んだ場合、数字が数値に変換される等で困る場合は、拡張子を TXT にして保存し、エクセルで読み込み時に区切りをカンマ(,)で設定し、必要個所の型を指定してから読み込むようにして下さい。 |
8. |
9. |
10. |
11. |
12. |
検索キーワード及びサンプルコードの別名(機能名) |
フレキシブルグリッド (MSFlexGrid) コントロール MSFlexGrid MSHFlexGrid の表示データを CSV ファイルに保存方法色々
ダブルクォーテーションで囲う 階層フレキシブルグリッド (MSHFlexGrid) コントロール ADO ActiveX Data Objects Microsoft Hierarchical FlexGrid MSHFlexGrid コントロール スキーマファイル Microsoft OLE DB Provider for Microsoft Jet ダブルクォーテーション囲いのCSVファイルで保存 |