Excel XML Newline в ячейке - PullRequest
       27

Excel XML Newline в ячейке

7 голосов
/ 27 мая 2010

Я использую LINQ to XML для создания файла Excel XML .Я хочу включить новые строки в ячейках.Excel использует литерал 
 для представления новой строки.Если я пытаюсь добавить это, используя XText:

XText newlineElement = new XText( "Foo
Bar" );

, я получаю:

Foo
Bar

, который отображается в Excel как:

Foo
Bar

Есть ли способ записать &#10 в файл XML без выполнения

String.Replace( "
", "
" )

поверх полученного текста файла?

РЕДАКТИРОВАТЬ Вот фрагмент кода, показывающий, как я создаю строку для документа Excel.Я избегал этого, так как это немного грязно.:) Дайте мне знать, поможет ли больше кода, или это просто добавляет путаницы.

В этом примере описанный выше newlineElement представлен единственным XText в примере кода.

const string CELL = "{urn:schemas-microsoft-com:office:spreadsheet}Cell";
const string DATA = "{urn:schemas-microsoft-com:office:spreadsheet}Data";
const string STYLE = "{urn:schemas-microsoft-com:office:spreadsheet}StyleID";
const string TYPE= "{urn:schemas-microsoft-com:office:spreadsheet}Type";   
const string HEIGHT = "{urn:schemas-microsoft-com:office:spreadsheet}Height";
const string ROW = "{urn:schemas-microsoft-com:office:spreadsheet}Row";

...

XElement rowElement = new XElement( Row,
                                    new XElement( CELL,
                                        new XAttribute( STYLE, "s0" ) ),
                                    new XElement( CELL,
                                        new XElement( DATA,
                                            new XText( description.Replace("\n", "
") ), 
                                            new XAttribute( TYPE, "String" ) ),
                                        new XAttribute( STYLE, "sWrap" ) ),
                                    new XElement( CELL,
                                        new XAttribute( STYLE, "s0" ) ),
                                    new XAttribute( HEIGHT, height ) );

Это дает:

  <ss:Row ss:Height="45">
    <ss:Cell ss:StyleID="s0" />
    <ss:Cell ss:StyleID="sWrap">
      <ss:Data ss:Type="String">Foo&amp;#10;Bar</ss:Data>
    </ss:Cell>
    <ss:Cell ss:StyleID="s0" />
  </ss:Row>

Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 27 мая 2010

Не уверен, поможет ли это, но следующий код:

var newlineElement = new XText("Foo&#10;Bar");
Console.WriteLine(newlineElement);
Console.WriteLine(newlineElement.Value);

Производит этот вывод:

Foo$amp;#10;Bar

Foo&#10;Bar

Итак, могли бы вы использовать в своем коде, который использует объект newlineElement, свойство .Value?

1 голос
/ 27 мая 2010

вставьте действительный символ в строку, а не escape-код - LINQ будет обрабатывать преобразование за вас.

EDIT:

Хорошо - это было совершенно неправильно, но помогло мне получить что-то, что (я думаю) работает. Если вы хотите встроить что-то, что в противном случае могло бы быть исключено при рендеринге XML, вам нужно встроить его в блок CDATA. Проверьте этот связанный вопрос на C # и XML, который споткнулся в моей памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...