web-dev-qa-db-ja.com

Excelはcsvエクスポートに二重引用符を追加します

Excelで奇妙な未知の動作が発生しています。 csvファイルにエクスポートするシートは、次のようなデータを含む4つの列で構成されています。

site.aspx|de|lblChanges.Text|some text that will be used somewhere

次に、テキストが含まれる最後の列に二重引用符が含まれている場合、Excelは、二重引用符が既に含まれている場合、そのすべてに二重引用符を追加します。

例:

site.aspx|de|lblChanges.Text|some text that will used somewhere <a href="/clickety.aspx">here</a>

に変換されます

site.aspx|de|lblChanges.Text|"some text that will used somewhere <a href="/clickety.aspx">here</a>"

最初と最後に余分な二重引用符があることに注意してください。このデータはデータベースに挿入され、グローバリゼーションのテキストリソースとして使用されます。これらの余分な二重引用符でリテラルコントロールをレンダリングすると、機能が壊れます。

Excelでこの動作を抑制するにはどうすればよいですか?

6
Marco

フィールドにスペースが含まれている場合(例のように)、引用符はCSVの標準です。

通常は、すべてのCSVを引用符で囲みます(2つの引用符で維持したい引用符はエスケープします""):

"field 1", "field 2", "field with ""escaped"" quotes"

ここでは、Excelの処理に関する特定の参照を含む完全な説明を示します。 http://www.csvreader.com/csv_format.php

ただし、Excelのエクスポートを制御せず、インポートプログラムを制御しないと、必要なものを取得するのが難しい場合があります。プロセスの途中でテキストファイルを微調整する必要がある場合があります。

8
pgr

これは十分に文書化されており、実際に予想される動作です。しかし、回るのは難しいようで、回避策しか考えられません。

回避策は、エクスポートされたファイルを開き、引用符を検索して何も置換しない(引用符を削除する)ようです。

より詳細な制御が必要な場合(たとえば、引用符が必要な場合があります)は、手動で行うかハックする必要があります。「を使用したいが、代わりにqwertquoteを使用するなど、必要な場所に一意のキーワードを追加します。 (この文字列は一意になるため、引用符で検索して置き換えることができます)または、プログラミングの経験があるため、それを行うユーティリティアプリを作成します。

http://www.mcgimpsey.com/Excel/textfiles.html#csvwithquotes からいくつかのコードがあります

変更のないテキストファイル

このマクロは、引用符内にコンマが含まれるセルを囲むことなく、またはテキスト内の引用符を2倍にして、テキストファイルを出力します。

Public Sub TextNoModification()
    Const DELIMITER As String = "," 'or "|", vbTab, etc. 
    Dim myRecord As Range
    Dim myField As Range
    Dim nFileNum As Long
    Dim sOut As String

    nFileNum = FreeFile
    Open "Test.txt" For Output As #nFileNum
    For Each myRecord In Range("A1:A" & _
            Range("A" & Rows.Count).End(xlUp).Row)
        With myRecord
            For Each myField In Range(.Cells(1), _
                    Cells(.Row, Columns.Count).End(xlToLeft))
                sOut = sOut & DELIMITER & myField.Text
            Next myField
            Print #nFileNum, Mid(sOut, 2)
            sOut = Empty
        End With
    Next myRecord
    Close #nFileNum
End Sub
3
Dave

ウィキペディアから: http://en.wikipedia.org/wiki/Comma-separated_values

コンマまたは二重引用符が埋め込まれたフィールドは引用符で囲む必要があります。

1997年、フォード、E350、「超豪華なトラック」

そして

埋め込まれた各二重引用符文字は、二重引用符のペアで表す必要があります。

1997、フォード、E350、「スーパー、「豪華」トラック」

したがって、csvファイルが必要です二重引用符をエスケープする必要があります(二重引用符の別のセットを使用して)。フィールド。

3
Brian J