Как вставить разрыв строки в ячейку таблицы OPENXML? - PullRequest
7 голосов
/ 09 апреля 2009

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

new Cell() 
{ 
    CellReference = "E2", 
    StyleIndex = (UInt32Value)4U, 
    DataType = CellValues.InlineString, 
    InlineString = new InlineString(new Text( "some text")) 
}

Но \n не работает, чтобы вставить разрыв строки, как я могу это сделать?

Спасибо


Ответ

new Cell(
         new CellValue("string \n string")
        ) 
    { 
        CellReference = "E2", 
        StyleIndex = (UInt32Value)4U, 
        DataType = CellValues.String         
    }

Ответы [ 2 ]

10 голосов
/ 15 ноября 2011

Вам нужно сделать две вещи:

1.) Пометьте ячейку как «Перетянутый текст». Вы можете сделать это в электронной таблице вручную, если в качестве шаблона вы используете существующую электронную таблицу. Просто щелкните правой кнопкой мыши ячейку (я) и выберите « Формат ячеек .. », щелкните вкладку « Выравнивание » и выберите « Обтекание текста"флажок.
ИЛИ ... Вы можете установить CellFormat программно. Если у вас есть объект CellFormat с именем " cf ", вы должны сделать что-то вроде этого:

cf.ApplyAlignment = true;//Set this so that Excel knows to use it.
if (cf.Alignment == null)//If no pre-existing Alignment, then add it.
  cf.Alignment = new Alignment() { WrapText = true };
Alignment a = cf.Alignment;
if (a.WrapText == null || a.WrapText.Value == false)
  a.WrapText = new BooleanValue(true);//Update pre-existing Alignment.

2.) Вы не должны использовать "\ n", вместо этого вы должны использовать стандартную комбинацию возврата каретки + перевода строки: "\ r \ n"
Если вы смешиваете два (то есть "\ n" без предшествующих "\ r" и "\ r \ n"), это должно исправить это перед заполнением значения ячейки:

sHeaderText = sHeaderText.Replace("\r\n", "\n").Replace("\n", "\r\n");

Я сам не использую CellValues.String или даже CellValues.InlineString .
Вместо этого я строю свои текстовые ячейки, используя CellValues.SharedString (как в Excel).
Для Bool я использую « CellValues.Boolean », а для всех остальных (числовые и даты) Я не устанавливаю DataType ячейки на что-либо - потому что это то, что делает Excel, когда я смотрю на разметку, которую он создает.

6 голосов
/ 09 апреля 2009

Попробуйте CellValues.String вместо CellValues.InlineString.

...