Как оценить строку формата Excel - PullRequest
0 голосов
/ 29 июня 2011

Как программно оценить строку формата Excel?

Я программно создаю ячейки Excel на основе данных в определенном формате, например, в XML некоторые из клеток; есть строки формата, которые необходимо применить к ним.

например, "[Красный] #, ## 0,00" для 987564,63635

перед заполнением ячейки я хочу проверить (в основном только цвета) ячейку или текст. Если он плохо отображается для пользователя, например, светло-желтый очень плох, пользователь вряд ли увидит этот цвет.

Итак, до создания ячейки мне нужно узнать цвет из строки формата например, «[Красный] #, ## 0,00» или «[Цвет 32] дд / мм / гггг» или еще более сложная строка формата Excel.

Я хочу знать. Есть ли какая-нибудь библиотека, которая может сделать эту работу? или .net уже имеет такую ​​функцию? или я должен сделать это сам?

Sample

например если строка формата "[Red] #, ## 0,00", я хочу знать соответствующий Sysmte.draw.Color для базы [Red] в строке. или соответствующий веб-цвет, ff0000, для [Red] базы на строке или соответствующие значения RGB

1 Ответ

2 голосов
/ 29 июня 2011

Вы можете использовать объект диапазона Excel для доступа ко всем настройкам конфигурации ячейки.

, например:

Worksheet sheet = excelApp.ActiveWorkbook.ActiveSheet;
Range r = sheet.Cells[1, 1];
MessageBox.Show(r.Value2 + "\n" + r.Text + "\n" + r.NumberFormat);

r.Value2 содержит значение подчеркивания ячейки (формула).

r.Text содержит видимое (пользовательское) значение ячейки (результат).

r.NumberFormat содержит строку формата - в вашем примере она будет содержать «[Red]#, ## 0,00 ".

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

РЕДАКТИРОВАТЬ , здесь приведено некоторое использование regExp и TypeCovertor для выполнения преобразования строки в объект Color.(с продолжением к указанному выше источнику)

string formatString = r.NumberFormat;
Regex colorRegExp = new Regex(@"^\[(?<color>\S+)\]", RegexOptions.Compiled);

Color resultColor;
System.ComponentModel.TypeConverter converter = System.ComponentModel.TypeDescriptor.GetConverter(new Color());

Match m = colorRegExp .Match(formatString);
if (true == m.Success)
{
   string colorString = m.Groups["color"].Value;
   resultColor = (Color)converter.ConvertFromString(colorString);
}

Объект регулярного выражения компилируется в сборку для производительности.Я предполагаю, что использование объекта Color resultColor - это то, что вы можете понять сами (в нем есть ARGB и другие члены для изучения).

И последний комментарий, вы можете легко уменьшить количество строк в этом примере, я просто хотелподчеркнуть каждый шаг на пути.

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