c# - 使用 EPPlus 如何生成电子表格,其中数字是数字而不是文本

标签 c# excel epplus

我正在从 List<object[]> 创建电子表格使用 LoadFromArrays

数组的第一个条目是标题,其他条目可能是数字、文本或日期(但列表中的每个数组都相同)。

生成的 Excel 工作表带有绿色三角形警告,表示数字已格式化为文本。

我遍历所有单元格并将它们的格式设置为 Number,就像这样 ws.Cells[i, j].Style.Numberformat.Format = "0";

但是问题仍然存在,我仍然看到绿色警告,即使当我查看 Format Cell... 时数字格式设置为数字也是如此。对话。

我在这里有哪些选择?我有可能更多地了解每列中的类型,但我该如何设置列标题?

有比 EPPlus 更好的解决方案吗?或者我可以在下载之前对电子表格进行更多后期处理?

最佳答案

由于您使用的是对象数组,它们可以包含数字和看起来像数字的字符串,因此您必须遍历每个对象并确定其类型:

[TestMethod]
public void Object_Type_Write_Test()
{
    //http://stackoverflow.com/questions/31537981/using-epplus-how-can-i-generate-a-spreadsheet-where-numbers-are-numbers-not-text
    var existingFile = new FileInfo(@"c:\temp\temp.xlsx");
    if (existingFile.Exists)
        existingFile.Delete();

    //Some data
    var list = new List<Object[]>
    {
        new object[]
        {
            "111.11",
            111.11,
            DateTime.Now
        }
    };

    using (var package = new ExcelPackage(existingFile))
    {
        var ws = package.Workbook.Worksheets.Add("Sheet1");
        ws.Cells[1, 1, 2, 2].Style.Numberformat.Format = "0";
        ws.Cells[1, 3, 2, 3].Style.Numberformat.Format = "[$-F400]h:mm:ss\\ AM/PM";

        //This will cause numbers in string to be stored as string in excel regardless of cell format
        ws.Cells["A1"].LoadFromArrays(list);

        //Have to go through the objects to deal with numbers as strings
        for (var i = 0; i < list.Count; i++)
        {
            for (var j = 0; j < list[i].Count(); j++)
            {

                if (list[i][j] is string)
                    ws.Cells[i + 2, j + 1].Value = Double.Parse((string) list[i][j]);
                else if (list[i][j] is double)
                    ws.Cells[i + 2, j + 1].Value = (double)list[i][j];
                else
                    ws.Cells[i + 2, j + 1].Value = list[i][j];

            }
        }

        package.Save();
    }
}

通过上面的代码,您会看到下图作为输出 注意左上角带有绿色箭头的单元格,因为它是由 LoadFromArray 编写的字符串,看起来像一个数字:

Excel Output

关于c# - 使用 EPPlus 如何生成电子表格,其中数字是数字而不是文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31537981/

相关文章:

windows-7 - 缺少 Microsoft 进度条控件

使用 EPPlus 与 Spreadsheet Gear 读取/写入多个文件时的性能差异

excel - 如何使用 EPPlus 将电子表格单元格的内容设置为会计格式?

c# - 为什么将项目添加到解决方案而不是文件夹?

c# - 如何获取在windows azure中进行的查询的集合?

c# - 尝试使用 INSERT 方法但不起作用

java - 在不打开excel文档的情况下用java打印整个Excel工作簿

excel - Excel 2007 是否有一个函数可以计算某个值在某个范围内出现的次数?

c# - 创建以 'object' 类型运行的扩展方法是否会影响性能?

c# - 使用 epplus c# 设置 Excel 工作表单元格的自定义 BackgroundColor