【C#】【EXCEL】Bumblebee/Classes/ExApp.cs

Bumblebee/Classes/ExApp.cs

Flow diagram

成功 / Success
失败 / Failure
工作簿操作
Workbook Operations
工作表操作
Worksheet Operations
其他操作
Other Operations
开始 / Start
创建 ExApp 实例
Create ExApp Instance
获取或创建
Excel 应用程序
Get or Create
Excel Application
Excel 应用程序就绪
Excel Application Ready
抛出异常
Throw Exception
选择操作类型
Choose Operation Type
工作簿操作
Workbook Operations
工作表操作
Worksheet Operations
其他操作
Other Operations
加载工作簿
LoadWorkbook
获取所有工作簿
GetWorkbooks
获取特定工作簿
GetWorkbook
获取活动工作簿
GetActiveWorkbook
获取特定工作表
GetWorksheet
获取所有工作表
GetWorksheets
获取活动工作表
GetActiveWorksheet
冻结屏幕
Freeze
解冻屏幕
UnFreeze
完成工作簿操作
Workbook Operations Completed
完成工作表操作
Worksheet Operations Completed
完成其他操作
Other Operations Completed
结束 / End
  1. 创建 ExApp 实例 (Create ExApp Instance)

    • 对应构造函数:public ExApp()
  2. 获取或创建 Excel 应用程序 (Get or Create Excel Application)

    • 在构造函数中:

      this.ComObj = (XL.Application)Marshal2.GetActiveObject("Excel.Application");
      // 或
      this.ComObj = new XL.Application();
      
  3. 工作簿操作 (Workbook Operations)

    • LoadWorkbook: public ExWorkbook LoadWorkbook(string filePath)
    • GetWorkbooks: public List GetWorkbooks()
    • GetWorkbook: public ExWorkbook GetWorkbook(string name)
    • GetActiveWorkbook: public ExWorkbook GetActiveWorkbook()
  4. 工作表操作 (Worksheet Operations)

    • GetWorksheet: public ExWorksheet GetWorksheet(string name)
    • GetWorksheets: public List GetWorksheets()
    • GetActiveWorksheet: public ExWorksheet GetActiveWorksheet()
  5. 其他操作 (Other Operations)

    • Freeze: public void Freeze()
    • UnFreeze: public void UnFreeze()

Code

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// 使用别名 XL 来简化 Microsoft.Office.Interop.Excel 的引用
using XL = Microsoft.Office.Interop.Excel;

namespace Bumblebee
{
    /// 
    /// 封装 Excel 应用程序的类,提供对 Excel 的各种操作
    /// 
    public class ExApp
    {
        #region members

        // Excel 应用程序对象
        public XL.Application ComObj = null;

        #endregion

        #region constructors

        /// 
        /// 默认构造函数:尝试获取已运行的 Excel 实例,如果失败则创建新实例
        /// 
        public ExApp()
        {
            try
            { 
                // 尝试获取已经运行的 Excel 实例
                this.ComObj = (XL.Application)Marshal2.GetActiveObject("Excel.Application"); 
            }
            catch (Exception e)
            {
                // 如果没有运行的实例,创建一个新的
                this.ComObj = new XL.Application();
            }
            // 如果没有活动的工作簿,添加一个新的
            if (this.ComObj.ActiveWorkbook == null) this.ComObj.Workbooks.Add();
            // 确保 Excel 窗口可见
            if(!this.ComObj.Visible) this.ComObj.Visible = true;
        }

        /// 
        /// 复制构造函数:从另一个 ExApp 对象创建新实例
        /// 
        /// 现有的 ExApp 对象
        public ExApp(ExApp exApp)
        {
            this.ComObj = exApp.ComObj;
        }

        /// 
        /// 参数化构造函数:使用给定的 Excel.Application 对象创建实例
        /// 
        /// Excel.Application 对象
        public ExApp(XL.Application comObj)
        {
            this.ComObj = comObj;
        }

        #endregion

        #region properties

        // 这里可以添加属性

        #endregion

        #region methods

        /// 
        /// 暂停屏幕更新,提高性能
        /// 
        public void Freeze()
        {
            this.ComObj.ScreenUpdating = false;
        }

        /// 
        /// 恢复屏幕更新
        /// 
        public void UnFreeze()
        {
            this.ComObj.ScreenUpdating = true;
        }

        #region workbooks

        /// 
        /// 加载指定路径的工作簿
        /// 
        /// 工作簿文件路径
        /// 加载的工作簿对象
        public ExWorkbook LoadWorkbook(string filePath)
        {
            ExWorkbook workbook = new ExWorkbook(this.ComObj.Workbooks.Open(filePath));
            return workbook;
        }

        /// 
        /// 获取所有打开的工作簿
        /// 
        /// 工作簿对象列表
        public List<ExWorkbook> GetWorkbooks()
        {
            List<ExWorkbook> output = new List<ExWorkbook>();
            foreach (XL.Workbook workbook in this.ComObj.Workbooks)
            {
                output.Add(new ExWorkbook(workbook));
            }
            return output;
        }

