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

Bumblebee/Classes/ExCell.cs

Flow diagram

默认构造函数
Default Constructor 复制构造函数
Copy Constructor 地址构造函数
Address Constructor 列行构造函数
Column-Row Constructor 列行绝对值构造函数
Column-Row-Absolute Constructor 获取/设置属性
Get/Set Properties 地址转换
Address Conversion 其他操作
Other Operations 开始 / Start 创建 ExCell 实例
Create ExCell Instance 选择构造方法
Choose Constructor 创建默认 ExCell
Create Default ExCell 复制现有 ExCell
Copy Existing ExCell 从地址创建 ExCell
Create ExCell from Address 从列和行创建 ExCell
Create ExCell from Column and Row 创建带绝对引用的 ExCell
Create ExCell with Absolute References 选择操作类型
Choose Operation Type 属性操作
Property Operations 地址转换操作
Address Conversion Operations 其他操作
Other Operations 获取/设置 Column
Get/Set Column 获取/设置 Row
Get/Set Row 获取/设置 Address
Get/Set Address 获取 IsColumnAbsolute
Get IsColumnAbsolute 获取 IsRowAbsolute
Get IsRowAbsolute 地址到列行转换
Address to Column-Row 列行到地址转换
Column-Row to Address 解析绝对引用
Parse Absolute References ToString 方法
ToString Method 完成属性操作
Property Operations Completed 完成地址转换操作
Address Conversion Completed 完成其他操作
Other Operations Completed 结束 / End

这个流程图展示了ExCell类的主要结构:

  1. 类的主要组成部分:成员变量、构造函数、属性和方法。
  2. 成员变量:column, row, isColumnAbsolute, isRowAbsolute。
  3. 不同的构造函数。
  4. 属性:Column, Row, Address, IsColumnAbsolute, IsRowAbsolute。
  5. ToString方法。
  6. Address属性的特殊处理,包括使用Helper类的方法进行地址转换。

Description

  1. 开始 / Start

    这是流程的起点,代表我们开始使用 ExCell 类。

  2. 创建 ExCell 实例 / Create ExCell Instance

    这对应于代码中的构造函数部分。

    csharp 复制代码
    public class ExCell
    {
        // 构造函数 / Constructors
        public ExCell() { }
        public ExCell(ExCell cell) { ... }
        public ExCell(string address) { ... }
        public ExCell(int column, int row) { ... }
        public ExCell(int column, int row, bool absColumn, bool absRow) { ... }
    }
  3. 选择构造方法 / Choose Constructor

    根据需求选择不同的构造函数来创建 ExCell 实例。

  4. 属性操作 / Property Operations

    这对应于代码中的属性部分。

    csharp 复制代码
    public virtual int Column { get; set; }
    public virtual int Row { get; set; }
    public virtual string Address { get; set; }
    public virtual bool IsColumnAbsolute { get; }
    public virtual bool IsRowAbsolute { get; }
  5. 地址转换操作 / Address Conversion Operations

    这主要对应于 Address 属性的 get 和 set 方法。

    csharp 复制代码
    public virtual string Address
    {
        get { return Helper.GetCellAddress(column,row,IsColumnAbsolute,isRowAbsolute); }
        set
        {
            Tuple<int, int> loc = Helper.GetCellLocation(value);
            Tuple<bool, bool> abs = Helper.GetCellAbsolute(value);
            // ... set values ...
        }
    }
  6. 其他操作 / Other Operations

    这包括 ToString 方法。

    csharp 复制代码
    public override string ToString()
    {
        return this.Address;
    }
  7. 成员变量 / Member Variables

    虽然流程图中没有直接显示,但这些是类的基础。

    csharp 复制代码
    protected int column = 1;
    protected int row = 1;
    protected bool isColumnAbsolute = false;
    protected bool isRowAbsolute = false;

流程图展示了使用 ExCell 类的典型过程:

  1. 创建实例
  2. 对实例进行各种操作(如获取/设置属性,进行地址转换)
  3. 完成操作
csharp 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Bumblebee
{
    /// <summary>
    /// ExCell类代表Excel中的一个单元格
    /// 它包含单元格的列、行信息,以及是否为绝对引用
    /// </summary>
    public class ExCell
    {
        #region 成员变量

        // 单元格的列号,默认为1
        protected int column = 1;
        // 单元格的行号,默认为1
        protected int row = 1;
        // 列引用是否为绝对引用,默认为false
        protected bool isColumnAbsolute = false;
        // 行引用是否为绝对引用,默认为false
        protected bool isRowAbsolute = false;

        #endregion

        #region 构造函数

        /// <summary>
        /// 默认构造函数,创建一个位于A1的单元格
        /// </summary>
        public ExCell()
        {
        }

        /// <summary>
        /// 复制构造函数,创建一个与给定单元格相同的新单元格
        /// </summary>
        /// <param name="cell">要复制的单元格</param>
        public ExCell(ExCell cell)
        {
            this.column = cell.column;
            this.row = cell.row;
            this.isColumnAbsolute = cell.isColumnAbsolute;
            this.isRowAbsolute = cell.isRowAbsolute;
        }

        /// <summary>
        /// 通过地址字符串创建单元格
        /// </summary>
        /// <param name="address">单元格地址,如"A1"或"$B$2"</param>
        public ExCell(string address)
        {
            this.Address = address;
        }

        /// <summary>
        /// 通过列号和行号创建单元格
        /// </summary>
        /// <param name="column">列号</param>
        /// <param name="row">行号</param>
        public ExCell(int column, int row)
        {
            this.column = column;
            this.row = row;
        }

        /// <summary>
        /// 创建可能包含绝对引用的单元格
        /// </summary>
        /// <param name="column">列号</param>
        /// <param name="row">行号</param>
        /// <param name="absColumn">列是否为绝对引用</param>
        /// <param name="absRow">行是否为绝对引用</param>
        public ExCell(int column, int row, bool absColumn, bool absRow)
        {
            this.column = column;
            this.row = row;
            this.isColumnAbsolute = absColumn;
            this.isRowAbsolute = absRow;
        }

        #endregion

        #region 属性

        /// <summary>
        /// 获取或设置单元格的列号
        /// </summary>
        public virtual int Column
        {
            get { return column; }
            set { 
                this.column = value;
            }
        }

        /// <summary>
        /// 获取或设置单元格的行号
        /// </summary>
        public virtual int Row
        {
            get { return row; }
            set
            {
                this.row = value;
            }
        }

        /// <summary>
        /// 获取或设置单元格的地址
        /// 当获取时,会根据当前的列、行和绝对引用信息生成地址字符串
        /// 当设置时,会解析地址字符串,更新列、行和绝对引用信息
        /// </summary>
        public virtual string Address
        {
            get { return Helper.GetCellAddress(column, row, IsColumnAbsolute, isRowAbsolute); }
            set
            {
                // 解析地址字符串,获取列和行的信息
                Tuple<int, int> loc = Helper.GetCellLocation(value);
                // 解析地址字符串,获取绝对引用的信息
                Tuple<bool, bool> abs = Helper.GetCellAbsolute(value);

                this.column = loc.Item1;
                this.row = loc.Item2;
                this.isColumnAbsolute = abs.Item1;
                this.isRowAbsolute = abs.Item2;
            }
        }

        /// <summary>
        /// 获取列引用是否为绝对引用
        /// </summary>
        public virtual bool IsColumnAbsolute
        {
            get { return isColumnAbsolute; }
        }

        /// <summary>
        /// 获取行引用是否为绝对引用
        /// </summary>
        public virtual bool IsRowAbsolute
        {
            get { return isRowAbsolute; }
        }

        #endregion

        #region 方法

        // 此区域为空,可以在此添加自定义方法

        #endregion

        #region 重写

        /// <summary>
        /// 重写ToString方法,返回单元格的地址
        /// </summary>
        /// <returns>单元格的地址字符串</returns>
        public override string ToString()
        {
            return this.Address;
        }

        #endregion
    }
}
相关推荐
苹果酱05672 分钟前
「Mysql优化大师一」mysql服务性能剖析工具
java·vue.js·spring boot·mysql·课程设计
_oP_i1 小时前
Pinpoint 是一个开源的分布式追踪系统
java·分布式·开源
mmsx1 小时前
android sqlite 数据库简单封装示例(java)
android·java·数据库
武子康1 小时前
大数据-258 离线数仓 - Griffin架构 配置安装 Livy 架构设计 解压配置 Hadoop Hive
java·大数据·数据仓库·hive·hadoop·架构
豪宇刘2 小时前
MyBatis的面试题以及详细解答二
java·servlet·tomcat
秋恬意3 小时前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis
FF在路上3 小时前
Knife4j调试实体类传参扁平化模式修改:default-flat-param-object: true
java·开发语言
真的很上进3 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
码农君莫笑4 小时前
使用blazor开发信息管理系统的应用场景
数据库·信息可视化·c#·.net·visual studio
众拾达人4 小时前
Android自动化测试实战 Java篇 主流工具 框架 脚本
android·java·开发语言