使用Microsoft.Office.InterOp.Excel转CSV为XLSX遇文件未找到异常求助
解决.NET 6下使用Microsoft.Office.Interop.Excel转换CSV到XLSX的程序集加载问题
问题根源
System.IO.FileNotFoundException提示无法加载Office 15.0.0.0程序集,本质是以下几个原因:
- 本地未安装对应版本的Office(15.0对应Office 2013),或Office位数与项目平台目标不匹配
- 未正确安装对应版本的Interop NuGet包
- 代码中存在路径错误等逻辑问题
解决步骤
1. 验证本地Office环境
- 必须安装Office 2013及以上版本,如果没有安装Office,建议改用无需依赖本地Office的开源库(如EPPlus、NPOI),避免Interop的兼容性问题
- 确认Office的位数(32位/64位),后续项目平台目标要和Office位数一致
2. 正确安装Interop NuGet包
不要用gcutil手动添加引用,直接在NuGet包管理器中搜索并安装Microsoft.Office.Interop.Excel,选择与本地Office版本匹配的包版本(如Office 2013对应15.x系列的包)
3. 调整项目平台目标
- 右键项目 → 属性 → 生成 → 平台目标,选择x86或x64(与本地Office位数一致,多数默认Office为32位,选x86)
- 取消勾选“首选32位”(如果是AnyCPU模式下的选项)
4. 修正代码中的错误
原代码存在路径引用错误、未释放COM对象的问题,修正后的代码如下:
using System.IO; using System.Runtime.InteropServices; using Microsoft.Office.Interop.Excel; public void ConverterF() { Application excelApp = null; Workbooks workbooks = null; Workbook workbook = null; try { excelApp = new Application(); string csvPath = @"C:\Escritorio\ExcelFile.csv"; string savePath = @"C:\Escritorio\NewTest.xlsx"; workbooks = excelApp.Workbooks; // 使用完整路径打开CSV,指定分隔符为逗号 workbook = workbooks.OpenText( Filename: csvPath, DataType: XlTextParsingType.xlDelimited, ConsecutiveDelimiter: true, Comma: true ); // 保存为XLSX格式 workbook.SaveAs( Filename: savePath, FileFormat: XlFileFormat.xlWorkbookDefault ); } finally { // 释放COM对象,避免Excel进程残留 workbook?.Close(); workbooks?.Close(); excelApp?.Quit(); if (workbook != null) Marshal.ReleaseComObject(workbook); if (workbooks != null) Marshal.ReleaseComObject(workbooks); if (excelApp != null) Marshal.ReleaseComObject(excelApp); } }
说明:
- 去掉了不必要的CSV重命名操作,
OpenText可以直接读取CSV文件 - 使用完整路径确保文件能被找到
- 添加
finally块释放COM对象,防止Excel进程在后台残留
内容的提问来源于stack exchange,提问作者Diana Torrontegui
相关产品推荐
相关产品推荐

