2016-11-30 3 views
0

Я написал экспорт в CSV-файл в приложении vb.net, а затем экспортировал его в Outlook.Почему Excel обрабатывает двойные пробелы как запятую?

Проблема, которую я получил, заключается в том, что когда файл CSV записывается, мой код проверяет запятую в текущем поле, но при этом он также ошибочно делает двойное пространство для запятой или пробелом с последующим нажатием клавиши «Ввод» (для многострочных текстовых полей)

Пример может быть, если в разделе примечаний клиента имеется 4 строки текста, а один заканчивается пробелом - пользователь затем нажал кнопку ввода чтобы перейти к следующей строке, однако программа принимает следующую строку текста и создает для нее новую запись, поскольку она считает запятой ...

В чем причина этого? Это означает, что данные должны быть супер-проверены (т. Е. Проверять отсутствие двойных пробелов и т. Д.), Прежде чем их можно будет экспортировать, что слишком много времени.

Надеюсь, это имеет смысл!

Это код:

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 

Код для 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 
+0

Если вы не проверяете значение 'If value.Contains (separator) Then' в' wrapValue' (т. Е. Заключают * все * поля в двойных кавычках), это работает? В этом случае будут закрыты только поля с запятой, что означает, что новая строка будет обнаженной и будет выглядеть как новая строка CSV. –

+0

@AndrewMorton Привет, это сработало, спасибо. Проблема только в том, что когда я попытался импортировать его в контакты Outlook, он импортировал его, а затем дал ошибку ... Я открыл файл в Excel, снова сохранил его (как CSV), заменив старый файл, и он сработал! Любые идеи, почему это не сработало в первый раз? – Harambe

+0

Самый простой способ - сохранить файл из Excel с другим именем файла и использовать шестнадцатеричный редактор для проверки содержимого файлов. В качестве указаний на то, что может быть важными различиями, может быть, что в начале одного из них есть [маркер порядка байтов] (https://en.wikipedia.org/wiki/Byte_order_mark), или, возможно, новые строки должны 0x0D * или * 0x0A в пределах записей вместо 0x0D 0x0A. –

ответ

0

Исходя из того, что это укорочение его на 430 строк, я хотел бы предложить, что-то делать с тем фактом, вы добавляете нагрузку «» до и после переменной значения.

Если он удаляет значение в начале, то он будет удалять «перед заголовком первого столбца. Что касается того, почему он импортирует одну запись, как вы упомянули в комментариях, я не совсем уверен, однако, я предложил бы этот вопрос лежит в вашем wrapValue коде.

Можете ли вы попробуйте изменить

value = group & value & group 

в

value = value 

и посмотреть, если это изменение что-нибудь?