セル内改行があるエクセルをテキスト出力

解決


ただみね  2005-01-27 00:33:51  No: 88039  IP: [192.*.*.*]

VisualBasic6.0を使用しています。
エクセルのデータをテキストに出力させる場合、セル内で改行されていると
出力先のテキストファイルでは改行部分が正しく表示されません(黒マス上に
なり1行で表示される)。
どこかで改行コード変換の工夫をする必要があるのでしょうか?

(たとえばこのような場合です)
   strConnect = "Excel 8.0;DATABASE=C:\input.txt"
    Set DB = OpenDatabase("C:\input.txt", False, False, strConnect)
    
    Set rst = DB.OpenRecordset("Sheet1$", dbOpenTable)
    Do While Not rst.EOF
        data1 = rst!1列目        
        Open "output.txt" For Output As #1
        Print #1, data1
        Close #1
        rst.MoveNext
    Loop

編集 削除
魔界の仮面弁士  2005-01-27 00:40:44  No: 88040  IP: [192.*.*.*]

Windowsの改行コードは、vbCrLf が一般的ですよね。
(稀に vbCr のみの場合もありますが)
それに対して、Excelのセル内改行は、vbLf が使われています。

その黒丸が、vbLfのコードになっていないか、確認してみてください。
その上で、必要に応じて Replace関数で置換すれば、適切な結果が得られるかと。

編集 削除
ただみね  2005-01-28 05:34:28  No: 88041  IP: [192.*.*.*]

ありがとうございます。Replace関数でうまくいきました。
それにして同じMicrosoft製品で改行コードが異なるのも
おかしな感じがしますね。

    Set rst = DB.OpenRecordset("Sheet1$", dbOpenTable)
    Do While Not rst.EOF
        data1 = rst!1列目        
        data1 = Replace(data1, vbLf, vbCrLf) <<<  これで解決!
        Open "output.txt" For Output As #1
        Print #1, data1
        Close #1
        rst.MoveNext
    Loop

編集 削除
Dental  2005-01-28 11:17:00  No: 88042  IP: [192.*.*.*]

> それにして同じMicrosoft製品で改行コードが異なるのも

Excel は元々、Mac版が先に出ていたんですよね。

でもって、Macの改行コードは CR。だからCSVを作るとき、
CR→行区切り、LF→セル内改行という使いわけができたいう話。

それが巡って、Win版でもセル内改行は、CRLF や CR ではなく
LF が使われ続けているのだとか。


# 上記はあくまで噂なんで、ホントかどうかは知りません。

編集 削除