使用 EPPlus 加载大量 Excel 数据

2023-12-23

我有一个基本的 winforms 应用程序,用户可以上传 excel 文件 (.xlsx),并且我想读取该文件的内容,因此我使用 EPPlus。

问题是,我正在尝试加载一个非常大的 Excel 文件的内容,它有 7 个选项卡,其中一个选项卡有超过 200k 行,另一个选项卡有 70k 行。其他5个总共大约50k。

这些文件也只会继续变得更大。(最终目标)因为我想导入数据,读取数据,并且根据我拥有的规则/数据,我需要将数据写回Excel文件并将其导出。

我在使用 EPPlus 实现数据加载时遇到问题。

这是代码

var file = new FileInfo(filePath);
using (var package = new ExcelPackage(file))
{
    try
    {
        // Get the work book in the file
        ExcelWorkbook workBook = package.Workbook; //Hangs here for about 2 mins
        if (workBook != null)
        {
            if (workBook.Worksheets.Count > 0)
            {
                // Get the first worksheet
                ExcelWorksheet currentWorksheet = workBook.Worksheets.First();
                // gets the currentWorksheet but doesn't evaluate anything...

            }
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

该代码在 package.workbook 行上挂起大约 2 分钟。然后它进入 if 获取 currentWorkSheet 的位置,如果我在手表中查看该变量的内容,则不会真正加载任何内容,因为它显示:

由于先前的函数评估超时,函数评估被禁用。您必须继续执行才能重新启用函数评估。

我看了这个来自 EPPlus,它显示加载大文件的唯一问题是从上到下、从左到右加载,他们说超过 5,000 个。我有更多的东西,所以我只是想知道这是否可以通过 EPPlus 实现?

此外,我做了一些谷歌搜索,大多数问题是他们无法在服务器上打开大型 Excel 文件,而他们可以在本地打开...

我也开始研究 Open XML SDK,它似乎在性能方面更好,但在代码方面使用也更加困难。


这些听起来像是相当大的数据集,所以您可能想阅读以下内容:

EPPlus 大数据集问题并出现内存不足异常 https://stackoverflow.com/questions/26787443/epplus-large-dataset-issue-with-out-of-memory-exception/26802061#26802061

基本上,“更大”的数据集可能会耗尽 RAM。但增加大小的不仅仅是行数,还有列数和每个单元格的内容。字符串通常比数字占用更多的空间,因此有时很难预测 EPP 何时开始出现内存问题。有传言说最新版本的 EPP 更好,但我自己没有测试过。

看来您根据您的评论得到了它的工作,这很好,但请记住内存限制。我同意你的观点——用 Open XML 来做这件事并不是一个简单的练习。

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

使用 EPPlus 加载大量 Excel 数据 的相关文章

  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • 如何将 Unity.RegisterType 与 Moq 一起使用?

    我有一个统一的运行代码 现在我想使用 Moq 为 ASP MVC 进行单元测试 在 global asax 的代码中 我有以下内容 IUnityContainer container new UnityContainer container
  • C# 扩展方法 - 多远才算太远?

    Rails 为 Ruby 引入了一些核心扩展 例如3 days from now它会返回 正如您期望的三天后的日期一样 使用 C 中的扩展方法 我们现在可以执行类似的操作 static class Extensions public sta
  • 是否应该在 Rails 中测试本机验证?

    大家都知道自动化测试是一件好事 并不是每个人都确切地知道要测试什么 我的问题是是否应该在应用程序中测试 validate presence of validate uniqueness of 等本机验证 在我的办公室里 我们三个人 一个认为
  • gearman 中的错误情况和重试?

    有人可以指导我 gearman 在出现异常时如何重试吗 抛出或发生错误时 我在 Django 应用程序中使用 python gearman 客户端 我的工作人员是 作为 Django 命令启动 我从中读到博客文章 http www herm
  • AT命令C++代码的输出

    我编写了以下代码 该代码使用 GSM SM5100B 向我的手机发送一条简单的消息 但这不起作用 我想用 C 代码检查每个 printf 行的输出 例如 AT CMFG 1 ok AT CMGS 69 ok ETC 有什么理由要实施这个吗
  • 如何以编程方式将 2 个或更多 .WAV 文件连接在一起?

    我需要能够将 2 个或多个 wav 文件合并为一个 wav 文件 我必须使用 C 以编程方式执行此操作 不能选择第 3 方产品 我知道 System Media SoundPlayer 类 但我不想播放 wav 而只是创建它 这是使用构建的
  • powershell 扩展对象

    如何在 PowerShell 中向对象添加列 例如 Get Childitem 返回一个对象 其中包含模式 LastWriteTime 长度名称等 我想用一个额外的列来扩展这个对象 该列是根据 LastWriteTime 计算出来的 这是原
  • 如何在android中调试kivy应用程序?

    我正在 Android 中开发一个 kivy 应用程序 编译并运行应用程序后 如果有 崩溃或某种错误 我如何找到具体的错误 听说有一个日志程序 您想要的工具称为 logcat 该文档是http developer android com t
  • 当给定区域性不知道格式时,Convert.ToDateTime() 如何解析给定字符串

    我有以下代码 并且它有效 string testDateStr 2009 7 28 05 23 15 DateTime testDateObj Convert ToDateTime testDateStr CultureInfo GetCu
  • R 中两个固定因子嵌套和交叉因子

    我想设计一个嵌套模型 有点难以解释 所以我画了一张图 所有因素都是固定的 每个因素都有 2 个水平 0 1 A 和 B 嵌套了 C 和 D 因子 E 和 F 与这些因素独立并且交叉 我想知道他们之间的互动 我知道我可以在 R 中针对一个嵌套
  • 有条件地针对特定产品 ID 和数量自动应用优惠券

    我正在尝试根据产品 ID 和数量条件在我的 WooCommerce 商店中自动应用优惠券 我的最终目标是当两 2 个所需产品添加到购物车时自动应用特定优惠券 并且每当将三 3 个所需产品添加到购物车时自动应用另一张优惠券 单一数量的产品不应
  • 是否有 C++ 源/lib 来解决具有矩形箱(不是正方形)和旋转的 2D Bin Packing? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 正如标题所示 我需要 C C 源代码或库 可以使用它来解决 2D 矩形形状的装箱问题 其中箱子也是矩形
  • Linq to SQL Select 中的分组依据和求和

    我需要将该 SQL 查询转换为 Linq SELECT SUM ArticleAmount as amount ArticleName FROM DB dbo OrderedArticle group by articlename orde
  • 配置错误。连接到数据库时未找到类 [org.apache.derby.jdbc.EmbeddedDriver]

    我正在使用命令mvn exec java运行我的应用程序cmd 我的 Persistence xml 属性是
  • 地理编码 API 在 api 响应中出现 ZERO_RESULTS,但在浏览器中有效

    我们正在使用地理编码 API 的标准许可证 我们观察到服务响应存在一些间歇性问题 我们从 API 获得 ZERO RESULTS 但是当我们在浏览器中使用相同的地址时 它可以工作并为我们提供 OK 状态 并且对于多个地址发生这种情况在那段时
  • 使用 SpannableString 调整文本对齐方式

    我创建了一个SpannableString 第一个字符 最后 2 个字符比其余字符小 它看起来像这样 sBBBBss 我想对齐较小的字符 以便它们与较大文本的顶部对齐 而不是底部 如它们所示 这可能吗 我想我正在寻找类似这样的伪代码 myA
  • hibernate 6.0.0.Final 自定义方言不再工作

    我正在使用 PostgreSQL 12 和 Hibernate 5 6 8 以及自定义方言 例如 registerFunction hstore find new SQLFunctionTemplate StandardBasicTypes
  • Java中如何安排周期性任务?

    我需要安排一个任务以固定的时间间隔运行 我怎样才能在长间隔 例如每 8 小时 的支持下做到这一点 我目前正在使用java util Timer scheduleAtFixedRate Does java util Timer schedul
  • 仅针对 Tab 和 Enter 自动完成

    在这种情况下如何禁用自动完成 Pressing after Rate autocomplets with DeviceRotationRate as displayed 我只想使用 Tab 或 和 Enter 进行自动完成 所以我会知道会发
  • 使用 EPPlus 加载大量 Excel 数据

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