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

使用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.Excel NuGet包,或者引用本地的Office互操作程序集
  • Excel环境:运行代码的机器必须安装Microsoft Excel,Interop依赖本地Excel程序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:03:49