尝试将大 Excel 文件读入 DataTable 时出现 OutOfMemoryException

2023-12-13

我正在使用 SSIS 包清理 .Xlsx 文件中的数据并将其加载到 SQL Server 表中。 我还必须突出显示 .Xlsx 文件中包含错误数据的单元格,为此我必须根据列名称和行 ID(我在数据电子表格中拥有)获取列和行索引。为此,我比较第一个电子表格中的每个列名称(Error_Sheet)与我在第二个电子表格中添加的列的行并对行执行相同的操作,如果我具有相同的单元格值,我会返回数据电子表格的列和行索引,并突出显示基于该列的单元格和行索引。该脚本运行良好,但在尝试从服务器运行它后,我遇到了内存异常,并且在我的工作站上也运行良好,之前它运行良好。

我尝试缩小从中获取数据的范围:AC1:AC10000 to AC1:AC100,仅在第一次编译后才起作用,但它不断再次抛出异常。

string strSQLErrorColumns = "Select * From [" + Error_Sheet + "AC1:AC100]";
OleDbConnection cn = new OleDbConnection(strCn);

OleDbDataAdapter objAdapterErrorColumns = new OleDbDataAdapter(strSQLErrorColumns, cn);
System.Data.DataSet dsErrorColumns = new DataSet();
objAdapterErrorColumns.Fill(dsErrorColumns, Error_Sheet);
System.Data.DataTable dtErrorColumns = dsErrorColumns.Tables[Error_Sheet];
dsErrorColumns.Dispose();
objAdapterErrorColumns.Dispose();

foreach (DataColumn ColumnData in dtDataColumns.Columns){
    ColumnDataCellsValue = dtDataColumns.Columns[iCntD].ColumnName.ToString();
    iCntE = 0;

    foreach (DataRow ColumnError in dtErrorColumns.Rows){
        ColumnErrorCellsValue = dtErrorColumns.Rows[iCntE].ItemArray[0].ToString();

        if (ColumnDataCellsValue.Equals(ColumnErrorCellsValue)){

            ColumnIndex = ColumnData.Table.Columns[ColumnDataCellsValue].Ordinal;
            iCntE = iCntE + 1;
            break;
            }
        }

        iCntD = iCntD + 1;
    }

ColumnIndexHCell = ColumnIndex + 1;          
RowIndexHCell = RowIndex + 2;

Range rng = xlSheets.Cells[RowIndexHCell, ColumnIndexHCell] as Excel.Range;
rng.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Yellow);

还有其他方法可以在 DataTable 中加载数据来获取列和行索引,而无需使用大量内存或使用Excel.Range.Cell请代替数据集和 DataTable 从 xlsx 文件中获取单元格值、列和行索引?

我没有展示完整的代码,因为它很长。如果需要更多信息,请随时通知我。


当尝试从具有大量行的 Excel 中读取数据时,最好按块读取数据(在 OleDbDataAdapter 中,您可以使用分页选项来实现).

int result = 1;
int intPagingIndex = 0;
int intPagingInterval = 1000;

while (result > 0){

    result = daGetDataFromSheet.Fill(dsErrorColumns,intPagingIndex, intPagingInterval , Error_Sheet);
    System.Data.DataTable dtErrorColumns = dsErrorColumns.Tables[Error_Sheet];

    //Implement your logic here

    intPagingIndex += intPagingInterval ;

}

这将防止出现 OutOfMemory 异常。并且不再需要指定一个范围,例如AC1:AC10000

