打开并保存我的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文件可以正常修改和保存,没有弹出消息要求我保存为副本。谢谢您的帮助。
答案 0 :(得分:2)
如果您不关闭newApp,Excel进程将在内存中保留并保持文件锁定。
检查您的任务列表以确认这种情况正在发生。
保存文件后尝试添加以下内容
newApp.Close(0);
newApp.Quit();