        /// 
        /// 根据名称获取特定工作簿
        /// 
        /// 工作簿名称(不包括扩展名)
        /// 找到的工作簿对象,如果未找到则返回 null
        public ExWorkbook GetWorkbook(string name)
        {
            ExWorkbook output = new ExWorkbook();
            foreach (XL.Workbook workbook in this.ComObj.Workbooks)
            {
                string file = Path.ChangeExtension(workbook.Name, null);
                if (file == name)
                {
                    output.Set(workbook);
                    return output;
                }
            }
            return null;
        }

        /// 
        /// 获取当前活动的工作簿
        /// 
        /// 活动工作簿对象
        public ExWorkbook GetActiveWorkbook()
        {
            ExWorkbook output = new ExWorkbook();
            if (this.ComObj.Workbooks.Count < 1)
            {
                output.Set(this.ComObj.Workbooks.Add());
            }
            else
            {
                output.Set(this.ComObj.ActiveWorkbook);
            }
            return output;
        }

        #endregion

        #region worksheets

        /// 
        /// 根据名称获取特定工作表
        /// 
        /// 工作表名称
        /// 找到的工作表对象,如果未找到则返回 null
        public ExWorksheet GetWorksheet(string name)
        {
            ExWorksheet output = new ExWorksheet();
            foreach (XL.Worksheet worksheet in this.ComObj.Worksheets)
            {
                if (worksheet.Name == name)
                {
                    output = new ExWorksheet(worksheet);
                    return output;
                }
            }
            return null;
        }

        /// 
        /// 获取所有工作表
        /// 
        /// 工作表对象列表
        public List<ExWorksheet> GetWorksheets()
        {
            List<ExWorksheet> worksheets = new List<ExWorksheet>();
            foreach (XL.Worksheet sheet in this.ComObj.Worksheets)
            {
                worksheets.Add(new ExWorksheet(sheet));
            }
            return worksheets;
        }

        /// 
        /// 获取当前活动的工作表
        /// 
        /// 活动工作表对象
        public ExWorksheet GetActiveWorksheet()
        {
            ExWorksheet output = new ExWorksheet();
            if (this.ComObj.ActiveSheet == null)
            {
                XL.Workbook book = this.ComObj.Workbooks.Add();
                XL.Worksheet sheet = book.Worksheets.Add();
                output = new ExWorksheet(sheet);
            }
            else
            {
                output = new ExWorksheet(this.ComObj.ActiveSheet);
            }
            return output;
        }

        #endregion

        #endregion

        #region overrides

        /// 
        /// 重写 ToString 方法,返回类的字符串表示
        /// 
        /// 类的字符串表示
        public override string ToString()
        {
            return "Excel | App";
        }

        #endregion
    }
}

Description

这段代码定义了一个名为 ExApp 的类,它是对 Microsoft Excel 应用程序的封装。这个类提供了一系列方法来操作 Excel 应用程序、工作簿和工作表。下面是对代码的详细解释:

  1. 命名空间和引用:

    • 代码位于 Bumblebee 命名空间中。
    • 使用了 Microsoft.Office.Interop.Excel 命名空间,别名为 XL
  2. 类成员:

    • ComObj: 类型为 XL.Application,表示 Excel 应用程序对象。
  3. 构造函数:

    • 默认构造函数:尝试获取已运行的 Excel 实例,如果失败则创建新实例。
    • 复制构造函数:从另一个 ExApp 对象创建新实例。
    • 参数化构造函数:使用给定的 XL.Application 对象创建实例。
  4. 方法:

    • Freeze()UnFreeze(): 控制 Excel 的屏幕更新。
    • 工作簿相关方法:
      • LoadWorkbook(): 打开指定路径的工作簿。
      • GetWorkbooks(): 获取所有打开的工作簿。
      • GetWorkbook(): 根据名称获取特定工作簿。
      • GetActiveWorkbook(): 获取当前活动的工作簿。
    • 工作表相关方法:
      • GetWorksheet(): 根据名称获取特定工作表。
      • GetWorksheets(): 获取所有工作表。
      • GetActiveWorksheet(): 获取当前活动的工作表。
  5. 重写方法:

    • ToString(): 返回类的字符串表示。

关键点:

  1. 错误处理:使用 try-catch 处理获取已运行 Excel 实例时可能出现的错误。
  2. 兼容性:代码考虑了 Excel 应用程序可能未打开或没有活动工作簿的情况。
  3. 封装:将 Excel 操作封装在易用的方法中,简化了 Excel 自动化的过程。
  4. 灵活性:提供了多种方式来获取和操作工作簿和工作表。

学习建议:

  1. 深入了解 Microsoft.Office.Interop.Excel 命名空间和 COM 互操作。
  2. 研究 Excel 对象模型,了解 Application、Workbook、Worksheet 等对象的关系和属性。
  3. 练习使用这个类来自动化 Excel 操作,如创建、打开、保存工作簿,修改单元格等。
  4. 注意内存管理和性能优化,特别是在处理大型 Excel 文件时。
  5. 考虑添加错误处理和日志记录,以提高代码的健壮性。

你可能感兴趣的:(c#,excel,windows)