Установить формат колонки по коду валюты - PullRequest
0 голосов
/ 27 августа 2018

Перефразирование вопроса для форматирования столбца по валюте CODE.
Использование EPPLUS для экспорта таблицы данных.
Нужны две разные валюты на строку.
Что такое синтаксис для установки формата столбца CURRENCY по валюте CODE?
Передача dataTable в функцию и цикл по столбцам.
Формат для "DateTimeFormat" по имени культуры -> работает нормально.
Нужен синтаксис для формата валюты по коду валюты. Спасибо!
Есть ли ссылка, где я могу найти строковые форматы для других 27 кодов валют, которые мы поддерживаем?

private void Export_Excel_EpPlus(
string strWorksheetName, DataTable dtReportData)
{
    CultureInfo oCulture;
    oCulture = new CultureInfo(sMyCultureName);
    using (ExcelPackage oEPkg = new ExcelPackage())
    {
        int iColNumber = 0;

        ExcelWorksheet oWorkSheet = oEPkg.Workbook.Worksheets.Add(strWorksheetName);

        //Load the datatable into the sheet, starting from cell A1
       oWorkSheet.Cells["A1"].LoadFromDataTable(dtReportData, true);

        //auto fix the columns
       oWorkSheet.Cells[oWorkSheet.Dimension.Address].AutoFitColumns();

        foreach (DataColumn oCol in dtReportData.Columns)
        {
            iColNumber++;

            if (oCol.DataType == typeof(DateTime))
            {
                // This works ok -> Use Culture - DateTimeFormat - ShortDatePattern
                oWorkSheet.Column(iColNumber).Style.Numberformat.Format = oCulture.DateTimeFormat.ShortDatePattern;
            }
            if (oCol.DataType == typeof(Decimal))
            {
                if (oCol.ColumnName == "TotalAmt_Currency1")
                {
                    // ??? NEED syntax to format by currency CODE (i.e. GBP)
                }
                if (oCol.ColumnName == "TotalAmt_Currency2")
                {
                     // ??? NEED syntax to format by currency CODE (i.e. EUR)
                }
            }
        }

        // Prepare the response
        HttpResponse ohttpResponse = Response;
        ohttpResponse.Clear();
        ohttpResponse.ClearHeaders();
        ohttpResponse.Buffer = true;
        ohttpResponse.Charset = "";
        ohttpResponse.ContentEncoding = System.Text.Encoding.UTF8;
        ohttpResponse.Cache.SetCacheability(HttpCacheability.NoCache);
        ohttpResponse.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        //Provide your file name here
        ohttpResponse.AddHeader("content-disposition", "attachment;filename=\"ExportFile.xlsx\"");
        //ohttpResponse.ContentEncoding 

        // Write the workbook to the Response.OutputStream
        using (MemoryStream oMemoryStream = new MemoryStream())
        {
            oEPkg.SaveAs(oMemoryStream);

oMemoryStream.WriteTo(ohttpResponse.OutputStream);
            oMemoryStream.Position = 0;
            oMemoryStream.Close();
        }

        ohttpResponse.Flush();
        ohttpResponse.End();
    }

1 Ответ

0 голосов
/ 28 августа 2018

Я редактирую свой ответ после просмотра комментариев. Если ваши требования - евро и фунт, вы можете определить их следующим образом:

//define this somewhere
 string sFormatEU = @"_([$€-2] * #,##0.00_);_([$€-2] * (#,##0.00);_([$€-2] * ""-""??_);_(@_)";
 string sFormatUK = @"_-[$£-809]* #,##0.00_-;-[$£-809]* #,##0.00_-;_-[$£-809]* ""-""??_-;_-@_-";

if (oCol.ColumnName == "TotalAmt_Currency1")
 {
     oWorkSheet.Column(iColNumber).Style.Numberformat.Format=sFormatUk;
 }
 if (oCol.ColumnName == "TotalAmt_Currency2")
  {
     oWorkSheet.Column(iColNumber).Style.Numberformat.Format=sFormatEU;
  }

Я проверил приведенный выше код, и он работает нормально. Если вы можете каким-то образом получить образец валюты из Culture Info, то нет необходимости в явном определении шаблонов

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