gpt4 book ai didi

epplus - EPPLUS如何知道工作表单元格的格式

转载 作者:行者123 更新时间:2023-12-05 01:35:08 26 4
gpt4 key购买 nike

我正在使用EPPlus读取excel工作表并将数据加载到数据表中以执行进一步的操作,然后将修改后的数据保存回excel文件中。

下面的代码检查单元格值是否为浮点值,然后将浮点值转换为日期时间。

当单元格值为日期时,该代码可以正常工作,例如:Invoice Date = 42009,但是它将非日期值(例如:amount = 10)转换为日期。

EPPlus库中有什么方法可以确定单元格的格式(即“常规” /“日期” /“数字”等)?

float floatValue;

if (float.TryParse(Convert.ToString(oSheet.Cells[i, j].Value), out floatValue)
&& Convert.ToString(oSheet.Cells[i, j].Style.Numberformat.Format).Contains("[$-409]d\\-mmm\\-yy;@"))
{
dr[j - 1] = String.Format("{0:d-MMM-yy}", DateTime.FromOADate(floatValue));
}
else
{
DateTime date;

if (DateTime.TryParse(Convert.ToString(oSheet.Cells[i, j].Value), out date))
{
dr[j - 1] = String.Format("{0:d-MMM-yy}", date);
}
else
{
dr[j - 1] = Convert.ToString(oSheet.Cells[i, j].Value).Trim();
}
}

最佳答案

简短的答案是,如果Excel中的数据格式设置为“适当的”日期字段(其格式设置为“日期”,并且在单元格角中没有三角形),EPPlus将确定该格式并将其自动转换为日期。单元存储。

Excel将这些信息存储在XLSX xml文件中,例如sheet1.xml和styles.xml,您可以通过将文件扩展名更改为.ZIP并作为压缩文件夹打开来查看。因此,EPPlus将读取XML标志并将字段值自动转换为DateTime。如果要查看其详细信息,请下载EPPlus源代码,并查看ExcelWorksheet类中的函数private void SetValueFromXml(XmlTextReader xr, string type, int styleID, int row, int col)

我创建了一个工作表,添加了一个日期值,然后将该值复制粘贴到单元格B2中,然后将格式设置为数字。然后,我将B2复制到B3,但在B3中将值前面加一个'作为字符串。像这样:



当我运行此单元测试时,一切都通过了:

[TestMethod]
public void Date_Number_Test()
{
//http://stackoverflow.com/questions/28591763/epplus-how-to-know-the-format-of-the-worksheet-cell
var existingFile = new FileInfo(@"c:\temp\datetest.xlsx");

using (var package2 = new ExcelPackage(existingFile))
{
var ws = package2.Workbook.Worksheets["Sheet1"];

var cell = ws.Cells["B1"];
Assert.IsTrue(cell.Value is DateTime);

cell = ws.Cells["B2"];
Assert.IsTrue(cell.Value is double);

cell = ws.Cells["B3"];
Assert.IsTrue(cell.Value is string);
}
}


但是,如果您要处理的表格超出了您的控制范围,那么我认为您的方法是正确的,因为您必须确定数字的“意图”是什么,然后才能依靠EPPlus(确实是Excel)进行报告他们作为。

关于epplus - EPPLUS如何知道工作表单元格的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28591763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com