Esempio n. 1
0
        /// <summary>
        /// Excelリソース解放
        /// </summary>
        /// <param name="ReleaseMode">リリース対象Enum</param>
        private void ReleaseExcelComObject(EnumReleaseMode ReleaseMode)
        {
            try
            {
                // xlSheet解放
                if (xlSheet != null)
                {
                    Marshal.ReleaseComObject(xlSheet);
                    xlSheet = null;
                }
                if (ReleaseMode == EnumReleaseMode.Sheet)
                {
                    return;
                }

                // xlSheets解放
                if (xlSheets != null)
                {
                    Marshal.ReleaseComObject(xlSheets);
                    xlSheets = null;
                }
                if (ReleaseMode == EnumReleaseMode.Sheets)
                {
                    return;
                }

                // xlBook解放
                if (xlBook != null)
                {
                    Marshal.ReleaseComObject(xlBook);
                    xlBook = null;
                }
                if (ReleaseMode == EnumReleaseMode.Book)
                {
                    return;
                }

                // xlBooks解放
                if (xlBooks != null)
                {
                    Marshal.ReleaseComObject(xlBooks);
                    xlBooks = null;
                }
                if (ReleaseMode == EnumReleaseMode.Books)
                {
                    return;
                }

                // xlApp解放
                if (xlApp != null)
                {
                    Marshal.ReleaseComObject(xlApp);
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
        /// <summary>
        /// Excelリソース解放
        /// </summary>
        /// <param name="releaseMode">リリース対象</param>
        private void ReleaseExcelComObject(EnumReleaseMode releaseMode)
        {
            // enumでリソースをどこまで解放するか指定
            try
            {
                // XlSheet解放
                if (xlSheet != null)
                {
                    Marshal.ReleaseComObject(xlSheet);
                    xlSheet = null;
                }
                if (releaseMode == EnumReleaseMode.Sheet)
                {
                    return;
                }

                // xlSheets解放
                if (xlSheets != null)
                {
                    Marshal.ReleaseComObject(xlSheets);
                    xlSheets = null;
                }
                if (releaseMode == EnumReleaseMode.Sheets)
                {
                    return;
                }

                // xlBook解放
                if (xlBook != null)
                {
                    try
                    {
                        xlBook.Close();
                    }
                    finally
                    {
                        Marshal.ReleaseComObject(xlBook);
                        xlBook = null;
                    }
                }
                if (releaseMode == EnumReleaseMode.Book)
                {
                    return;
                }

                // xlBooks解放
                if (xlBooks != null)
                {
                    Marshal.ReleaseComObject(xlBooks);
                    xlBooks = null;
                }
                if (releaseMode == EnumReleaseMode.Books)
                {
                    return;
                }

                // xlApp解放
                if (xlApp != null)
                {
                    try
                    {
                        // アラートが表示されるように戻して終了
                        xlApp.DisplayAlerts = true;
                        xlApp.Quit();
                    }
                    finally
                    {
                        Marshal.ReleaseComObject(xlApp);
                        xlApp = null;
                    }
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }