私はvb.netアプリケーションでCSVファイルへの書き出しを行い、それをOutlookにエクスポートしました。Excelでダブルスペースをコンマで処理するのはなぜですか?
問題は、CSVファイルが書き込まれているときに、自分のコードが現在のフィールドのカンマをチェックしていますが、これを実行しているときにカンマまたはスペース(複数行テキストボックスの場合)
たとえば、顧客のメモセクションに4行のテキストがあり、1行がスペースで終わっている場合 - ユーザーがEnterキーを押した場合次の行に移動しますが、プログラムは次の行に移動し、その行をカンマであると考えて、新しい行を作成します。
この理由は何ですか?つまり、データをエクスポートする前に、データのスーパーバリデーションを行う必要があります(つまり、二重スペースなどがないかどうかを確認する必要があります)。これは時間がかかりすぎます。
これはうまくいけばうまくいきます。
これはコードです:
Dim result As Boolean = True
Try
Dim sb As New StringBuilder()
Dim separator As String = ","
Dim group As String = """"
Dim newLine As String = Environment.NewLine
For Each column As DataColumn In dtable.Columns
sb.Append(wrapValue(column.ColumnName, group, separator) & separator)
Next
sb.Append(newLine)
For Each row As DataRow In dtable.Rows
For Each col As DataColumn In dtable.Columns
sb.Append(wrapValue(row(col).ToString(), group, separator) & separator)
Next
sb.Append(newLine)
Next
それは430線でそれを短縮するという事実に基づいてwrapValue
Function wrapValue(value As String, group As String, separator As String) As String
If value.Contains(separator) Then
If value.Contains(group) Then
value = value.Replace(group, group + group)
End If
value = group & value & group
End If
Return value
End Function
'wrapValue'で' If value.Contains(separator)Then then'をチェックしないと(つまり二重引用符で*すべての*フィールドを囲みます)は動作しますか?そのままでは、カンマ付きのフィールドだけが囲まれます。つまり、改行は裸であり、新しいCSVラインのように見えます。 –
@AndrewMortonこんにちは、ありがとう、ありがとう。問題は、Outlookの連絡先にインポートしようとしたときにインポートされた後にエラーが発生したということです。Excelでファイルを開き、CSVとして保存し直して、古いファイルを置き換えました。それがなぜ初めて動作しなかったのか? – Harambe
最も簡単な方法は、異なるファイル名でExcelからファイルを保存し、16進エディタを使用してファイルの内容を調べることです。重要な相違点を指すポインタとして、その1つの先頭に[バイトオーダーマーカー](https://en.wikipedia.org/wiki/Byte_order_mark)があるか、または改行が必要である可能性があります0x0D 0x0Aではなく、エントリ内の0x0D *または* 0x0Aとなります。 –