Как форматировать валюту в ClosedXML как числовой

мы используем ClosedXML для преобразования данных в таблицы Excel для представления пользователю. Объект DataTable создается просто путем назначения всех значений db (из NHibernate) в строки и последующего их формирования, как показано ниже:

//formatting EstimatedCost = Currency.SafeToString(Currency.Create(n.EstimatedCost)), 

Затем мы устанавливаем тип столбца в тип свойства, т. Е. String во всех случаях.

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

Моя проблема в том, что, поскольку мы собираем все данные в DataTable, у меня нет возможности правильно декорировать столбцы ClosedXML. Есть ли быстрый способ сделать это, о чем я не думаю?

 public const string ExcelDataType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"; public static MemoryStream GenerateExcelFileFromData(IEnumerable<KeyValuePair<string, DataTable>> tabs, int colWidth = 100) { var workbook = new XLWorkbook { ColumnWidth = colWidth }; foreach (var enumerable in tabs) { workbook.Worksheets.Add(enumerable.Value, enumerable.Key); } 

  public static DataTable ConvertToDataTable<T>(IEnumerable<T> varlist, List<string> excludedColumns, bool titleizeColumn = false) { var dtReturn = new DataTable(); // column names PropertyInfo[] oProps = null; if (varlist == null) return dtReturn; foreach (T rec in varlist) { // Use reflection to get property names, to create table, Only first time, others will follow if (oProps == null) { oProps = rec.GetType().GetProperties(); foreach (PropertyInfo pi in oProps) { if (excludedColumns.Contains(pi.Name)) { continue; } var colType = pi.PropertyType; dtReturn.Columns.Add(new DataColumn(GetColumnName(pi, titleizeColumn), colType)); } } DataRow dr = dtReturn.NewRow(); foreach (var pi in oProps.Where(pi => !excludedColumns.Contains(pi.Name))) { try { dr[GetColumnName(pi, titleizeColumn)] = pi.GetValue(rec, null) ?? DBNull.Value; } catch (ArgumentException) { dr[GetColumnName(pi, titleizeColumn)] = DBNull.Value; } } dtReturn.Rows.Add(dr); } return dtReturn; -  public static DataTable ConvertToDataTable<T>(IEnumerable<T> varlist, List<string> excludedColumns, bool titleizeColumn = false) { var dtReturn = new DataTable(); // column names PropertyInfo[] oProps = null; if (varlist == null) return dtReturn; foreach (T rec in varlist) { // Use reflection to get property names, to create table, Only first time, others will follow if (oProps == null) { oProps = rec.GetType().GetProperties(); foreach (PropertyInfo pi in oProps) { if (excludedColumns.Contains(pi.Name)) { continue; } var colType = pi.PropertyType; dtReturn.Columns.Add(new DataColumn(GetColumnName(pi, titleizeColumn), colType)); } } DataRow dr = dtReturn.NewRow(); foreach (var pi in oProps.Where(pi => !excludedColumns.Contains(pi.Name))) { try { dr[GetColumnName(pi, titleizeColumn)] = pi.GetValue(rec, null) ?? DBNull.Value; } catch (ArgumentException) { dr[GetColumnName(pi, titleizeColumn)] = DBNull.Value; } } dtReturn.Rows.Add(dr); } return dtReturn; 

Вы можете форматировать валютные значения таким образом:

 worksheet.Cell(rowIndex, columnIndex).Style.NumberFormat.Format = "$0.00"; worksheet.Cell(rowIndex, columnIndex).DataType = XLCellValues.Number; 
  • Форматирование ячейки Excel с помощью Microsoft Interop
  • Как изменить цвет серии в Excel с помощью C #?
  • Исключение C # NPOI «Внешний лист является частью LinkTable» при создании объекта HSSFWorkbook из FileStream
  • Закрытие процесса приложений Excel на C # после доступа к данным
  • C #, открыть файл excel и применить фильтр для извлечения определенных строк?
  • Нет перегрузки для метода «Открыть» принимает 1 или более аргументов
  • Excel-DNA, вызывающая функцию xll из другой функции async xll (исключение из HRESULT: 0x800AC472)
  • Чтение из process.StandardOutput.ReadToEnd () возвращает значение null при запуске процесса
  • Извлеченный Excel с использованием файла OpenXML не открывается
  • Имя столбца Excel, содержащее '.' конвертировано в '#'
  • Как создать диаграмму из листа Excel с помощью c # interop?
  • Interesting Posts
    Давайте будем гением компьютера.