tagCANDY CGI VBレスキュー(花ちゃん) - MSFlexgridを使ってのCSVファイル読み書き色々(VB6.0) - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
MSFlexgridを使ってのCSVファイル読み書き色々(VB6.0)
元に戻る スレッド一覧へ 記事閲覧
このページ内の検索ができます。(AND 検索や OR 検索のような複数のキーワードによる検索はできません。)

MSFlexgridを使ってのCSVファイル読み書き色々(VB6.0) [No.163の個別表示]
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
日時: 2007/09/15 07:05
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[ファイル入出力][グリッド関係][]                                    *
* キーワード:CSV,MSHFlexgrid,,,,                                                 *
***********************************************************************************

元質問:MS(H)Flexgrid→CSVファイルへ出.. - さとり 2007/09/13-14:47 No.10187

MSFlexGrid関係の「テキストファイルを読込、表示、保管する(No.2)」を参考にし、
MS(H)FlexgridのデータをCSVファイルへ出力するプログラムを作成しております。
FlexGridのいくつかの列(任意選択)のColWidthを 0 にできるのですが、
0の列はCSV出力しないとやりたいのですが、どのように判定すればよろしいでしょうか?

-----------------------------------------------------------------------------------
Re: MS(H)Flexgrid→CSVファイル.. - 花ちゃん 2007/09/13-19:31 No.10190
-----------------------------------------------------------------------------------

Private Sub Command1_Click()
'   On Error Resume Next
   Dim i         As Long
   Dim j         As Long
   Dim intFileNo As Integer
   Dim TxtLine   As String
   intFileNo = FreeFile
   Open App.Path & "\Test.csv" For Output As #intFileNo
   With MSFlexGrid1
      For i = 0 To .Rows - 1
         TxtLine = ""
         For j = 0 To .Cols - 1
            '手動で列幅を設定した場合0に上手くならないので大きめに設定
            If .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
   MsgBox "保存しました"
End Sub

--------------------------------------------------------------------------
出力データには、"" が付加されません。
メンテ

Page: 1 |

MSFlexgridを使ってのCSVファイル読み書き色々(VB6.0)_1  (No.1の個別表示) [スレッド一覧へ]
日時: 2009/12/28 10:29
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[ファイル入出力][グリッド関係][]                                    *
* キーワード:CSV,MSHFlexgrid,,,,                                                 *
***********************************************************************************
-----------------------------------------------------------------------------------
Re: MS(H)Flexgrid→CSVファイル.. - 花ちゃん 2007/09/13-21:24 No.10192
-----------------------------------------------------------------------------------

