6

Я испытываю странное неизвестное поведение в 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?

3 ответа3

7

Кавычки являются стандартными для CSV, когда поля содержат пробелы (как в вашем случае).

Обычно вы пишете все свои CSV с кавычками (и избегаете кавычек, которые вы хотите сохранить с двумя кавычками ""):

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

Вот полное объяснение, включая конкретные ссылки на обработку Excel:http://www.csvreader.com/csv_format.php

Но может быть трудно получить то, что вы хотите, если вы не контролируете экспорт в Excel и не контролируете программу импорта. Возможно, вам придется настроить текстовый файл в середине процесса.

3

Это хорошо задокументировано и является ожидаемым поведением. Однако обойти это кажется сложным, и я могу думать только об обходных путях.

Обходной путь, кажется, открыть экспортированный файл и найти и заменить кавычки ничем (чтобы удалить кавычки).

Если вам нужен больший контроль (например, вам могут потребоваться кавычки в некоторых случаях), то вам нужно сделать это вручную или взломать его - добавить уникальное ключевое слово, где вы хотите, чтобы «существовал (например, не используя», но вместо этого qwertquote) (поскольку эта строка будет уникальной, вы можете найти и заменить ее кавычкой) или написать вспомогательное приложение, чтобы сделать это для вас, поскольку у вас есть опыт программирования.

Есть некоторый код с http://www.mcgimpsey.com/excel/textfiles.html#csvwithquotes

Текстовые файлы без изменений

Этот макрос выведет текстовый файл без окружающих ячеек, которые имеют кавычки в кавычках или двойные кавычки в тексте:

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
2

Из Википедии: http://en.wikipedia.org/wiki/Comma-separated_values

Поля со встроенными запятыми или двойными кавычками должны быть в кавычках.

1997, Ford, E350, "Супер, роскошный грузовик"

а также

Каждый из встроенных символов двойной кавычки должен быть представлен парой символов двойной кавычки.

1997, Форд, E350, "Супер", "Роскошный", "Грузовик"

Таким образом, CSV-файл требует экранирования этих двойных кавычек (используя другой набор двойных кавычек), потому что двойная кавычка сама по себе обозначает границы поля.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .