You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 3.5环境下C#导入Excel到Oracle时Interop.Office加载失败求助

解决.NET 3.5下FileHelpers读取Excel时找不到Interop.Office的问题

问题重现

使用.NET 3.5 + C#,通过FileHelpers的ExcelStorage读取.xls文件并上传Oracle时,抛出以下异常:

异常类型:System.IO.FileNotFoundException
错误信息:无法加载文件或程序集“Interop.Office, Version=2.1.0.0, Culture=neutral, PublicKeyToken=null”或其依赖项之一。系统找不到指定的文件。
堆栈跟踪:
at FileHelpers.DataLink.ExcelStorage.CloseAndCleanUp()
at FileHelpers.DataLink.ExcelStorage.ExtractRecords()
at "......"

已尝试引入Interop.Office 2.1.0.0的dll,但问题未解决。

解决方案

1. 验证程序集引用配置

  • 右键项目中的Interop.Office引用,打开属性面板:
    • 将Copy Local设置为True,确保编译时dll被复制到输出目录(bin/Debug/Release)
    • 确认Version属性确实是2.1.0.0,避免版本不匹配导致的加载失败
  • 检查是否同时引用了其他Office互操作组件(如Interop.Excel),确保所有Office互操作dll的版本保持一致,避免依赖冲突

2. 检查依赖项完整性

Interop.Office并非独立组件,可能依赖其他Office主互操作程序集(PIA):

  • 使用ildasm.exe(.NET框架自带工具)打开Interop.Office.dll,查看其依赖的程序集列表,确认是否有缺失的依赖dll
  • 确保目标机器上安装了对应版本的Office PIA,或者将所有依赖的互操作dll都复制到输出目录

3. 替换为无Office依赖的Excel读取方案

Office互操作组件部署复杂,建议改用支持.NET 3.5且无需安装Office的库(如NPOI):

using NPOI.HSSF.UserModel;
using System.IO;

// 读取xls文件示例
using (var fileStream = new FileStream("target.xls", FileMode.Open, FileAccess.Read))
{
    var workbook = new HSSFWorkbook(fileStream);
    var sheet = workbook.GetSheetAt(0); // 获取第一个工作表

    // 遍历行读取数据
    for (int rowIndex = sheet.FirstRowNum; rowIndex <= sheet.LastRowNum; rowIndex++)
    {
        var row = sheet.GetRow(rowIndex);
        if (row == null) continue;

        // 读取单元格数据(示例读取第一列)
        var cell = row.GetCell(0);
        string cellValue = cell?.ToString() ?? string.Empty;
        
        // 后续将数据写入Oracle数据库的逻辑
    }
}

4. 检查输出目录与权限

  • 编译后查看输出目录,确认Interop.Office.dll存在且版本正确
  • 如果dll存在但仍报错,检查程序运行时是否有读取该文件的权限,必要时调整文件夹权限

内容的提问来源于stack exchange,提问作者Dhurba Devkota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 22:55:56