EPPlus将Excel Spreadsheet列转换为随机负值
我有一个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个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(); } }
它似乎被解释为DateTime
,也许是一个bug。
试试这个:
var format = New ExcelTextFormat() format.Delimiter = '|'; ws.Cells("A1").LoadFromText(csv, format); var colNumber = 14; var colRange = ws.Cells(1, colNumber, ws.Dimension.End.Row, colNumber); colRange.Style.Numberformat.Format = "@";
如果这不起作用,请尝试在LoadFromText
CSV之前设置格式。
例如:
var csv = IO.File.ReadAllText(csvPath); var ws = pck.Workbook.Worksheets.Add("Test"); var format As New ExcelTextFormat(); format.Delimiter = '|'; // if columns 4 shall not be interpreted like a DateTime format.DataTypes = { null, null, null, eDataTypes.String }; var range = ws.Cells("A1").LoadFromText(csv, format);
注意:您必须为每列提供DataType。 但我已经用null
测试了它,如果你不想指定类型似乎工作。 如果它没有编译,请随意更改(从VB.NET手动转换)。
上述就是C#学习教程:EPPlus将Excel Spreadsheet列转换为随机负值分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1008720.html