参考

  • 查询结果分页
  • 填充(数据集,Int32,Int32,字符串)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试将大 Excel 文件读入 DataTable 时出现 OutOfMemoryException 的相关文章

  • 分段错误(核心转储)错误

    我的程序编译罚款 但在输入文件时出现 分段错误 核心转储 错误 我没有正确处理 ostream 吗 include
  • Excel VBA - 如何逐行读取csv文件而不是整个文件

    这是我需要读取的 csv 文件内容 header header header header header header value value value value value value value value value 我在网上找到
  • ASP.NET Core 与现有的 IoC 容器和环境?

    我想运行ASP NET 核心网络堆栈以及MVC在已托管现有应用程序的 Windows 服务环境中 以便为其提供前端 该应用程序使用 Autofac 来处理 DI 问题 这很好 因为它已经有一个扩展Microsoft Extensions D
  • 为什么Apache MPM prefork.c 使用互斥体来保护accept()?

    我坐下来读书Apache 的 MPM prefork c http code metager de source xref apache httpd server mpm prefork prefork c这段代码使用了一个名为accept
  • 将字符串中的“奇怪”字符转换为罗马字符

    我需要能够将用户输入仅转换为 a z 罗马字符 不区分大小写 所以 我感兴趣的角色只有26个 然而 用户可以输入他们想要的任何 形式 的字符 西班牙语 n 法语 e 和德语 u 都可以包含用户输入中的重音符号 这些重音符号会被程序删除 我已
  • 在 C# Winforms 应用程序中嵌入 Windows XP 主题

    我有一个旧版 C Windows 窗体应用程序 其布局是根据 Windows XP 默认主题设计的 由于需要将其作为 Citrix 应用程序进行分发 该应用程序现在看起来像经典主题应用程序 因为 Citrix 不鼓励使用主题系统服务 所以
  • 从 C 结构生成 C# 结构

    我有几十个 C 结构 我需要在 C 中使用它们 典型的 C 结构如下所示 typedef struct UM EVENT ULONG32 Id ULONG32 Orgin ULONG32 OperationType ULONG32 Size
  • mprotect 之后 malloc 导致分段错误

    在使用 mprotect 保护内存区域后第一次调用 malloc 时 我遇到分段错误 这是执行内存分配和保护的代码片段 define PAGESIZE 4096 void paalloc int size Allocates and ali
  • 对 boost 库的依赖项没有完整路径

    我已经成功构建了动态库 依赖于使用自定义前缀构建和安装的 boost 库 b2 install prefix PREFIX 然而 当我跑步时otool L在我的库中 我得到如下输出 libboost regex dylib compatib
  • libxml2 xmlChar * 到 std::wstring

    libxml2似乎将所有字符串存储在 UTF 8 中 如xmlChar xmlChar This is a basic byte in an UTF 8 encoded string It s unsigned allowing to pi
  • C++ 插件的“最适合”动态类型匹配

    我有一个几乎所有东西都是插件的架构 该架构以图形用户界面为基础 其中每个插件都由一个 表面 即用户可以通过其与插件交互的 UI 控件 表示 这些表面也是插件 每当添加新插件时 瘦主机都会自动确定哪个可用表面与其最匹配的 UI 如何在 C 中
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • 默认析构函数做了多少事情

    C 类中的默认析构函数是否会自动删除代码中未显式分配的成员 例如 class C public C int arr 100 int main void C myC new C delete myC return 0 删除 myC 会自动释放
  • C++11 动态线程池

    最近 我一直在尝试寻找一个用于线程并发任务的库 理想情况下 是一个在线程上调用函数的简单接口 任何时候都有 n 个线程 有些线程比其他线程完成得更快 并且到达的时间不同 首先我尝试了 Rx 它在 C 中非常棒 我还研究了 Blocks 和
  • C# 中的常量和只读? [复制]

    这个问题在这里已经有答案了 可能的重复 const 和 readonly 之间有什么区别 https stackoverflow com questions 55984 what is the difference between cons
  • 从 R 到 C 处理列表并访问它

    我想使用从 R 获得的 C 列表 我意识到这个问题与此非常相似 使用 call 在 R 和 C 之间传递数据帧 https stackoverflow com questions 6658168 passing a data frame f
  • DataTable:通过 LINQ 或 LAMBDA 进行动态 Group By 表达式

    我有一个数据表 我想在其中对未指定数量的字段进行分组 发生这种情况的原因是用户可以选择他想要分组的字段 所以 实际上 我将选择推入列表中 在这个选择上 我必须对我的数据表进行分组 想象一下这段代码 VB 或 C 都一样 public voi
  • Visual Studio 2017 完全支持 C99 吗?

    Visual Studio 的最新版本改进了对 C99 的支持 最新版本VS2017现在支持所有C99吗 如果没有 C99 还缺少哪些功能 No https learn microsoft com en us cpp visual cpp
  • C语言声明数组没有初始大小

    编写一个程序来操纵温度详细信息 如下所示 输入要计算的天数 主功能 输入摄氏度温度 输入功能 将温度从摄氏度转换为华氏度 独立功能 查找华氏度的平均温度 我怎样才能在没有数组初始大小的情况下制作这个程序 include
  • OSError: [WinError 193] %1 不是有效的 Win32 应用程序,同时使用 CTypes 在 python 中读取自定义 DLL

    我正在尝试编写用 python 封装 C 库的代码 我计划使用 CTypes 来完成此操作 并使用 Visual Studio 来编译我的 DLL 我从一个简单的函数开始 在 Visual Studio 内的标头中添加了以下内容 然后将其构

