我有一个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/