Csharp/C#教程:EPPlus将Excel Spreadsheet列转换为随机负值分享


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

(0)
上一篇 2021年12月29日
下一篇 2021年12月29日

精彩推荐