показать многострочное текстовое значение в ячейках XML-документа excel, созданного с помощью C# XmlWriter

Ситуация: я создаю C# .Net 4.0 Winform для сбора данных из базы данных Oracle с использованием фильтров, выбранных пользователем, и помещаю их в предварительный просмотр Gridview для проверки. После того, как они отфильтровали данные по своему вкусу, они нажимают кнопку экспорта, которая преобразует данные в XML-документ, который открывается в Excel при двойном щелчке. Внутри XML-файла excel каждая запись выглядит так:

  <ss:Row>
    <ss:Cell ss:StyleID="General">
      <ss:Data ss:Type="String">110002</ss:Data>
    </ss:Cell>
    <ss:Cell ss:StyleID="General">
      <ss:Data ss:Type="String">GALV.047M X 3 G90 A653 PASSDRY SQ GR33</ss:Data>
    </ss:Cell>
    <ss:Cell ss:StyleID="General">
      <ss:Data ss:Type="String">.047 MIN X 3 X COIL
!GALV G90 ASTM A 653 SQ GR33 PASS DRY*

20" ID
5 TON MAX LIFT
SKID EYE TO THE SKY
3" X 3" SPACER IN BETWEEN EACH BUNDLE
SUPPLY TEST REPORTS CHEMICAL</ss:Data>
    </ss:Cell>
  </ss:Row>

Который отображает записи в Excel, похожие на то, как они выглядели бы, если бы файл был CVS, полностью неформатированным рабочим листом со всем текстом в одной строке. Понятно, что внутри XML-файла разрывы строк сохраняются, но лист Excel предназначен для пользователей, чтобы редактировать данные, поэтому мне нужно отображать текст в том виде, в котором я его получаю (т.е. в нескольких строках, если это так).

Вопрос: Как я могу отформатировать экспортированный файл XML, чтобы отобразить содержимое ячейки в нескольких строках (и, возможно, увеличить высоту ячейки для соответствия), если именно так форматируются данные в файле XML?


person Adamantine    schedule 11.05.2012    source источник
comment
использование Writer.WriteCData() в C# вместо Writer.WriteValue() сделало свое дело!   -  person Adamantine    schedule 11.05.2012


Ответы (1)


Если вы создадите простой файл Excel с некоторым многострочным содержанием и сохраните его как XML, вы увидите это в выводе:

В теге

<Style ss:ID="s62">
   <Alignment ss:Vertical="Bottom" ss:WrapText="1"/>
</Style>

Ячейка XML:

<Cell ss:StyleID="s62"> <Data ss:Type="String">First Line&#10;Second Line&#10;Last Line</Data> </Cell>

person Tim Williams    schedule 11.05.2012
comment
поэтому в моей программе на С# я вставляю свои стили следующим образом: _writer.WriteStartElement(Styles, urn:schemas-microsoft-com:office:spreadsheet); WriteExcelStyleElement(CellStyle.General); WriteExcelStyleElement(CellStyle.Number, Общий номер); WriteExcelStyleElement(CellStyle.DateTime, Общая дата); WriteExcelStyleElement(CellStyle.Currency, Валюта); WriteExcelStyleElement(CellStyle.ShortDate, Short Date); _writer.WriteEndElement(); как бы я изменил это, чтобы добавить стиль, который вы упомянули? - person Adamantine; 11.05.2012
comment
Кроме того, когда я добавляю строки в ячейки XML, и у меня есть строка вроде: Firstline SecondLine lastLine, как мне добавить к ней вместо \n? У меня есть следующая строка: ToValid = ToValid.Replace(\n, \n \n); но амперсанд в результирующем XML превращается в - person Adamantine; 11.05.2012
comment
Пожалуйста, отправьте код, обновив свой вопрос: его намного легче читать, чем в комментариях. - person Tim Williams; 11.05.2012
comment
Я обнаружил, что мне пришлось использовать возврат каретки \r вместо новой строки \n. - person sethetter; 22.12.2014