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

代码报错‘赋值运算符左侧必须是变量、属性或索引器’求排查

解决DataGridView导出Excel时的赋值运算符错误

你遇到的这个错误非常典型——你把赋值运算符=和相等比较运算符==搞混了!

错误原因解析

在C#中:

  • 单个=是赋值运算符,用来给变量/属性赋值,比如int a = 5;
  • 双==才是相等比较运算符,用来判断两个值是否相等,返回布尔值

你的错误行:

if (savefiledialog.ShowDialog()=DialogResult.OK)

这里编译器会认为你试图把DialogResult.OK赋值给savefiledialog.ShowDialog()的返回值,但这个返回值是一个临时的DialogResult枚举值,不能被赋值,所以才会抛出「The left-hand side of an assignment must be a variable, property or indexer」的错误。

修正后的代码

只需要把单个=改成双==即可,同时我也帮你优化了代码格式和COM对象释放(避免Excel进程残留):

Microsoft.Office.Interop.Excel.Application xlApp;
Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;

xlApp = new Microsoft.Office.Interop.Excel.Application();
xlWorkBook = xlApp.Workbooks.Add(Type.Missing);
xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

int i = 0;
int j = 0;

if (dgvSearchStudFees.Visible == true)
{
    for (i = 0; i <= dgvSearchStudFees.RowCount - 1; i++)
    {
        for (j = 0; j <= dgvSearchStudFees.ColumnCount - 1; j++)
        {
            DataGridViewCell cell = dgvSearchStudFees[j, i];
            xlWorkSheet.Cells[i + 1, j + 1] = cell.Value;
        }
    }

    var savefiledialog = new SaveFileDialog();
    savefiledialog.FileName = "Atharva ExcelSheet";
    savefiledialog.DefaultExt = ".xlsx";

    // 修正:把=改成==
    if (savefiledialog.ShowDialog() == DialogResult.OK)
    {
        xlWorkBook.SaveAs(savefiledialog.FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
    }

    // 释放COM对象,避免Excel进程残留
    xlWorkBook.Close();
    xlApp.Quit();
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkSheet);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkBook);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
}

额外提示

  1. 注意ApplicationClass已经被废弃,建议直接使用new Microsoft.Office.Interop.Excel.Application()
  2. 一定要释放Excel相关的COM对象,否则即使调用Quit(),Excel进程可能仍会在后台运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:56:36