打开Excel文件不断提示“只读”

我想在我的C#应用​​程序excel文件(xls)中打开现有的文件,并写入特定的列一切正常,但每次我打开文件说只为阅读,任何想法如何保存到它?

这是我现在的代码:

Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application(); string myPath = txtPath.Text.ToString(); excelApp.Workbooks.Open(myPath); excelApp.Cells[8, 3] = txtSum1.Text.ToString(); excelApp.Cells[8, 4] = txtId1.Text.ToString(); excelApp.Visible = true; 

多个工作簿正在打开,并且无法覆盖以前的工作簿。 所以closures一个实例,打开下一个,它应该工作。

  Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application(); string myPath = txtPath.Text.ToString(); excelApp.Workbooks.Open(myPath, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false); excelApp.Cells[8, 3] = txtSum1.Text.ToString(); excelApp.Cells[8, 4] = txtId1.Text.ToString(); excelApp.ActiveWorkbook.Save(); excelApp.Workbooks.Close(); excelApp.Quit(); 

你的问题在于:

 Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application(); 

这行在执行后立即启动一个新的Excel进程。 现在,如果您通过代码进行debugging并单步执行,并决定“哦,嘿,我得在这里做点别的事情”,然后点击停止button – 您的Excel应用程序不会神奇地消失,而是保持开放! 如果你在这一行之后点击停止button

 excelApp.Workbooks.Open(myPath); 

那么你的文件将被该进程locking。

做这个,而不是:

 using Excel=Microsoft.Office.Interop.Excel var excelApp = (Excel.Application) System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application"); if(excelApp==null) excelApp = new Excel.Application(); 

这应该会帮助你保持至less1个Excel进程的运行。

 Excel.Workbook wb; try { wb = excelApp.Workbooks[System.IO.Path.GetFileName(myPath)]; } catch { wb = excelApp.Workbooks.Open(myPath); } 

不完全确定最后一部分。 我不知道按名称寻址不存在的工作簿将重新生成一个错误或null。 如果它返回null,只需检查if(wb == null)而不是catch子句。

祝你好运!