こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

投稿日時 - 2009-04-10 23:43:27

QNo.4869422

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

n-junです。

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

sCellVal3 = sCellVal3 & CStr(rng3.Value) & ","
として連結していかないとダメなのでは?

投稿日時 - 2009-04-11 11:01:48

ANo.1

VB.NET Excelデータを読み込んでテキストファイルへの出力の仕方を教えてください
http://okwave.jp/qa4866928.html

前回の質問から判断し且つVB.NETは初心者ですが、素朴な疑問です。

>'列名など取ってくる
>For celCNT = 8 To 57
行(?)の値を取得しているループ内で、テキストファイルへの書き出しをすると、
そのループ回数分の行数になるのでは?

ループ内で一旦文字列なり配列(?)にしておいて、ループ終了後にテキストファイルへの
書き込みを行なえば良いように思うんですけど・・・

またSQL文が必要なのかは詳しくないですけど、ループ内で宣言し直していたら
どうなのかなって感じました。

素人考えなので的はずれでしたらごめんなさい。

投稿日時 - 2009-04-11 09:42:24

補足

アドバイスありがとうございます。
>行(?)の値を取得しているループ内で、テキストファイルへの書き>出しをすると、
>そのループ回数分の行数になるのでは?

sCellVal3 = CStr(rng3.Value) & ","
↑で配列にするためカンマ区切りの文字列にしたのですが、行数ぶんの値が配列に入っていないのは、どうしてかよくわからないのです。ループ内で格納したつもりなのですが。書き込みもループ内で行ったつもりなんですが...。もう一度、考えてみます。ありがとうございます。

投稿日時 - 2009-04-11 10:37:34

あなたにオススメの質問