天天看点

C# 关闭 Excel进程

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

        }

Â