如何处理excel工作表中的另存为对话框在C#中
问题描述:
我想在excel表格中写几行然后使用简单的c#程序保存。但每次显示对话框时都会显示“您想保存该文件吗?”是,不,取消选项。我想选择“是”,以便可以使用更新的数据保存文件。如何处理excel工作表中的另存为对话框在C#中
下面是代码:
string ID = "123456";
Microsoft.Office.Interop.Excel.Application xlApp;
Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
xlApp = new Microsoft.Office.Interop.Excel.Application();
xlWorkBook = xlApp.Workbooks.Open(@"D:\Projects\Data\DataSheet.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWorkSheet =
(Microsoft.Office.Interop.Excel.Worksheet) xlWorkBook.Worksheets["source"];
//putting the value in excel.
xlWorkSheet.Cells[2, 2] = ID;
xlApp.Visible = true;
//xlApp.ActiveWorkbook.save();
xlWorkBook.SaveAs(@"D:\Projects\Data\DataSheet.xlsx", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing,
false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
xlWorkBook.Close(false, Type.Missing, Type.Missing);
xlApp.Workbooks.Close();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkBook);
xlApp.Quit();
GC.Collect();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
它在Excel工作表中输入数值,但它不保存它。有人可以帮助缩短这个问题吗?或者建议更好的方法?
答
尝试Saved
属性手动设置为true
:
xlWorkBook.SaveAs(...);
xlWorkBook.Saved = true;
xlApp.Workbooks.Close() //not sure if required before: xlWorkBook.Close()
编辑
你可以提供参数the Close()
method。在C#中,我相信这应该是这样的:
xlWorkBook.SaveAs(...);
xlWorkBook.Saved = true;
xlWorkBook.Close(false); //new line
xlApp.Workbooks.Close(); OR xlApp.Workbooks.Close(false);
的可能的复制[另存为命令不起作用,但SaveCopyAs确实](https://stackoverflow.com/questions/17450447/saveas-command-does- not-work-but-savecopyas-does) – dovid
注意,除非绝对必要,否则绝不会调用'GC.Collect()',这样可以更好地阻止imo。因为它应该在需要资源时收集 – EpicKip
我已经添加了一个基于_“它节省但仍然要求我保存”的答案,然后意识到这不是您的问题。 xlWorkBook.SaveAs(@“D:Projects \ Data \ DataSheet.xlsx”)是否可以工作,而不需要额外的参数?在你的代码中需要点消息弹出? – gms0ulman