随机推荐

  • 在代码隐藏中获取 ASP.Net 页面的 URL [重复]

    这个问题在这里已经有答案了 我有一个 ASP Net 页面 该页面将托管在几个不同的服务器上 并且我希望获取该页面的 URL 或者更好 托管该页面的站点 作为字符串以在代码隐藏中使用 有任何想法吗 用这个 Request Url Absol
  • 使用 cross_val_score 与 pipeline 和 GridSearch 进行嵌套交叉验证

    我正在 scikit 工作 正在尝试调整我的 XGBoost 我尝试使用嵌套交叉验证 使用管道重新缩放训练折叠 以避免数据泄漏和过度拟合 并与 GridSearchCV 并行进行参数调整和 cross val score 以在最后获得 ro
  • 如何更改使用 PHP Imagick 的 newPseudoImage 函数绘制的标题的颜色?

    我正在使用以下命令创建带有标题的图像Imagick newPseudoImage函数如下 txt new Imagick txt gt setFont templates fonts Gloria ttf txt gt setGravity
  • Seaborn countplot 设置 x 值的图例

    我正在绘制分类数据和值计数sns countplot 我试图将 x 值的图例添加到图中 如下所示 句柄是 x 值的集合 标签是 x 值的描述 ax sns countplot x df GARAGE DOM handles labels a
  • GeneralBlock-56 在 UIWebView 中调用 loadRequest 时内存泄漏

    我正在开发一个 iPad 应用程序 并一直在使用 XCode 4 中的 Instruments 对其进行分析 我正在对实际设备本身进行分析 iOS 4 3 已安装 Instruments 告诉我有一些内存泄漏 泄漏的对象主要是General
  • C# 打开 SQLite 文件

    我想在 C 中打开 SQLite DB 文件 我从 Visual Basic 源代码重写了这段代码 SqlConnection myConnection new SqlConnection myConnection ConnectionSt
  • 弹出菜单项图标

    我的应用程序有问题 我需要展示一个PopupMenu我需要此菜单中的每个项目都包含文本和图像 图像应显示在文本的左侧 但它没有显示 有什么建议如何实现它吗 我的代码到目前为止 public void showMenu Button butt
  • 用 swig 包装专门的 C++ 模板类

    考虑以下类声明 namespace X template
  • Python BeautifulSoup 返回空列表

    我正在尝试创建一个 Python 脚本来使用 BeautifulSoup 从 tcgplayer com 获取 Yugioh 卡的价格 当您在此网站上搜索卡片时 它会返回一页搜索结果 其中包含来自不同卖家的多个价格 我的目标是拉低所有这些价
  • mapViewDidLoad方法未加载

    目标c的新手 我正在使用ArcGIS作为地图部分 我的方法有问题mapViewDidLoad没有被调用 加载 这是代码的一部分 h file interface ViewController UIViewController
  • 从 SPARK 中的另一个 RDD 返回最大 N 值的 RDD

    我正在尝试过滤元组 RDD 以根据键值返回最大的 N 个元组 我需要返回格式为 RDD 所以RDD 4 a 12 e 2 u 49 y 6 p 过滤最大的 3 个键应该返回 RDD 6 p 12 e 49 y Doing a sortByK
  • C 3d 字符数组

    char monsternivel1 3 4 Rat Bat Spider Goblin Orc Drawf Dragon Lich Banshee Demon Hydra Giant Spider 它说 gt E Dungeon Craw
  • 从 JSON 输出中选择字段

    使用Python 我如何提取字段id到一个变量 基本上 我要改变这个 accountWide true criteria description some description id 7553 max 1 orderIndex 0 类似的
  • GORM:不可知地映射大文本字段数据库

    我有一个 Grails 应用程序 它将针对 SQL Server 或 Oracle 后端运行 我使用 GORM 作为 ORM 我想以支持两种数据库类型的方式映射大型文本字段 在我的 Grails 域类中 我有类似的内容 class Note
  • 如何将 python 模块从源安装到虚拟环境中

    据我了解 您可以使用 pip install e my module 从源安装模块 当我执行此操作时 pip show f my module grep 位置 给出 my module 作为位置 而不是我的虚拟环境的站点包 安装模块时我激活
  • Opencv检测不同时间拍摄的两张照片之间的变化

    我们有该商品的一张原始图片 照片 即雕塑 我们不时地为该物品拍摄新照片 照片始终与物品成 90 度相同角度拍摄 但 会有一些轻微的上下 左右移动 同一物体的不同长度 我们用线取 相机和在其前面移动的物体因此不时的速度 对象发生变化 因此最终
  • 从远程服务器拉取某个分支

    假设有人创建了一个分支xyz 如何拉动分支xyz从远程服务器 例如GitHub 并将其合并到现有分支中xyz在我的本地仓库中 答案是将分支推送到 Git给我错误 拒绝 并提到 非快进 但我收到错误 拒绝 以及有关 非快进 的信息 这是因为
  • 如何使用 Google Apps 脚本通过 for 循环将值添加到二维数组

    有人可以向我展示一些简单的示例 以使用 for 循环将值添加到二维数组吗 我完全错误的测试脚本如下 预期行为 整体值 0 0 0 整体值 0 1 1 整体值 0 2 2 整体值 1 0 0 整体值 1 1 1 整体值 1 2 2 funct
  • 使用 C#:如何使用 Newtonsoft.JSON 迭代嵌套 JSON?

    我正在提取大量项目的 JSON 数据 每个项目都有一组我想要抓取并放置在列表中的特定数据 以下是 JSON 数据中包含的 700 多个项目中的两个示例 我需要能够使用 Newtonsoft JSON 迭代 JSON 数据 并在 fieldN
  • 尝试将大 Excel 文件读入 DataTable 时出现 OutOfMemoryException

    我正在使用 SSIS 包清理 Xlsx 文件中的数据并将其加载到 SQL Server 表中 我还必须突出显示 Xlsx 文件中包含错误数据的单元格 为此我必须根据列名称和行 ID 我在数据电子表格中拥有 获取列和行索引 为此 我比较第一个