Excel 操作工具 For .Net Framework 4.0


因爲開發中很多時候都會用到Excel讀寫功能爲了簡化操作而設計的一個對Excel操作的簡化抽象類


using Excel = Microsoft.Office.Interop.Excel;

    /// <summary>
    /// Excel 操作工具 For .Net Framework 4.0
    /// </summary>
    public abstract class AbstractExcelUtil
    {
        #region --- 內部字段 Begin ---
        /// <summary>
        ///  Excel 程序載體
        /// </summary>       
        Excel.Application excelApp = null;
        /// <summary>
        /// Excel 工作本
        /// </summary>
        Excel.Workbook excelWorkbook = null;
        /// <summary>
        /// Excel 單元表
        /// </summary>
        Excel.Worksheet excelWorksheel = null;

        #endregion --- 內部字段 End ---

        #region --- Ctor Begin ---
        /// <summary>
        /// 構造方法 
        /// </summary>
        public AbstractExcelUtil()
        {

        }

        #endregion --- Ctor End ---

        #region --- 基本方法 Begin ---
        /// <summary>
        /// 創建 Excel 工作本 
        /// </summary>
        protected void CreateWorkbook()
        {            
            excelApp = new Excel.Application();
            excelWorkbook = excelApp.Application.Workbooks.Add();
        }

        /// <summary>
        /// 打開現有的 Excel 工作本
        /// </summary>
        /// <param name="filePath">工作本路徑</param>
        protected void OpenWorkbook(string filePath)
        {
            excelApp = new Excel.Application();
            excelWorkbook = excelApp.Application.Workbooks.Open(filePath);
        }

        /// <summary>
        /// 添加一個Worksheet
        /// </summary>
        /// <param name="sheelName">Worksheel 名稱</param>
        /// <returns>成功返回True表示添加Worksheel成功,失敗返回False表示添加Worksheel失敗輸入參數sheelName不正確、沒有創建 Excel 工作本 </returns>
        protected bool AddWorksheet(string sheelName)
        {
            if (string.IsNullOrWhiteSpace(sheelName) == true)
            {
                return false;
            }
            if (excelWorkbook == null)
            {
                return false;
            }
            excelWorksheel = (Excel.Worksheet)excelWorkbook.Worksheets.Add();
            excelWorksheel.Name = sheelName;
            return true;
        }

        /// <summary>
        /// 設定當前工作表
        /// </summary>
        /// <param name="sheelIndex">工作表索引</param>
        protected void SetWorksheet(int sheelIndex)
        {
            excelWorksheel = (Excel.Worksheet)excelWorkbook.Worksheets[sheelIndex];
        }

        /// <summary>
        /// 設定當前工作表
        /// </summary>
        /// <param name="sheelName">工作表名稱</param>
        protected void SetWorksheet(string sheelName)
        {
            foreach (Excel.Worksheet item in excelWorkbook.Worksheets)
            {
                if (item.Name.Equals(sheelName) == true)
                {
                    excelWorksheel = item;
                    break;
                }
            }
        }

        /// <summary>
        /// 給單元格賦值
        /// </summary>
        /// <param name="rowIndex">行</param>
        /// <param name="columnIndex">列</param>
        /// <param name="value">值</param>
        protected void SetCellValue(int rowIndex, int columnIndex, object value)
        {
            excelWorksheel.Cells[rowIndex, columnIndex] = value;
        }

        /// <summary>
        /// 獲取單元格的值
        /// </summary>
        /// <param name="rowIndex">行</param>
        /// <param name="columnIndex">列</param>
        /// <returns>單元格的值</returns>
        protected dynamic GetCellValue(int rowIndex, int columnIndex)
        {
            return ((Excel.Range)excelWorksheel.Cells[rowIndex, columnIndex]).Value;
        }

        /// <summary>
        /// 獲取單元格的數值類型的值【int、double、DateTime、Currency等類型】
        /// </summary>
        /// <param name="rowIndex">行</param>
        /// <param name="columnIndex">列</param>
        /// <returns>單元格的值</returns>
        protected dynamic GetCellValue2(int rowIndex, int columnIndex)
        {

            return ((Excel.Range)excelWorksheel.Cells[rowIndex, columnIndex]).Value2;
        }

        /// <summary>
        /// 獲取單元格
        /// </summary>
        /// <param name="rowIndex">行</param>
        /// <param name="columnIndex">列</param>
        /// <returns>返回當前單元格</returns>
        protected Excel.Range GetCell(int rowIndex, int columnIndex)
        {
            return (Excel.Range)excelWorksheel.Cells[rowIndex, columnIndex];
        }

        /// <summary>
        /// 合拼單元格
        /// </summary>
        /// <param name="rowIndex1">起始單格的行</param>
        /// <param name="columnIndex1">起始單格的列</param>
        /// <param name="rowIndex2">結束單格的行</param>
        /// <param name="columnIndex2">結束單格的列</param>
        /// <returns>返回合拼後的單元格</returns>
        protected Excel.Range MergerCells(int rowIndex1, int columnIndex1, int rowIndex2, int columnIndex2)
        {
            Excel.Range range = excelWorksheel.Range[excelWorksheel.Cells[rowIndex1, columnIndex1], excelWorksheel.Cells[rowIndex2, columnIndex2]];
            range.MergeCells = true;
            return range;
        }

        /// <summary>
        /// 合拼單元格
        /// </summary>
        /// <param name="startCell">起始單格</param>
        /// <param name="endCell">結束單格</param>
        /// <returns>返回合拼後的單元格</returns>
        protected Excel.Range MergerCells(Excel.Range startCell, Excel.Range endCell)
        {
            Excel.Range range = excelWorksheel.Range[startCell, endCell];
            range.MergeCells = true;
            return range;
        }


        /// <summary>
        /// 保存文件並關閉對象
        /// </summary>
        /// <param name="filePath">保存文件路徑</param>
        /// <returns>成功返回True表示保存成功,失敗返回False表示輸入參數filePath不正確</returns>
        protected bool SaveAndCloseWorkbook(string filePath)
        {
            if (string.IsNullOrWhiteSpace(filePath) == true)
            {
                return false;
            }
            excelWorkbook.SaveAs(filePath);
            excelWorkbook.Close();
            excelApp.Quit();
            return true;
        }

        /// <summary>
        /// 釋放所有 Excel 進程
        /// </summary>
        /// <returns>成功返回True表示已經釋放所有 Excel 進程,失敗返回False表示釋放所有 Excel 進程發生錯誤</returns>
        protected bool KillAllExcel()
        {
            try
            {
                if (excelApp == null)
                {
                    return true;
                }
                excelApp.Quit();
                System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
                foreach (System.Diagnostics.Process process in System.Diagnostics.Process.GetProcessesByName("EXCEL"))
                {
                    if (process.CloseMainWindow() == false)
                    {
                        process.Kill();
                    }
                }
                excelApp = null;
                return true;
            }
            catch
            {
                return false;
            }
        }


        #endregion --- 基本方法 End ---
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章