打开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子句。
祝你好运!