使用C#向Excel单元格写入值的技术实现咨询
嘿,我来帮你把这个Excel创建写入的功能搞定!你的代码框架是对的,但有几处拼写遗漏和关键的资源处理要补上——毕竟用Office Interop最容易踩的坑就是内存泄漏,还有参数细节没处理好。
完整可运行的代码实现
using System; using System.IO; using System.Runtime.InteropServices; using Excel = Microsoft.Office.Interop.Excel; namespace Test { class ExcelTest { public void TestMethod() { // 建议用用户可读写的路径,比如桌面,避免权限问题 string outputPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.xlsx"); Excel.Application excelApp = null; Excel.Workbook workbook = null; Excel.Worksheet worksheet = null; try { // 初始化Excel应用 excelApp = new Excel.Application(); // 不显示Excel窗口(可选,设为true可以看到操作过程) excelApp.Visible = false; // 创建新工作簿 workbook = excelApp.Workbooks.Add(Type.Missing); // 获取第一个工作表(默认新建的工作簿有一个Sheet1) worksheet = (Excel.Worksheet)workbook.ActiveSheet; // 可以给工作表重命名 worksheet.Name = "测试工作表"; // 向单元格写入值:行号,列号 或者用单元格地址比如"A1" worksheet.Cells[1, 1] = "姓名"; worksheet.Cells[1, 2] = "年龄"; worksheet.Cells[2, 1] = "张三"; worksheet.Cells[2, 2] = 25; // 保存文件:注意指定正确的文件格式,避免兼容性问题 workbook.SaveAs( Filename: outputPath, FileFormat: Excel.XlFileFormat.xlOpenXMLWorkbook, // .xlsx格式 AccessMode: Excel.XlSaveAsAccessMode.xlNoChange ); Console.WriteLine($"文件已成功保存到:{outputPath}"); } catch (Exception ex) { Console.WriteLine($"操作出错:{ex.Message}"); } finally { // 关键!手动释放所有COM对象,防止Excel进程残留 if (worksheet != null) { Marshal.ReleaseComObject(worksheet); worksheet = null; } if (workbook != null) { workbook.Close(SaveChanges: false); Marshal.ReleaseComObject(workbook); workbook = null; } if (excelApp != null) { excelApp.Quit(); Marshal.ReleaseComObject(excelApp); excelApp = null; } } } } }
关键注意点说明
- 拼写修正:你原代码里的
workboo...是workbook的拼写遗漏,已经在代码里补全了 - 资源释放:Office Interop的对象是COM对象,.NET的GC不会自动回收,必须用
Marshal.ReleaseComObject手动释放,并且要先关闭工作簿、退出Excel,否则任务管理器里会残留EXCEL.EXE进程 - 路径权限:尽量避免直接写入C盘根目录(需要管理员权限),用
Environment.SpecialFolder获取用户可读写的目录更稳妥 - NuGet依赖:要先安装
Microsoft.Office.Interop.ExcelNuGet包,或者引用本地的Office互操作程序集 - Excel环境:运行代码的机器必须安装Microsoft Excel,Interop依赖本地Excel程序
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

