Excel NumberFormat для диапазона не работает с использованием С#

Я пытаюсь отформатировать диапазон столбцов валюты, используя этот формат

NumberFormat = "$ #,##0.00";

Каждый раз, когда я получаю этот результат

£ 1,016.89

Вот завершенная функция для установки столбцов

public void SetColumns(List<ReportColumn> columns)
{
    try
    {
        int row = 9;
        int index = 10;
        int count = Report.Data.Count - 1;
        for (int i = 0; i < columns.Count; i++)
        {
            switch (columns[i].Type.ToUpperInvariant())
            {
                case ColumnSettingType.Number:
                    {
                        oRange = (Excel.Range)oSheet.Range[oSheet.Cells[index, i + 1], oSheet.Cells[index + count, i + 1]];
                        oRange.NumberFormat = "#,###,###0";
                        oRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignRight;
                        break;
                    }
                case ColumnSettingType.Currency:
                    {
                        oRange = (Excel.Range)oSheet.Range[oSheet.Cells[index, i + 1], oSheet.Cells[index + count, i + 1]];
                        var format = "$ #,##0.00";
                        oRange.NumberFormat = format; 
                        oRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignRight;
                        break;
                    }
                case ColumnSettingType.Percentage:
                    {
                        oRange = (Excel.Range)oSheet.Range[oSheet.Cells[index, i + 1], oSheet.Cells[index + count, i + 1]];
                        oRange.NumberFormat = "0.00%";
                        oRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignRight;
                        break;
                    }
                case ColumnSettingType.Date:
                    {
                        oRange = (Excel.Range)oSheet.Range[oSheet.Cells[index, i + 1], oSheet.Cells[index + count, i + 1]];
                        oRange.NumberFormat = "MM/dd/yyyy";
                        oRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignRight;
                        break;
                    }
            }
            oSheet.Cells[row, i + 1] = columns[i].ColumnName;
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

Нужна помощь в том, что я делаю неправильно, и мне нужно настроить какую-то культуру.


person Ghazanfar Khan    schedule 26.03.2018    source источник
comment
Я предполагаю, что проблема в том, что вы получаете символ фунта вместо знака доллара? В этом случае может показаться, что это проблема культуры, и нам нужно увидеть код, чтобы сообщить, где вам нужно указать культуру, которая даст вам знак доллара (хотя странно, что он не делал точку для разделитель тысяч и запятая для десятичного числа)   -  person juharr    schedule 26.03.2018
comment
Какой код вы хотите увидеть? Я хочу динамически добавлять символы независимо от культуры. У меня есть разные символы для отчета, такие как доллар и евро. Я хочу, чтобы они были напечатаны со значением, пока я проверяю это, я сталкиваюсь с этой проблемой.   -  person Ghazanfar Khan    schedule 26.03.2018
comment
Возможно, это ты ищешь.   -  person juharr    schedule 26.03.2018
comment
Можете ли вы поделиться примером для этого   -  person Ghazanfar Khan    schedule 26.03.2018
comment
oRange.NumberFormat.ModelFormatCurrency = $; когда я устанавливаю это, выдается ошибка, говорящая, что строка не содержит определения для «ModelFormatCurency»   -  person Ghazanfar Khan    schedule 26.03.2018
comment
Это потому, что NumberFormat это string. Документация не так хороша, поэтому я не вижу, где это устанавливается. Это может быть что-то, что вам нужно установить на уровне рабочей книги. Это все, что я могу предложить.   -  person juharr    schedule 26.03.2018
comment
@juharr: Вы правы, документация для этого очень плохая, но символ валюты можно указать для каждой отдельной ячейки/диапазона (поле параметров, когда установлен формат валюты — кажется, что NumberFormat всегда идентифицируется с $ независимо от символа валюты) — так что он должен быть установлен для объекта Range.   -  person PaulF    schedule 26.03.2018


Ответы (1)


Похоже, что свойство NumberFormat использует символ $, чтобы указать, что ячейка находится в формате валюты, который, насколько я вижу, использует текущий символ валюты локали.

Фактический символ валюты, используемый для ячейки/диапазона, можно задать в свойстве NumberFormatLocal.

Оба параметра должны отображать значение как «1016,89 долларов США».

 var format = "$ #,##0.00";
 oRange.NumberFormat = format;
 oRange.NumberFormatLocal = format;
person PaulF    schedule 26.03.2018
comment
Большое спасибо, я ценю это. - person Ghazanfar Khan; 26.03.2018