0

我正在使用C# 和电子表格灯将数据表数据导出到 Excel。我的代码正在运行,但是当我打开 excel 文件时,我发现大多数单元格值都显示此警告。警告消息是此单元格中的数字被格式化为文本

在将数据保存到 excel 之前,我以这种方式设置整个范围的格式

 SLStyle standardstyle = new SLStyle();
 standardstyle.FormatCode = "#,##0.00";
 sheet.SetCellStyle("A1", "E6", standardstyle);

但仍然没有运气。打开 xls 文件后收到相同的警告。

我的数据表有数字数据等数据,很少有单元格有公式。如果可能的话,我想通过电子表格灯来评估公式。如果不可能,那么我想通过电子表格灯将数据保存到 excel 文件中,结果 excel 将评估公式,但我的错误是什么不清楚我收到此警告此单元格中的数字被格式化为文本和公式不是评估是因为单元格中的数值变为文本而不是数字。

我试过这种方式

1)首先我用数字数据和公式填充数据表,在第二阶段我通过电子表格灯加载该数据表并为整个范围设置格式代码,并通过电子表格灯将该数据保存到 Excel。

当我打开由电子表格灯生成的 excel 文件时,我发现警告仍然存在并且未评估公式。公式显示 0 作为结果值。

查看我的数据表的屏幕截图,结果可以清楚地知道数据是如何存储在数据表中的。 数据表截图

第一组代码

            string strSum = "", strColName, strImmediateOneUp = "", strImmediateTwoUp = "";

            int startsum = 0;
            int currow = 0;
            bool firstTimeSum = true;

            int NumRows = 6;
            int NumColumns = 5;

            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();


            DataTable dt = new DataTable();

            for (int col = 0; col < NumColumns; col++)
            {
                strColName = GenerateColumnText(col);
                DataColumn datacol = new DataColumn(strColName, typeof(object));
                dt.Columns.Add(datacol);
            }


            for (int row = 0; row < NumRows; row++)
            {
                dt.Rows.Add();

                for (int col = 0; col < NumColumns; col++)
                {
                    if (row < 2)
                    {
                        dt.Rows[row][col] = Convert.ToInt32(new Random().Next(1, NumRows));
                    }
                    else
                    {
                        if (firstTimeSum)
                        {
                            if (row - currow == 2)
                            {
                                currow = row;
                                startsum = 0;
                                firstTimeSum = false;
                            }
                            else
                            {
                                startsum = 1;
                            }
                        }
                        else
                        {
                            if (row - currow == 3)
                            {
                                currow = row;
                                startsum = 0;
                            }
                        }


                        if (startsum == 0)
                        {
                            strColName = GenerateColumnText(col);
                            strImmediateOneUp = strColName + ((row + 1) - 1).ToString();
                            strImmediateTwoUp = strColName + ((row + 1) - 2).ToString();
                            strSum = string.Format("=SUM({0}:{1})", strImmediateTwoUp, strImmediateOneUp);
                            dt.Rows[row][col] = strSum;
                        }
                        else
                        {
                            dt.Rows[row][col] = Convert.ToInt32(new Random().Next(1, NumRows));
                        }
                    }

                }

                startsum = 1;
            }

第二组代码

    SLThemeSettings stSettings = BuildTheme();
    SLDocument sheet = new SLDocument(stSettings);
    sheet.ImportDataTable(1, 1, dt, false);
    //standard number format
    SLStyle standardstyle = new SLStyle();
    standardstyle.FormatCode = "#,##0.00";
    sheet.SetCellStyle("A1", "E6", standardstyle);

    sheet.SaveAs("d:\\SpreadsheetLight_formula.xlsx");
    sheet.Dispose();

我想要的输出将是公式评估并在公式单元格中显示正确的值。如果不将数据保存到 Excel,电子表格灯可以评估公式并显示正确的值吗?如果可能的话,请告诉我。

请查看我的代码并告诉我我需要在我的代码中添加或更改什么,因为应该评估结果公式。谢谢

4

0 回答 0