Excel.Application app = new Excel.Application();
app.Application.DisplayAlerts = false;
app.Visible = false; Excel.Workbook tworkbook;
Object missing = System.Reflection.Missing.Value;
app.Workbooks.Add(missing);
tworkbook = app.Workbooks.Open(mode.FullName, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
System.Data.DataTable dt = ds.Tables[0];
.
.
.
.
tworksheet.SaveAs(newpath, missing, missing, missing, missing, missing, missing, missing, missing, missing);
tworkbook.Close(false, mode.FullName, missing);
app.Workbooks.Close();
app.Quit();
if (app != null)//[color=#FF0000]此处必须要杀掉吗?
{
foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcessesByName("Excel"))
{
//先判断当前进程是否是excel
if (!p.CloseMainWindow())
{
p.Kill();
}
}
}[/color] tworkbook = null;
app = null;
GC.Collect();
。以上已经 app.Workbooks.Close();
app.Quit(); 了,还必须判断excel并杀掉进程吗?如果,不杀掉的话,excel进程会自动退出吗?经过测试,两个用户同时调用这里的时候,其中一个会出错,就是因为进程被杀掉了。
app.Application.DisplayAlerts = false;
app.Visible = false; Excel.Workbook tworkbook;
Object missing = System.Reflection.Missing.Value;
app.Workbooks.Add(missing);
tworkbook = app.Workbooks.Open(mode.FullName, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
System.Data.DataTable dt = ds.Tables[0];
.
.
.
.
tworksheet.SaveAs(newpath, missing, missing, missing, missing, missing, missing, missing, missing, missing);
tworkbook.Close(false, mode.FullName, missing);
app.Workbooks.Close();
app.Quit();
if (app != null)//[color=#FF0000]此处必须要杀掉吗?
{
foreach (System.Diagnostics.Process p in System.Diagnostics.Process.GetProcessesByName("Excel"))
{
//先判断当前进程是否是excel
if (!p.CloseMainWindow())
{
p.Kill();
}
}
}[/color] tworkbook = null;
app = null;
GC.Collect();
。以上已经 app.Workbooks.Close();
app.Quit(); 了,还必须判断excel并杀掉进程吗?如果,不杀掉的话,excel进程会自动退出吗?经过测试,两个用户同时调用这里的时候,其中一个会出错,就是因为进程被杀掉了。
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
System.Runtime.InteropServices.Marshal.ReleaseComObject(book);
System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet);
sheet = null;
book = null;
app = null;
GC.Collect();
private void KillProcess(string processName)
{
System.Diagnostics.Process myproc= new System.Diagnostics.Process();
try{
foreach (Process thisproc in Process.GetProcessesByName(processName)) {
if(!thisproc.CloseMainWindow()){
thisproc.Kill();
}
}
}
catch(Exception Exc)
{
}
GC.Collect();
}
现在的问题就是,不能按照excel名字来杀掉进程,不然的话,当其他用户也在调用该代码的时候,foreach杀掉excel进程的话,就会出错。我的意思就是我不强制调用杀掉excel进程是否可以(不会一直耗内存),如果不行的话,通过怎样判断来杀掉各自的excel进程,比如A用户杀掉A的,B用户杀掉B的。谢谢。