如何评估Excel格式字符串

本文关键字:Excel 格式 字符串 评估 何评估 | 更新日期: 2023-09-27 18:00:41

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

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

例如987564.63635 的"[红色]#,##0.00"

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

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

我想知道。有什么图书馆可以做这项工作吗?或者.net已经有这种功能了?还是我必须自己做?

样本

例如如果格式字符串为"[Red]#,##0,00",我想知道字符串上[Red]基的相应Sysmte.draw.Color。或字符串上[红色]的相应网页颜色ff0000或相应的RGB值

如何评估Excel格式字符串

您可以使用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.文本保存单元格的可见(用户)值(结果)。

r.NumberFormat保存格式字符串-在您的示例中,它将保存"[Red]#,##0.00"。

从那里开始,你需要在NumberFormat成员上使用任何字符串操作技术(我建议使用正则表达式)来找到你想要的颜色或任何其他东西。

EDIT,以下是regExp和TypeCovertor的一些用法,用于完成字符串到颜色对象的转换。(继续以上来源)

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和其他成员需要检查)。

最后一点,你可以很容易地减少这个例子中的行数,我只是想强调一下每一步。