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单元格的格式 的相关文章

  • EPPlus:将样式复制到范围

    我想将新行 列插入到工作表中 并应用插入的行 列的样式 背景颜色 边框等 这就是我添加新行的方式 xlsSheet InsertRow 18 RowCount 然后我想将 基 行的样式复制 应用到新插入的行 for int i 0 i lt
  • EPPlus,查找并设置命名范围的值

    我一直在努力尝试使用 ExcelPackage 3 0 1 库设置命名范围 在本例中为单个命名单元格 的值 它应该像这样简单 ExcelNamedRange er xlPackage Workbook Names Customer er V
  • EPPlus 日期单元格数据类型不起作用

    我有一些代码接受 IEnumerable 并从中生成 Excel 文档 IEnumerable 中的对象有一个日期字段 我希望将它们格式化为 Excel 中的日期 但是 当您在 Excel 中查看时 日期似乎不是 日期 数据类型 直到您双击
  • 如何使用 EPplus 在 Excel 中获得部分单元格样式?

    我的单元格中有一些斜体文本和一些非斜体文本 如何保留格式 我查看了 OfficeOpenXml Style ExcelStyle 并看到悬空的粗体 斜体等选项 但这些选项适用于整个单元格 有没有办法使用 eppplus 来判断哪些文本以某种
  • 将表而不是范围定义为数据透视表“cacheSource”

    我正在构建一个工具来自动创建包含表和关联数据透视表的 Excel 工作簿 表结构位于一张纸上 稍后将使用另一种工具从数据库中提取数据 数据透视表位于第二个工作表上 使用前一个工作表中的表作为源 我正在使用 EPPlus 来促进构建该工具 但
  • 如何使用 EPPlus 从 Excel 文件 (xlsx) 获取/读取图片

    假设我有一个名为sheet1其中包含一张名为pic 001我怎样才能得到这张图片System Drawing Image object 好的 我找到了如何 public static Image GetImage string sheetn
  • C# EPPlus 合并 Excel 文件

    我想在 C 中使用 EPPlus 合并多个 Excel 文件 我做了以下事情 using MemoryStream protocolStream new MemoryStream ExcelPackage pck new ExcelPack
  • 从 Excel 单元格读取

    我在用EPPlus http epplus codeplex com 用于从 xlsx 文件读取的包 我需要从单元格中读取 TimeSpan 对象 Excel 单元格将包含 hh mm 格式的数据 例如 09 00 或 18 30 不带引号
  • 使用 EPPlus 加载大量 Excel 数据

    我有一个基本的 winforms 应用程序 用户可以上传 excel 文件 xlsx 并且我想读取该文件的内容 因此我使用 EPPlus 问题是 我正在尝试加载一个非常大的 Excel 文件的内容 它有 7 个选项卡 其中一个选项卡有超过
  • 如何使用 EPPlus 将 Excel 行解析回类型

    EPPlus 有一个方便的LoadFromCollection
  • EPPlus 的通用 Excel 生成器函数

    如何为 LINQ 查询构建通用 EPPlus 电子表格函数 更新 该需求专门针对 ASP NET MVC 应用程序 我所做的只是创建一个接受列表的通用函数 我使用反射来获取属性列表 这将成为我们的列标题 最后 我只是让 EPPlus 完成所
  • Epplus插入图表ColumnStacked3D切换行/列

    我正在使用 epplus 在我的程序中创建 Excel 我需要插入柱形图 这是我的代码 Add the chart to the sheet var chart sheet Drawings AddChart chartTitle eCha
  • 如何读取作为 Blob 文件存储在 Azure 存储中的 Excel 文件

    我想使用 C 中的 Epplus 包读取作为 Blob 存储在 Azure 存储容器中的 Excel 文件 我尝试用这段代码做一些事情 string uri blob Uri AbsoluteUri FileInfo fileInfo ne
  • EPPlus 依赖循环

    从 PowerShell 安装 EPPlus 时 我得到以下信息 所有命令都是第一次运行 PackageSource Get PackageSource Name PSGallery if PackageSource IsTrusted S
  • 如何在 Epplus 饼图中显示带小数的百分比?

    在 EPPLUS 饼图中 默认情况下百分比自动四舍五入 如何以编程方式显示 2 位小数 10 75 而不是 11 我只提供值 整数 百分比由组件自动计算 在 EPPlus 中并没有真正看到设置它的选项 必须在Serie DataLabel
  • 将数据集导出到 Excel 2007 EPPlus

    我正在尝试将数据集导出到 excel 2007 我无法使用用于在内容类型中使用 mime 类型导出的正常代码 如下所示 Response ContentType application ms excel 如果我对 xls 使用 mime 类
  • 调试时 Epplus Save()、SaveAs() 等方法运行速度非常慢

    环境 Windows 10 Visual Studio 2017 netcore2 0 调试版本 在调试时使用 Epplus 4 1 1 保存 Excel 文件时 保存操作花费的时间比我预期的要长得多 这是使用 调试 gt 开始调试 运行时
  • 公式不使用 EPPLUS 计算

    我想转让一个Datatable超越并计算总和 为此 我使用 epplus 这是我的代码 Sheet Cells A1 LoadFromDataTable dsExcel Tables 0 true TableStyles Medium9 S
  • C# ExcelPackage (EPPlus) DeleteRow 不会更改工作表尺寸?

    我正在尝试构建一个数据导入工具 它接受用户的 EXCEL 文件并解析文件中的数据以将数据导入到我的应用程序中 我在删除行时遇到了一个奇怪的问题 我似乎无法在网上找到任何信息 尽管似乎以前有人遇到过这个问题 如果这是一个重复的问题 我很抱歉
  • 是否可以用公式读取Excel单元格值?

    在我的以下代码中 c4 的值为零 C4 单元格的公式为 SUM C2 C3 EPPlus能够读取带有公式的单元格吗 为什么 c4 被设置为零而不是 12 using var package new ExcelPackage existing

随机推荐