我有一个C#方法,请参见下面的代码,该方法使用EPPlus生成Excel电子表格。该方法采用3个字符串,其中一个是名为csv的竖线分隔字符串,其中包含我的数据。我正在使用的数据有14列,在第14列中,我的数据看起来像:103.01.06或01.01,或其他一些用句点分隔的数值。我看到的问题是,如果该值为103.01.06,则EPPlus会将其转换为值-656334。有什么办法可以解决这个问题?

    private void GenerateSpreadsheet(string id, string csv, string worksheetName)
    {
        using (ExcelPackage pck = new ExcelPackage())
        {
            ExcelWorksheet ws = pck.Workbook.Worksheets.Add(worksheetName);

            ws.Cells["A1"].LoadFromText(csv, new ExcelTextFormat{Delimiter = '|'});

            Response.AddHeader("Content-Disposition",
                String.Format("attachment; filename={0}.xlsx", id));
            Response.ContentType =
                "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
            Response.BinaryWrite(pck.GetAsByteArray());
            Response.End();
        }
    }

最佳答案

如果您没有通过ExcelTextFormat对象的Datatypes属性指定列类型,则EPPlus会假定该列为未知。由于您有14列,并且在第14列中遇到数据问题,因此需要为每个先前的列指定类型。在不知道您的数据类型的情况下,我只列出了14个eDataTypes.String实例,但是eDataTypes.Number等也可以使用。

EPPlus在为列分配类型时会做出猜测。

private void GenerateSpreadsheet(string id, string csv, string worksheetName)
{
    using (ExcelPackage pck = new ExcelPackage())
    {
        ExcelWorksheet ws = pck.Workbook.Worksheets.Add(worksheetName);

        ws.Cells["A1"].LoadFromText(csv, new ExcelTextFormat { Delimiter = '|',
            DataTypes = new eDataTypes[] { eDataTypes.String, eDataTypes.String,
                eDataTypes.String, eDataTypes.String, eDataTypes.String,
                eDataTypes.String, eDataTypes.String, eDataTypes.String,
                eDataTypes.String, eDataTypes.String, eDataTypes.String,
                eDataTypes.String, eDataTypes.String, eDataTypes.String } });

        Response.AddHeader("Content-Disposition",
            String.Format("attachment; filename={0}.xlsx", id));
        Response.ContentType =
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
        Response.BinaryWrite(pck.GetAsByteArray());
        Response.End();
    }
}

关于c# - EPPlus将Excel电子表格列转换为随机负值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8358966/

10-11 17:39