• 締切済み

VB.NET初心者です。ファイルの入出力について困っています

初心者です。複数のExcelファイルを読み込んで、編集してテキストファイルに出力したいのですが、 1ファイル読み込みにつき、1行出力したいのですが、取得した列の数分出力してしまい困って います。どなたか教えてください。よろしくお願いします。 一部略 'フォルダ内のファイルの数だけループさせる For i = 0 To int_fs_CNT - 1 Dim stFileName As String = System.IO.Path.GetFileName(fs(i)) ec_Book = ec_appli.Workbooks.Open(fs(i)) ec_appli.Visible = False Dim xlSheets As Excel.Sheets = ec_Book.Worksheets Dim ec_Sheet As Excel.Worksheet = CType(xlSheets.Item(1), Excel.Worksheet) 'データ取得 'ファイル名一部(一意) rng1 = CType(ec_Sheet.Cells(2, 1), Excel.Range) sCellVal1 = CStr(rng1.Value) If stFileName.StartsWith("Private_info") Then If stFileName.Contains(sCellVal1) Then 'テーブル名取得(1ファイル内で1セル取得) rng2 = CType(ec_Sheet.Cells(4, 1), Excel.Range) sCellVal2 = CStr(rng2.Value) & "," '列名など取ってくる Dim celCNT As Integer For celCNT = 8 To 57 '1ファイル読み込み確認用フラグ i_flag = 0 '列名(1ファイル内で複数のセル範囲取得) rng3 = CType(ec_Sheet.Cells(celCNT, 1), Excel.Range) '列名が空白になったらループをぬける If CStr(rng3.Value) = "" Then Exit For End If sCellVal3 = CStr(rng3.Value) & "," '-------------出力処理--------------- Dim sw As StreamWriter sw = New StreamWriter("C:\sample_CTB\table_sample\TEST.txt", True, System.Text.Encoding.GetEncoding(932)) '読み込み終了フラグ i_flag = 1 'フラグが1のとき書き込み開始 If i_flag = 1 Then '配列を使おうと考えたのですが、取得した列の数(1ファイル分)がうまく取れません 'lengthをしていすると、自分では10列とれたらlength = 10 ?(vbは0からじゃない?)となる と考えていたのですが、length = 2となっており、出力すると10行分出力されてしまいます。 Dim stArrayData1 As String() = sCellVal1.Split(","c) 'EXCELファイル名 Dim stArrayData2 As String() = sCellVal2.Split(","c) 'テーブル名(1データ) Dim stArrayData3 As String() = sCellVal3.Split(","c) '列名(複数取得:数はファイルによって違う ' ' '列の数分だけ列名を@COL1..2.3...とを増やしたいのですが、どうしたらよいでしょうか? '/////////// 'SQL文作成 Dim sqlX As String = "SELECT " & "@COL1" & "," & "@COL2" & "FROM" & "@TBNAME" '↑のようなselect文を作成して、配列に格納した値でreplaceして、一行のみ出力したいのですが、 '配列の使い方とループで混乱してしまい困っています。 '1つのExcelファイルにつき、一行を出力 sw.WriteLine(sqlX) sw.Close() End If Next Else Exit For End If End If Next

みんなの回答

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

n-junです。 >sCellVal3 = CStr(rng3.Value) & "," >↑で配列にするためカンマ区切りの文字列にしたのですが、行数ぶんの値が配列に入っていないのは、 >どうしてかよくわからないのです。 変数:sCellVal3 には常に新しいrng3.Valueの値しか入りません。 sCellVal3 = sCellVal3 & CStr(rng3.Value) & "," として連結していかないとダメなのでは?

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

VB.NET Excelデータを読み込んでテキストファイルへの出力の仕方を教えてください http://okwave.jp/qa4866928.html 前回の質問から判断し且つVB.NETは初心者ですが、素朴な疑問です。 >'列名など取ってくる >For celCNT = 8 To 57 行(?)の値を取得しているループ内で、テキストファイルへの書き出しをすると、 そのループ回数分の行数になるのでは? ループ内で一旦文字列なり配列(?)にしておいて、ループ終了後にテキストファイルへの 書き込みを行なえば良いように思うんですけど・・・ またSQL文が必要なのかは詳しくないですけど、ループ内で宣言し直していたら どうなのかなって感じました。 素人考えなので的はずれでしたらごめんなさい。

makita555
質問者

補足

アドバイスありがとうございます。 >行(?)の値を取得しているループ内で、テキストファイルへの書き>出しをすると、 >そのループ回数分の行数になるのでは? sCellVal3 = CStr(rng3.Value) & "," ↑で配列にするためカンマ区切りの文字列にしたのですが、行数ぶんの値が配列に入っていないのは、どうしてかよくわからないのです。ループ内で格納したつもりなのですが。書き込みもループ内で行ったつもりなんですが...。もう一度、考えてみます。ありがとうございます。

関連するQ&A