打开Excel文件时不断提示“;只读”;
本文关键字:只读 提示 Excel 文件 打开 | 更新日期: 2023-09-27 18:21:28
我想打开我的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;
多个工作簿正在打开,无法覆盖前一个工作簿。所以关闭一个实例并打开下一个实例,它应该可以工作。
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进程。现在,如果你调试并单步执行代码,并决定"哦,嘿,我必须在这里做其他事情",那么点击停止按钮-你的Excel应用程序不会神奇地消失,而是保持打开!如果你在这条线之后按下停止按钮
excelApp.Workbooks.Open(myPath);
然后您的文件将被该进程锁定。
改为:
using Excel=Microsoft.Office.Interop.Excel
var excelApp = (Excel.Application) System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
if(excelApp==null)
excelApp = new Excel.Application();
这将有助于您将其保持在至少1个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子句。
祝你好运!