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

时间:2016-10-20 20:22:53

标签: c# excel worksheet

打开并保存我的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文件可以正常修改和保存,没有弹出消息要求我保存为副本。谢谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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

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

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

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