C#创建excel并释放资源

using System;
using Microsoft.Office.Interop.Excel;
using Excel = Microsoft.Office.Interop.Excel;
using System.IO;
using System.Windows.Forms;
using System.Runtime.InteropServices;

public class Class2
    {
        private string filePath;
        private Excel.Application app = null;
        private Workbook wb;
        private Worksheet ws;
        private Workbooks wbs;
        /// <summary>
        /// 创建
        /// </summary>
        /// <param name="filePath"></param>
        public void create(string filePath)
        {
            this.filePath = filePath;
            app = new Excel.Application();
            if (app == null)
            {
                Out.show("无法创建Excel对象,可能您的电脑未安装Excel!");
                app.Quit();
                GC.Collect();
                return;
            }
            try
            {
                app.Visible = false;
                app.Application.DisplayAlerts = false;
            }
            catch (Exception e)
            {

            }
            wbs = app.Workbooks;
            wb = wbs.Add(Excel.XlWBATemplate.xlWBATWorksheet);
            ws = wb.Worksheets[1] as Worksheet;
        }

        public void Write()
        {
            ws.Cells[1, 1] = "hello";
        }
        /// <summary>
        /// 保存文件
        /// </summary>
        public void Save()
        {
            while (File.Exists(filePath))
            {
                try
                {
                    File.Delete(filePath);
                    break;
                }
                catch (Exception e)
                {
                    if (MessageBox.Show("该文件已被占用,请关闭", "提示", MessageBoxButtons.RetryCancel)
                        != DialogResult.Retry)
                    {
                        break;
                    };
                }
            }
            wb.Saved = true;
            wb.SaveAs(filePath);
            Kill();
        }
        [DllImport("User32.dll", CharSet = CharSet.Auto)]
        public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
        /// <summary>
        /// 杀掉对应进程,释放资源
        /// </summary>
        public void Kill()
        {
            int processId;
            GetWindowThreadProcessId(new IntPtr(app.Hwnd), out processId);
            Out.show(processId.ToString());
            System.Diagnostics.Process.GetProcessById(processId).Kill();
        }
    }
原文地址:https://www.cnblogs.com/jecyhw/p/4047216.html