> ダブルクォーテーション(")がないと、CSVをEXCELで開いた際に
> 数値型だとおかしく表示されるかな?と思っておりました・・・。

"88" としてもExcelで自動的に型を判断するので、数値になってしまいます。
http://hanatyan.sakura.ne.jp/vbhlp/Excel11.htm
http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=128&no=12

全て、"" として保存するなら下記で。

Private Sub Command1_Click()
'   On Error Resume Next
   Dim i         As Long
   Dim j         As Long
   Dim intFileNo As Integer
   Dim TxtLine   As String
   intFileNo = FreeFile
   Open App.Path & "\Test.csv" For Output As #intFileNo
   With MSFlexGrid1
      For i = 0 To .Rows - 1
         TxtLine = ""
         For j = 0 To .Cols - 1
            '手動で列幅を設定した場合0に上手くならないので大きめに設定
            If .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
   MsgBox "保存しました"
End Sub

---------------------------------------------------------------------------
全ての出力データに  ""(Chr$(34)) が付加されます。

メンテ
MSFlexgridを使ってのCSVファイル読み書き色々(VB6.0)_2  (No.2の個別表示) [スレッド一覧へ]
日時: 2009/12/28 10:30
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[ファイル入出力][グリッド関係][]                                    *
* キーワード:CSV,MSHFlexgrid,,,,                                                 *
***********************************************************************************

元質問:MS(H)Flexgrid→CSVファイルへ出.. - さとり 2007/09/13-14:47 No.10187

-----------------------------------------------------------------------------------
Write # ステートメントを使った方法 - 花ちゃん 2007/09/14-14:26 No.10194
-----------------------------------------------------------------------------------

ついでにWrite # ステートメントを使った方法を投稿しておきます。

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
   '保存する列数を事前に調べて置く
   For i = 0 To MSFlexGrid1.Cols - 1
      If MSFlexGrid1.ColWidth(j) > 30 Then
         SaveCols = SaveCols + 1
      End If
   Next i
  
   intFileNo = FreeFile
   Open "SaveTest.csv" For Output As #intFileNo
   With MSFlexGrid1
      For i = 0 To .Rows - 1
         n = 0
         For j = 0 To .Cols - 1
            If .ColWidth(j) > 30 Then
               CellsData = .TextMatrix(i, j)
               n = n + 1
               ' "" を付加する、しないはお好みで
               If i = 0 Or j = 1 Then
                  CellsData = CStr(CellsData)
               Else
                  CellsData = CSng(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
   MsgBox "保存しました"
End Sub
メンテ
MSFlexgridを使ってのCSVファイル読み書き色々(VB6.0)_3  (No.3の個別表示) [スレッド一覧へ]
日時: 2009/12/28 10:30
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[ファイル入出力][グリッド関係][]                                    *
* キーワード:CSV,MSHFlexgrid,,,,                                                 *
***********************************************************************************

-----------------------------------------------------------------------------------
Write # ステートメントを使った通常の保存方法 - 花ちゃん 2007/09/14
-----------------------------------------------------------------------------------

Write # ステートメントを使った全ての表示データを保存する方法を投稿しておきます。
1行分のデータを1度に書き込むような通常の方法と違って列数が多い場合の書き込み等に
適しているかも。

Private Sub Command1_Click()
'保存したデータ全てを、"" で囲まれています。
'   On Error Resume Next
   Dim i         As Long
   Dim j         As Long
   Dim intFileNo As Integer
  
   intFileNo = FreeFile
   '保存したファイルを確認し易いように拡張子を txt にして保存
   '(メモ帳で保存した状態が確認できるので、実使用時は、.csv で保存)
   Open "SaveTest.txt" For Output As #intFileNo
   With MSFlexGrid1
      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
   MsgBox "保存しました"
End Sub
メンテ
MSFlexGridでLine Input #を使ってのCSVファイルの読込_4(VB6.0)  (No.4の個別表示) [スレッド一覧へ]
日時: 2011/03/28 15:20
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[ファイル入出力][グリッド関係][]                                   *
* キーワード:CSV,MSHFlexgrid,,,,                                                 *
***********************************************************************************

-----------------------------------------------------------------------------------
Line Input # ステートメントを使ってのCSVファイルの読込表示 - 花ちゃん 2007/09/14
-----------------------------------------------------------------------------------
データに合せて固定列・固定行等の設定は変更して下さい。
あくまでも、CSV ファイルの表示例のサンプルなので、表示速度等に拘るなら他の方法を
使って下さい。

Private Sub Form_Load()
'-------------------------------------------------
   'コントロール類の初期設定
   Form1.Move 0, 0, 9000, 4000
   With MSFlexGrid1
      .Move 45, 45, 5500, 3400
      .FixedRows = 1
      .FixedCols = 0
      .Rows = 1
      .Cols = 0
      .AllowUserResizing = flexResizeBoth
      .RowHeightMin = 300
   End With
  
'-------------------------------------------------
   'CSV ファイルを読み込み MSFlexGrid に表示
   Dim intFileNo  As Integer   'ファイルNo
   Dim TextLine   As String
   Dim CellsData  As Variant
   Dim lngCount   As Long
   Dim i          As Long
   intFileNo = FreeFile
   'シーケンシャル入力モードで Test.csv をオープン
   'ファイルのPATHは別途設定して下さい。
   Open "Test.csv" For Input As #intFileNo
   Do Until EOF(intFileNo)             'EOF(intFileNo)が True になるまで実行
      Line Input #intFileNo, TextLine  '1行全体を変数に読み込む
      TextLine = Replace(TextLine, Chr$(34), "")   ' "" を取り除く
      CellsData = Split(TextLine, ",") 'カンマ区切りで列データを分割
      If MSFlexGrid1.Cols < UBound(CellsData) + 1 Then
         'データの列数に合せて、MSFlexGrid の列数を設定
         MSFlexGrid1.Cols = UBound(CellsData) + 1
      End If
      lngCount = lngCount + 1       '行数をカウント
      MSFlexGrid1.Rows = lngCount   '行数を追加
      For i = LBound(CellsData) To UBound(CellsData)
         'MSFlexGrid のセルにデータを書込み
         MSFlexGrid1.TextMatrix(lngCount - 1, i) = CellsData(i)
      Next i
   Loop
   Close #intFileNo
End Sub
メンテ

Page: 1 |

 投稿フォーム               スレッド一覧へ
題  名 スレッドをトップへソート
名  前
パスワード (記事メンテ時に使用)
投稿キー (投稿時 投稿キー を入力してください)
コメント

   クッキー保存   
スレッド一覧へ