OOXML SDK незаконные замены символов - PullRequest
1 голос
/ 04 мая 2011

У меня проблема с созданием документа XLSX с помощью Open XML SDK 2.0 от MS.

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

Я использую эту функцию

    private static string ProcessString(string str)
    {
        return System.Security.SecurityElement.Escape(str);
    }

, которая даст мне мяч Тома вместо шара Тома.(Ну, я не выяснил, как получить последний, так как сгенерированный Excel не открывается.)

Кто-нибудь знает, как заставить недопустимые символы XML показывать, используя OOXML в листе Excel?

РЕДАКТИРОВАТЬ:
В функции, которую я использую для создания текстовой ячейки:

private static Cell CreateTextCell(string header, UInt32 index, string text)
{
    var c = new Cell { DataType = CellValues.String, CellReference = header + index };
    var cellValue = new CellValue(text);
    c.Append(cellValue);
    return c;
}

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

В тексте, с которым я имею дело, также есть HTML-теги.

пс.LOL, я только что заметил, что используемая уценка проанализировала мой HTML-код, и мой пример выглядел нелепо.

edit 2:

Пример ввода:

  • Сложность рака: ищем ли мы неправильные уровни для разработки эффективных вмешательств?

  • Проспективное исследование риска рака молочной железы у женщин с отрицательной мутацией от BRCA1 или BRCA2 мутационно-позитивные семьи в Консорциуме Фонда Кэтлин Кунингэм по исследованию семейного рака молочной железы (kConFab).

  • Germline BRCA2 мутации коррелируют с агрессивной простатойрак и неблагоприятный исход.

Формат HTML в основном так, что он отображается на веб-странице.Я должен просто удалить основные теги форматирования.Но что еще более важно, я хочу, чтобы файл excel загружался, и экранирование значений - верный способ сделать это.

Ответы [ 3 ]

2 голосов
/ 05 мая 2011

Думайте о том, что все содержится, например, в. Excel-файл в конечном итоге сохраняется как XML. Поэтому, если у вас есть какие-то недопустимые XML-символы, которые вы хотите сохранить в файле, вам нужно удалить их. Это на самом деле не проблема OOXML - это проблема XML.

Так что если у вас есть введенный текст, как

 Germline <em>BRCA2</em> mutations correlate with aggressive prostate cancer and adverse outcome.

Вам нужно преобразовать угловые скобки в

 Germline & lt;em& gt;BRCA2& lt;/em& gt; mutations correlate with aggressive prostate cancer and adverse outcome.

(пробел добавлен для иллюстрации скобок)

См. Экранирование строки в XML для нескольких способов сделать это.

Кроме того, чтобы увидеть, как Microsoft Office делает это, добавьте текст неполадки в документ Excel и сохраните его. Затем используйте инструмент OpenXml SDK (поставляется вместе с SDK), чтобы отобразить файл и посмотреть, как это делается.

1 голос
/ 18 мая 2011

Еще одна вещь, чтобы быть осторожным. XML не имеет встроенной поддержки всех именованных сущностей, которые мы привыкли использовать в HTML. В XML есть небольшое количество всегда понятных (т. Е. & Lt; & gt; & amp;). Поскольку в OOXML нет DTD, вы не можете определить больше именованных сущностей. Вместо этого вам нужно ввести что-либо еще в строку, используя символьную сущность (например, & # x20; для пробела, для & nbsp; и т. Д.), Или же непосредственно ввести символ Unicode в строку.

Вы можете использовать "для & quote; и" для апострофа, если вам нужно вставить одно из них в значение атрибута, которое окружено символом кавычек того же типа.

Существуют некоторые кодовые точки Unicode, которые категорически запрещены в потоках данных XML. Чтобы вставить эти коды в значение строки, OOXML имеет собственный механизм выхода только для этих кодов и только этих кодов. Я не думаю, что в этом вопросе предусмотрено положение.

1 голос
/ 04 мая 2011

Вы уверены, что это является причиной проблемы? Можете ли вы добавить "нормальные" строки в ячейки и открыть их?

AFAIK символ апострофа не является недопустимым символом XML.

Если вы посмотрите в спецификации OOXML в разделе 22.9.2.19 ST_Xstring (Escaped String) (тип данных для строк в ячейках), вы увидите следующее объяснение:

* 22.9.2.19 ST_Xstring (Экранированная строка) Строка символов с поддержкой экранированных символов недействительных XML. Для всех символов, которые не могут быть представлены в XML в соответствии со спецификацией XML 1.0, символы экранируются с использованием формата экранирующего символа Unicode для числового представления xHHHH , где H представляет шестнадцатеричный символ в значении символа. [Пример: символ Unicode 8 недопустим в документе XML 1.0, поэтому его необходимо экранировать как x0008 . конец примера] *

...