EPPLUS如何知道Worksheet单元格的格式

2023-12-15

我正在使用 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 源代码并查看该函数private void SetValueFromXml(XmlTextReader xr, string type, int styleID, int row, int col)在 ExcelWorksheet 类中。

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

enter image description here

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

[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)正在报告他们作为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EPPLUS如何知道Worksheet单元格的格式 的相关文章

  • C# 创建/修改/读取 .xlsx 文件

    我正在寻找一种在 C 中创建 修改 读取 xlsx 文件的方法 而无需安装 Excel 或在服务器上创建文件 然后再提供给用户下载 我找到了NPOIhttp npoi codeplex com 看起来不错 但支持 xls 而不是 xlsx
  • 强制 EPPLUS 以文本形式读取

    我正在开发一个应用程序来读取 xlsx 文件 进行一些验证并插入数据库 不幸的是 当我尝试读取标记为数字的列 带有 EAN 13 代码的 fe 时 我得到了 int 的最小值 用户看不到这一点 因为 Excel 可以正确显示它 如何让它以纯
  • 如何将字典中的值添加到电子表格?

    我有一个模板电子表格文档 其中有两列 服务器名称和 IP 地址 如何填充电子表格 以便每个字典键位于 服务器 列中自己的单元格中 而相应的值位于 IP 列中它旁边的单元格中 我正在使用 EPPlus 库 但找不到有关该主题的任何内容 以下是
  • EPPlus,查找并设置命名范围的值

    我一直在努力尝试使用 ExcelPackage 3 0 1 库设置命名范围 在本例中为单个命名单元格 的值 它应该像这样简单 ExcelNamedRange er xlPackage Workbook Names Customer er V
  • EPPLUS如何知道Worksheet单元格的格式

    我正在使用 EPPlus 读取 Excel 工作表并将数据加载到数据表中以执行进一步的操作 然后将修改后的数据保存回 Excel 文件 下面的代码检查单元格值是否为浮点值 然后将浮点值转换为日期时间 当单元格值为日期时 代码可以正常工作 例
  • 使用 EPPlus 加载大量 Excel 数据

    我有一个基本的 winforms 应用程序 用户可以上传 excel 文件 xlsx 并且我想读取该文件的内容 因此我使用 EPPlus 问题是 我正在尝试加载一个非常大的 Excel 文件的内容 它有 7 个选项卡 其中一个选项卡有超过
  • EPPlus 的通用 Excel 生成器函数

    如何为 LINQ 查询构建通用 EPPlus 电子表格函数 更新 该需求专门针对 ASP NET MVC 应用程序 我所做的只是创建一个接受列表的通用函数 我使用反射来获取属性列表 这将成为我们的列标题 最后 我只是让 EPPlus 完成所
  • 在 EPPlus 中设置*两者*值和公式

    有什么办法可以设置吗both the Value Formula单元格的属性以便它们保留到写入的 XLSX 文件中 由于EPPlus不计算公式 它依赖excel来计算 所以我为用户预先计算结果 这样 如果他们不打开文件 而是重新上传文件 则
  • C# 中没有网格线的 epplus 图表(它是一个 Web 应用程序)

    没有网格线的图表 https i stack imgur com Kmx71 png我正在尝试使用 epplus 和 c 在 Excel 文件中创建图表 我能够创建图表 我正在尝试删除图表中的网格线 如图所示 我找到了在 Windows 应
  • 将数据集导出到 Excel 2007 EPPlus

    我正在尝试将数据集导出到 excel 2007 我无法使用用于在内容类型中使用 mime 类型导出的正常代码 如下所示 Response ContentType application ms excel 如果我对 xls 使用 mime 类
  • EPPlus:在单元格中定位图像

    我正在尝试使用 Epplus 将图像 插入 Excel 中的单元格 使用以下代码 private static void SetImage ExcelWorksheet sheet ExcelRange cell using WebClie
  • 如何在C#中使用EPPLUS的一个对象多次写入excel

    参考一些EPPLUS示例代码 只为一项活动创建一个epplus对象 ex using ExcelPackage package new ExcelPackage newFile activity 这意味着活动完成后 对象将被自动处理 接下来
  • 冻结 EPPlus 中的列(Excel 拆分函数)

    我一直在使用 EPPlus 来生成 Excel 文件 以满足我的项目要求我进行的导出数量 他们想要的大多数导出往往与他们遗留系统中已有的导出完美匹配 然而 其中之一 他们想要不同 他们希望它看起来与遗留系统的导出之一一模一样在他们完成一些典
  • 使用epplus创建.xlsm文件

    我正在尝试让网站导出 xlsm 文件 但似乎找不到任何有帮助的内容 这是我用来测试构建 xlsx 文件 有效 的一个简单示例 using OfficeOpenXml div Change file extension to xlsm to
  • 将 Linq 查询结果导出到 Excel EPPLUS

    我开发了一个程序来获取 Linq 查询并使用 EPPLUS 将其写入 excel 文件 下面的代码 但它很慢 因为它逐行填充文件 有没有办法一次把excel文件全部填满 一次将所有查询导出到 Excel 文件 fnctnData是查询结果
  • 在 EPPLUS 中读取 xlsx (2007) 文件时出错

    我在尝试读取 Excel 文件时遇到错误 xlsx 保存在Excel 2007 using EPPlus图书馆 一些解决方法 带有 EPPlus v 的 ASP net mvc 5 应用程序4 0 4 0 用户可以从我的网站下载模板文件 然
  • 如何使用 EPPlus 在 C# 中逐行读取 Excel 文件

    在我的 MVC 控制器中 我试图逐行读取 Excel 但是有一个问题 我希望能够将其映射到列表 模型类包含29个字段 public class GroupMembershipUploadInput public string chpt cd
  • 使用 EP Plus 允许工作表上有前导零

    您好 我正在将 Ep Plus 与网络应用程序一起使用 我正在创建一个 Excel 文件 用户可以填写该文件并将其上传回应用程序 当我输入带有前导零的数字时 它们会被截断 是否可以允许用户输入前导零 这个问题的公认答案对我来说不起作用 我发
  • 带有 EPPlus 2.9 的 Chrome 16 中出现“从服务器收到重复标头”错误

    我正在玩EPPlus 2 9 http epplus codeplex com 由于某种原因我得到Duplicate headers received from server当我尝试下载单曲时出现错误 xlsx使用 Chrome 16 的文
  • 工作表位置超出范围。连接已关闭。使用EPPLUS时

    我正在尝试使用 EPPLUS 4 0 3 打开 XLSX 文件作为模板 我什至使用了空白的 XLSX 文件 如果我不打开模板文件 空白文件或真实文件 而只是创建一个新工作簿并创建一个工作表 则它可以正常工作 或者 如果我打开模板文件并创建一

随机推荐