Экспорт ASPxGridView со столбцом с многострочным текстом в Excel

#asp.net #devexpress #export-to-excel #aspxgridview

#asp.net #devexpress #экспорт в Excel #aspxgridview

Вопрос:

Можно ли экспортировать ASPxGridView со столбцом, содержащим многострочный текст, в Excel с помощью ASPxGridViewExporter?

У меня есть ASPxGridView со столбцом, который содержит многострочный текст. Когда я экспортирую данные сетки с помощью ASPxGridViewExporter, многострочный текст отображается как одна строка (без разрывов строк).

Я пробовал как <br/>, так и «n» (перевод строки) в качестве разделителей строк.

кстати, значение свойства PropertiesTextEdit-EncodeHtml для этого столбца равно false.

Спасибо

Ответ №1:

Есть 2 способа достичь того, что вы ищете:

  1. Укажите тип экспорта WYSIWYG в XlsxExportOptionsEx:

     XlsxExportOptionsEx options = new XlsxExportOptionsEx()
    {
        ExportType = DevExpress.Export.ExportType.WYSIWYG
    };
    ASPxGridView1.ExportToXlsx("Test.xlsx", options);
      
  2. Сообщите экспортеру, что вы хотите экспортировать данные, и обработайте событие CustomizeCell, чтобы установить для переноса ячеек значение true:

     XlsxExportOptionsEx options = new XlsxExportOptionsEx()
    {
        ExportType = DevExpress.Export.ExportType.DataAware
    };
    
    options.CustomizeCell  = options_CustomizeCell;
    
    void options_CustomizeCell(DevExpress.Export.CustomizeCellEventArgs e)
    {
       e.Formatting.Alignment = new XlCellAlignment() { WrapText = true };
       e.Handled = true;    
    }
      

    Затем используйте объект customized options для экспорта.

Смотрите: https://www.devexpress.com/Support/Center/Question/Details/T381176

Существует также событие RenderBrick, которое иногда может быть полезным. Вы можете обработать это следующим образом:

 gveExporter.RenderBrick  = gveExporter_RenderBrick;

void gveExporter_RenderBrick(object sender, DevExpress.Web.ASPxGridViewExportRenderingEventArgs e)
{
    ...
    StringFormat sFormat = new StringFormat(StringFormatFlags.NoWrap);
    BrickStringFormat brickSFormat = new BrickStringFormat(sFormat);
    e.BrickStyle.StringFormat = brickSFormat;
    ...
}
  

Но я не нашел, как на самом деле принудительно перенести туда ячейку, потому что StringFormatFlags имеет только NoWrap среди подходящих элементов. По моему опыту, в экспортированном документе Excel у меня был длинный текст, переносящий ячейки, поэтому я использовал RenderBrick, чтобы отключить этот перенос.

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

Комментарии:

1. Работает для меня. Спасибо.