EPPlus – LoadFromCollection – 文本转换为数字

我在C#中编写一个程序,需要将一个List<MyObject>导出到Excel中,并使用EPPlus来执行此操作。

我的挑战是我的对象有一个属性:

 string Prop1 { get; set; } 

而且,我需要导出的其中一个值具有一个值,例如Prop1 = "123E4"的forms。

挑战在于EPPlus LoadFromCollection方法将其导出到Excel,但Excel使用科学记数法(Outputted value = 1.23E+061230000 )将其转换为数字。

我已经尝试将整个列设置为.Style.Numberformat.Format = "@" (和任何其他我可以想到的样式),我甚至尝试在调用LoadFromCollection方法之前和之后设置样式。

我也在string之前尝试了一个字符,但是实际上在那个字段中的每个单元格中都保留了这个字符,这使得这个值对于分析是不正确的。

我正在玩我的List转换为DataTable,以便使用LoadFromDataTable方法,但即使这似乎不工作。

任何想法/build议如何可以导出为纯文本

如果您的string看起来像数字,则Excel将使用单元格angular落中的绿色三angular形警告您。 这是假设你正在转换数字(如果他们是数字)使用类似.ToString()string。 在Excel中无法解决这个问题,但是您可以使用XMLpipe理来打开禁用警告消息,因为EPPlus本身没有这个能力。

像这样的事情会做到这一点:

 public class TestObject { public int Col1 { get; set; } public int Col2 { get; set; } public string Col3 { get; set; } } [TestMethod] public void Number_String_Test() { //Throw in some data var datalist = new List<TestObject>(); for (var i = 0; i < 10; i++) { datalist.Add(new TestObject { Col1 = i, Col2 = i *10, Col3 = (i*10) + "E4" }); } //Create a test file var fi = new FileInfo(@"c:\temp\numtest.xlsx"); if (fi.Exists) fi.Delete(); using (var pck = new ExcelPackage(fi)) { var worksheet = pck.Workbook.Worksheets.Add("Sheet1"); worksheet.Cells.LoadFromCollection(datalist); //This would be the variable drawn from the desired cell range var range = "C1:C11"; //Get reference to the worksheet xml for proper namspace var xdoc = worksheet.WorksheetXml; //Create the import nodes (note the plural vs singular var ignoredErrors = xdoc.CreateNode(XmlNodeType.Element, "ignoredErrors", xdoc.DocumentElement.NamespaceURI); var ignoredError = xdoc.CreateNode(XmlNodeType.Element, "ignoredError", xdoc.DocumentElement.NamespaceURI); ignoredErrors.AppendChild(ignoredError); //Attributes for the INNER node var sqrefAtt = xdoc.CreateAttribute("sqref"); sqrefAtt.Value = range; var flagAtt = xdoc.CreateAttribute("numberStoredAsText"); flagAtt.Value = "1"; ignoredError.Attributes.Append(sqrefAtt); ignoredError.Attributes.Append(flagAtt); //Now put the OUTER node into the worksheet xml xdoc.LastChild.AppendChild(ignoredErrors); pck.Save(); } }