您的位置:首页 > 编程语言 > C#

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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: