如何以编程方式评估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值
答案 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和其他成员要检查)。
最后一条评论,你可以轻松减少这个例子中的行数,我只是想强调每一步。