C# 关闭 Excel进程
2012-05-10 11:57
309 查看
private bool SaveToExcel()
{
string FileName;
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.RestoreDirectory = true;
saveFileDialog.OverwritePrompt = true;
saveFileDialog.AutoUpgradeEnabled = true;
saveFileDialog.Filter = "Execl files (*.xlsx)|*.xlsx";
saveFileDialog.FilterIndex = 1;
saveFileDialog.Title = "保存先のファイルを選択してください";
Excel.Application excel = new Excel.Application();
Excel.Workbook book = excel.Workbooks.Add(Excel.XlSheetType.xlWorksheet);
//Excel.Sheets woSheets = book.Worksheets;
Excel.Worksheet newSheet = null;
Excel.Workbook ReBook = excel.Workbooks.Add(Excel.XlSheetType.xlWorksheet);
try
{
//データ書き込み
if (this.Keys.Count > 0)
{
FileName = String.Format("{0:yyyyMMdd-HHmmss}", DateTime.Now) + "-R1&R2.xls";
//シート追加
newSheet = (Excel.Worksheet)book.Sheets.Add(
Type.Missing, Type.Missing, this.R1sheetNo.Count + this.R2sheetNo.Count - 1, Type.Missing);
if (!setData(saveFileDialog, book, newSheet, this.allR1Data, this.allR2Data, this.Keys,
this.R1sheetNo, this.R2sheetNo, FileName,this.startLine,this.endLine))
{
return false;
}
}
//データ書き込み
if (this.ReKeys.Count > 0)
{
FileName = String.Format("{0:yyyyMMdd-HHmmss}", DateTime.Now) + "-R1&R2.xls";
//シート追加
newSheet = (Excel.Worksheet)ReBook.Sheets.Add(
Type.Missing, Type.Missing, this.ReR1sheetNo.Count + this.ReR2sheetNo.Count - 1, Type.Missing);
if (!setData(saveFileDialog,ReBook, newSheet, this.ReallR1Data, this.ReallR2Data, this.ReKeys,
this.ReR1sheetNo, this.ReR2sheetNo, FileName,this.reStartLine,this.ReEndLine))
{
return false;
}
}
book.Close(false);
excel.Quit();
return true;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
book.Close(false);
excel.Quit();
if (excel != null)
{
Kill(excel);
}
return false;
}
finally
{
if (excel != null)
{
Kill(excel);
}
}
}
/// <summary>
/// プロセス閉じる
/// </summary>
/// <param name="excelApp"></param>
[System.Runtime.InteropServices.DllImport("User32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
private void Kill(Excel.Application excelApp)
{
IntPtr t = new IntPtr(excelApp.Hwnd);
int k = 0; GetWindowThreadProcessId(t, out k);
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
p.Kill();
}
{
string FileName;
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.RestoreDirectory = true;
saveFileDialog.OverwritePrompt = true;
saveFileDialog.AutoUpgradeEnabled = true;
saveFileDialog.Filter = "Execl files (*.xlsx)|*.xlsx";
saveFileDialog.FilterIndex = 1;
saveFileDialog.Title = "保存先のファイルを選択してください";
Excel.Application excel = new Excel.Application();
Excel.Workbook book = excel.Workbooks.Add(Excel.XlSheetType.xlWorksheet);
//Excel.Sheets woSheets = book.Worksheets;
Excel.Worksheet newSheet = null;
Excel.Workbook ReBook = excel.Workbooks.Add(Excel.XlSheetType.xlWorksheet);
try
{
//データ書き込み
if (this.Keys.Count > 0)
{
FileName = String.Format("{0:yyyyMMdd-HHmmss}", DateTime.Now) + "-R1&R2.xls";
//シート追加
newSheet = (Excel.Worksheet)book.Sheets.Add(
Type.Missing, Type.Missing, this.R1sheetNo.Count + this.R2sheetNo.Count - 1, Type.Missing);
if (!setData(saveFileDialog, book, newSheet, this.allR1Data, this.allR2Data, this.Keys,
this.R1sheetNo, this.R2sheetNo, FileName,this.startLine,this.endLine))
{
return false;
}
}
//データ書き込み
if (this.ReKeys.Count > 0)
{
FileName = String.Format("{0:yyyyMMdd-HHmmss}", DateTime.Now) + "-R1&R2.xls";
//シート追加
newSheet = (Excel.Worksheet)ReBook.Sheets.Add(
Type.Missing, Type.Missing, this.ReR1sheetNo.Count + this.ReR2sheetNo.Count - 1, Type.Missing);
if (!setData(saveFileDialog,ReBook, newSheet, this.ReallR1Data, this.ReallR2Data, this.ReKeys,
this.ReR1sheetNo, this.ReR2sheetNo, FileName,this.reStartLine,this.ReEndLine))
{
return false;
}
}
book.Close(false);
excel.Quit();
return true;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
book.Close(false);
excel.Quit();
if (excel != null)
{
Kill(excel);
}
return false;
}
finally
{
if (excel != null)
{
Kill(excel);
}
}
}
/// <summary>
/// プロセス閉じる
/// </summary>
/// <param name="excelApp"></param>
[System.Runtime.InteropServices.DllImport("User32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
private void Kill(Excel.Application excelApp)
{
IntPtr t = new IntPtr(excelApp.Hwnd);
int k = 0; GetWindowThreadProcessId(t, out k);
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
p.Kill();
}
相关文章推荐
- c#关闭excel进程失败的解决方法
- C#导出Excel后关闭进程(EXCEL.EXE)释放资源的解决方案
- C# Excel进程关闭
- C#关闭excel进程的最有效方法
- C#操作完EXCEL如何砌底关闭进程
- C#导出Excel后关闭进程(EXCEL.EXE)释放资源的解决方案
- C#强制关闭Excel进程(通过COM使用Excel时)
- C#和Asp.net下调用Excel后无法自动关闭进程的解决方法
- C#用Com组件解析Excel文件 然后删除Excel 并且彻底关闭Excel进程(公司实战项目经验)
- C#关闭当前excel进程方法
- C#导出Excel后关闭进程(EXCEL.EXE)释放资源的解决方案
- C#用Com组件解析Excel文件 然后删除Excel 并且彻底关闭Excel进程
- 使用完excel后,如何关闭进程(C#)
- C#在Web项目中关闭Excel进程的方法
- C# 如何关闭,释放Excel进程
- C#导出Excel后关闭进程(EXCEL.EXE)释放资源的解决方案
- C#关闭excel进程方法
- C# Excel进程关闭
- [原创]C#生成Excel,彻底关闭进程
- C# 关闭EXCEL进程