'', шестнадцатеричное значение 0x1A, является недопустимым символом

Я использую closedXML, чтобы взять таблицу данных и поместить ее в файл Excel.

Код, с которым я работаю, работает с 99% файлов, которые я помещаю через приложение, но время от времени я получаю сообщение об ошибке с файлом. (нет, это не проблема отладки)

Проблема должна исходить из данных, однако я не знаю, как решить эту проблему.

Код, который я использую

Public Sub WriteToExcel(dt As DataTable, filePath As String)

    Dim workbook = New XLWorkbook()
    Dim worksheet = workbook.Worksheets.Add(dt, "Call Validate Export")
    Try
        workbook.SaveAs(filePath)
        Process.Start(filePath)
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

При сохранении файла получаю ошибку

'', шестнадцатеричное значение 0x1A, является недопустимым символом.

между '' есть маленькая стрелка, указывающая вправо.

При чтении файла в таблицу данных он читается нормально, глядя на файл, я не вижу шестнадцатеричных символов.

Читаемый файл является CSV-файлом с разделителями ^.

Итак, мой вопрос, как я могу проверить и исправить \ заменить плохие символы в выводе, что позволит мне сэкономить 100% времени.

3 ответа

Из спецификации XML ( https://www.w3.org/TR/xml/)

Char:: = # x9 | #xA | #xD | [# x20- # xD7FF] | [# xE000- # xFFFD] | [# x10000- # x10FFFF] / * любой символ Unicode, за исключением суррогатных блоков, FFFE и FFFF. */

Это означает, что символ #x1A является недопустимым символом. Вы должны вручную удалить его.

https://github.com/ClosedXML/ClosedXML/pull/66 - это запрос на удаление, который может решить вашу проблему. Пожалуйста, попробуйте это.

@Simon,

Похоже, что вы пытаетесь экспортировать в Excel, он содержит некоторые недопустимые символы (стрелка указывает на правую сторону).

Я получил подобную ошибку, и после детального изучения я узнал, что я экспортирую DataTable в Excel, и одно из значений ячеек DataTable выглядело так:

Пожалуйста, обратите внимание -> Некоторые комментарии (Здесь, -> на самом деле один символ: стрелка, указывающая на правую сторону)

Я удалил эти символы, и теперь он работает нормально.

Надеюсь это поможет.

Другие вопросы по тегам