C# 如何知道Excel单元格的格式

C# 如何知道Excel单元格的格式,c#,C#,我知道Excel单元格的格式是什么。NumberFormat,但它返回的是格式,而不是类型。。。基本上我需要知道它是否是定制的,然后它应该返回定制,如果它是货币,它应该返回货币或任何其他数据类型 请帮助我这取决于,如果它是一个xslx文件(打开XML excel),那么您可以解压缩xlslx文件(xlsx是一个zip文件),并检查该特定单元格的xl\worksheets\sheet{?}.XML文件 不过,这可能是一种过于复杂的方法。从Excel范围获取数字格式后,您可以使用或转换它。请记住,如

我知道Excel单元格的格式是什么。NumberFormat,但它返回的是格式,而不是类型。。。基本上我需要知道它是否是定制的,然后它应该返回定制,如果它是货币,它应该返回货币或任何其他数据类型
请帮助我

这取决于,如果它是一个xslx文件(打开XML excel),那么您可以解压缩xlslx文件(xlsx是一个zip文件),并检查该特定单元格的xl\worksheets\sheet{?}.XML文件


不过,这可能是一种过于复杂的方法。

从Excel范围获取
数字格式后,您可以使用或转换它。请记住,如果定制,混合格式是可能的

如果只需要基本值(Excel 2010下拉列表中的默认值):

  • “0.00”-数字
  • “$#,##0.00”-货币
  • “($*),##############################
  • “年月日”-短日期
  • “[$-F800]dddd,mmmm dd,yyyy”-长日期
  • “[$-F400]h:mm:ss AM/PM”-时间
  • “0.00%”-百分比
  • “#?/?”-分数
  • “0.00E+00”-科学
  • “@”-文本
  • “一般”-一般
我通过录制宏并修改所选单元格的数字格式来获得这些值


编辑:
如果您使用的是Excel interop库(我知道如何访问
NumberFormat
函数的唯一方法),则可以获得更多帮助,以了解您想要去的地方:


为使用找到的互操作库而进行的设置。

在后台,Excel以一种特殊的方式存储值(大多数数据类型实际上是双倍的),这使得在没有Excel帮助的情况下检测单元格格式变得很困难

因此,我建议您利用内置的Excel
单元格
函数,而不是自己查询数据类型:

private void button1_Click(object sender, EventArgs e) 
{
    //C1 is a cell I use to evaluate the Format of Cells A1 thru to A7
    using (var rnEvaluate = xlApp.Range["C1:C1"].WithComCleanup())
    {
        for (int i = 1; i < 8; i++)
        {
            rnEvaluate.Resource.Value2 = "=CELL(\"format\",A" + i.ToString() + ")";
            string cellFormat = GetExcelCellFormat(rnEvaluate.Resource.Value2);
            System.Diagnostics.Debug.Write(cellFormat);
        }
    } 
}

private string GetExcelCellFormat(string cellFormat = "G") 
{
    switch (cellFormat.Substring(0, 1))
    {
        case "F" :
            return "Number";
            break;
        case "C":
            return "Currency";
            break;
        case "D":
            return "Date";
            break;
        default :
            return "General";
            break;
    } 
}

private void按钮1\u单击(对象发送者,事件参数e)
{
//C1是我用来评估单元格A1到A7格式的单元格
使用(var rnEvaluate=xlApp.Range[“C1:C1”].WithComCleanup())
{
对于(int i=1;i<8;i++)
{
rnEvaluate.Resource.Value2=“=单元格(\“格式\”,一个“+i.ToString()+”);
字符串cellFormat=GetExcelCellFormat(rnevalue.Resource.Value2);
系统.诊断.调试.写入(cellFormat);
}
} 
}
私有字符串GetExcelCellFormat(string cellFormat=“G”)
{
开关(cellFormat.Substring(0,1))
{
案例“F”:
返回“数字”;
打破
案例“C”:
返回“货币”;
打破
案例“D”:
返回“日期”;
打破
违约:
返回“一般”;
打破
} 
}

ps
.WithComCleanup()
是因为我正在使用

此外,如果您觉得您所标记的答案不足以满足您的需要,请随意更改已接受的答案。这并不能回答问题Jon,请尝试
数字格式
-它会弹出“一般”字样尽管单元格是货币、日期或其他格式。链接也没有多大帮助。@Jeremy-当设置了单元格编号格式时,请参见我上面的编辑
NumberFormat
返回前面提到的值,并在提供的链接中找到。我想可以用OP-“我知道有.NumberFormat,但它返回的是格式,而不是类型…”如果任务需要在服务器KB257757上完成,它并不太复杂。问题是像我这样的方法,单元格数据类型描述不完整,例如在XML中,单元格数不指定小数位:
:(
private void button1_Click(object sender, EventArgs e) 
{
    //C1 is a cell I use to evaluate the Format of Cells A1 thru to A7
    using (var rnEvaluate = xlApp.Range["C1:C1"].WithComCleanup())
    {
        for (int i = 1; i < 8; i++)
        {
            rnEvaluate.Resource.Value2 = "=CELL(\"format\",A" + i.ToString() + ")";
            string cellFormat = GetExcelCellFormat(rnEvaluate.Resource.Value2);
            System.Diagnostics.Debug.Write(cellFormat);
        }
    } 
}

private string GetExcelCellFormat(string cellFormat = "G") 
{
    switch (cellFormat.Substring(0, 1))
    {
        case "F" :
            return "Number";
            break;
        case "C":
            return "Currency";
            break;
        case "D":
            return "Date";
            break;
        default :
            return "General";
            break;
    } 
}