如何评估Excel格式字符串

时间:2011-06-29 00:26:11

标签: c# excel format

如何以编程方式评估Excel格式字符串?

我是以编程方式创建基于特定格式的数据的Excel单元格,例如xml in 一些细胞;有些格式字符串需要应用于它们。

例如“[Red]#,## 0.00”对于987564.63635

在填入单元格之前,我想检查(基本上只有颜色)单元格或文本。 如果它不能很好地显示给用户,例如浅黄色非常糟糕,用户几乎看不到这种颜色。

所以在创建单元格之前,我需要知道格式字符串的颜色 例如“[Red]#,## 0.00”或“[Color 32] dd / mm / yyyy”或更复杂的Excel格式字符串。

我想知道。是否有某种类型的图书馆可以完成这项工作? 或.net已经有这种功能了吗? 或者我必须自己做?

示例

e.g 如果格式字符串是“[Red]#,## 0,00”, 我想知道字符串上[Red]基础的相应Sysmte.draw.Color。 或相应的网页颜色,ff0000,基于字符串的[红色] 或相应的RGB值

1 个答案:

答案 0 :(得分:2)

您可以使用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和其他成员要检查)。

最后一条评论,你可以轻松减少这个例子中的行数,我只是想强调每一步。