在现有文档中编辑范围NumberFormat

时间:2012-10-25 09:01:10

标签: c# .net excel-interop number-formatting

我无法更改现有Excel文档(xlsx)中的列格式。列内容实际上是数字,但显示为文本,因此绿色三角形显示单元格显示为文本。

所以我在C#app中打开这个文档并执行以下操作:

sheet_.Range[sheet_.Cells[1, 2], sheet_.Cells[rowNum, 2]].EntireColumn.NumberFormat = "0";                

但它并没有改变列以将内容显示为数字(它们保持左侧对齐)

5 个答案:

答案 0 :(得分:3)

我知道这是一个老帖子,但我一直在处理同样的问题。我收到的.xlsx文件已经有绿色三角形表示“Number as Text”错误。我找不到一种方法以编程方式运行Excel错误检查命令“转换为数字”,您可以通过单击Excel来执行此操作,并且更改具有这些错误的单元格上的NumberFormat不适用于我,但我能够使用TextToColumns方法“刷新”单元格格式。

int lastCol = sheet.UsedRange.Columns.Count;
        if(lastCol > 1)
        {
            for (int i = 1; i <= lastCol; i++)
            {
                sheet.Columns[i].TextToColumns(Type.Missing, XlTextParsingType.xlDelimited, XlTextQualifier.xlTextQualifierNone);
            }

从那里你可以改变NumberFormat。我碰巧有很长的整数被用于科学记数法,所以我用它来使它们再次成为常规整数:

sheet.Cells.NumberFormat = "#";

(PS,如果有人找到关于用于自定义NumberFormats的符号的权威指南,我仍然试图找到一个!)

答案 1 :(得分:2)

尝试通过get_Range方法访问单元格值!例如,对于你想要的数字格式,假设你的excel单元格中有这个数字:1546,65

sheet_.get_Range("P10", "Q10").NumberFormat = "0"; // returns 1546
sheet_.get_Range("P10", "Q10").NumberFormat = "0,00"; // returns 1546,65
sheet_.get_Range("P10", "Q10").NumberFormat = "#.##0,00"; // returns 1.546,65

您可以使用这些数字格式!

希望它可以帮到你

答案 2 :(得分:0)

我找不到这个问题的理想解决方案,最后结束如下:

    sheet_.get_Range("A1", "A100").NumberFormat = "0";

    for(int i = 1; i <= 100; i++)
    {
       sheet_.Cells[1, i].Value = sheet_.Cells[1, i].Value;
    }

答案 3 :(得分:0)

我知道这是一个很老的帖子,但我偶然发现了这个并为此提供了解决方案。您是否尝试过不分配任何NumberFormat?默认情况下,excel根据单元格内容决定,因此如果您将数字存储为文本,则不会获得绿色三角形。如果您想要根据数据类型读取值,请参阅此帖子

http://www.codeproject.com/Articles/335589/Export-Multiple-Datasets-to-Multiple-Excel-sheets

答案 4 :(得分:0)

对于我使用样式 NumberFormatLocal 解决了问题:

sheet_.get_Range("A1", "A100").Style.NumberFormatLocal = "0";