C# 生成的工作表是只读和锁定的

C# generated worksheet is read-only and locked

我在打开和保存我的 C# 程序生成的 Excel 文件时遇到问题。每次我手动进行一些更改并尝试保存 Excel 文件时,弹出消息都会要求我保存该文件的副本,因为它是只读的。没关系,但很烦人。我的 excel 文件是由我的 C# 程序生成的。这是我的代码片段:

/**
 * Save the matched data
 * */
public void saveMatch(List<String> saveB, List<String> saveG, Excel.Worksheet bellSheet, Excel.Worksheet GSMSheet, String fileurl, String mCode, String prioName,int sNumber = 0)
{
    object misValue = System.Reflection.Missing.Value;
    Excel.Application newApp = new Excel.Application();
    Excel.Workbook newWB = newApp.Workbooks.Add(misValue);
    Excel.Worksheet newWS = newWB.Worksheets.get_Item(1);
    String colName1 = bSheet.get_Range("A1").Cells.Value;
    String colName2 = GSheet.get_Range("A1").Cells.Value;
    int i = 2;//start copy from row two of the Sheet, row one is the column name
    newWS.Cells[1, 2] = colName2;//copy the column name
    newWS.Cells[1, 1] = colName1;//copy the column name
    //Copy excatly matching data
    for (int j = 0; j < saveB.Count; j++)
    {
        newWS.Cells[i, 1] = saveB[j];
        newWS.Cells[i, 2] = saveG[j];
        //Console.WriteLine(saveG[j] + " : " + saveB[j]);
        i++;
    }
    if (sNumber==0)
    {
        if (prioName.Equals("None"))
        {
            newWB.SaveAs(fileurl + @"\MdResults_" +"None_"+ mCode + ".xlsx");
        }
        else
        {
            newWB.SaveAs(fileurl + @"\MdResults_" + prioName+"_"+mCode + ".xlsx");
        }
    }
    else
    {
        if (prioName.Equals("None"))
        {
            newWB.SaveAs(fileurl + @"\MdResults_" + "None_"+mCode + "_" + sNumber + ".xlsx");
        }
        else
        {
            newWB.SaveAs(fileurl + @"\MdResults_" +prioName + "_"+mCode + "_" +sNumber + ".xlsx");
        }
    }
    newWB.Close(0);
    newApp.Quit();
}

程序运行正常,我可以成功打开保存的Excel文件。我只是想知道我是否遗漏了 C# 代码中的某些内容,或者我只需要修改 Excel 文件本身中的某些内容?我希望我的程序生成的 excel 文件可以修改并正常保存,而不会弹出消息要求我另存为副本。谢谢您的帮助。

如果您不关闭 newApp,Excel 进程将停留在内存中并锁定您的文件。

检查您的任务列表以确认是否发生这种情况。

保存文件后尝试添加以下内容

newApp.Close(0);
newApp.Quit();