代码报错‘赋值运算符左侧必须是变量、属性或索引器’求排查
解决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); }
额外提示
- 注意
ApplicationClass已经被废弃,建议直接使用new Microsoft.Office.Interop.Excel.Application() - 一定要释放Excel相关的COM对象,否则即使调用
Quit(),Excel进程可能仍会在后台运行
内容的提问来源于stack exchange,提问作者Vrajesh Kotecha
相关产品推荐
相关产品推荐

