[英]How to start/call an Asp.net core app when i open CefSharp(winform) browser and close it on exit?
[英]How to open excel workbook on start of winform and close on exit
在我当前的项目中,我需要打开2张excel工作簿,一本可以阅读,一本可以写。 在winform应用程序启动时打开这些工作簿的最佳方法是什么,以便以后可以轻松访问它们? 然后我如何有效地关闭两个工作簿,以使没有后台进程徘徊?
这是我目前如何打开它,还有更好的方法吗?
// Get the Excel application object.
Excel.Application excel_app = new Excel.Application();
string path = @"Here goes the read excel path";
string path2 = @"Here goes the write excel path";
// Open the workbook.
Excel.Workbook workbook = excel_app.Workbooks.Open(path
,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
Excel.Workbook workbook2 = excel_app.Workbooks.Open(path2
,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
FindSheet sheetFind = new FindSheet();
FindSheet2 sheetFind2 = new FindSheet2();
// See if the worksheet already exists.
string sheet_name = DateTime.Now.ToString("MM-dd-yy");
string sheet_name2 = "Blad1";
Worksheet sheet = sheetFind.Findsheet(workbook, sheet_name);
Worksheet sheet2 = sheetFind2.Findsheet2(workbook2,
这就是我目前关闭所有内容,进行任何改进的方式?
workbook2.Close(true, Type.Missing, Type.Missing);
workbook.Close(true, Type.Missing, Type.Missing);
excel_app.Quit();
//release all memory - stop EXCEL.exe from hanging around.
if (workbook != null) { Marshal.ReleaseComObject(workbook); } //release each workbook like this
if (sheet != null) { Marshal.ReleaseComObject(sheet); } //release each worksheet like this
if (excel_app != null) { Marshal.ReleaseComObject(excel_app); } //release the Excel application
if (workbook2 != null) { Marshal.ReleaseComObject(workbook2); }
if (sheet2 != null) { Marshal.ReleaseComObject(sheet2); }
workbook = null; //set each memory reference to null.
workbook2 = null;
sheet = null;
sheet2 = null;
excel_app= null;
GC.Collect();
提前致谢。
该代码似乎正确,只需确保将最后的内容放到finally
以便即使在弹出异常时也可以释放资源,否则您将无限期地陷入一个Excel进程中,该进程将保留打开的文件锁,直到您在Windows上手动杀死它。
此外,我明确地设置了Excel应用程序被隐藏,避免打草惊蛇弹出窗口和也接近并释放Workbooks
对象(来自不同Workbook
从Excel的应用程序):
Application excel = null;
Workbooks workbooks = null;
Workbook workbook = null;
try
{
excel = new Application();
excel.Visible = false;
excel.DisplayAlerts = false;
workbooks = excel.Workbooks;
workbook = workbooks.YourSearchOrAddWorkbookMethod();
/*Your operations here*/
}
finally
{
if (workbook != null)
workbook.Close();
if (workbooks != null)
workbooks.Close();
if (excel != null)
excel.Quit();
if (workbook != null)
Marshal.ReleaseComObject(workbook);
if (workbooks != null)
Marshal.ReleaseComObject(workbooks);
if (excel != null)
Marshal.ReleaseComObject(excel);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.