这个流程图展示了ExCell类的主要结构:
开始 / Start
这是流程的起点,代表我们开始使用 ExCell 类。
创建 ExCell 实例 / Create ExCell Instance
这对应于代码中的构造函数部分。
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) { ... }
}
选择构造方法 / Choose Constructor
根据需求选择不同的构造函数来创建 ExCell 实例。
属性操作 / Property Operations
这对应于代码中的属性部分。
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; }
地址转换操作 / Address Conversion Operations
这主要对应于 Address 属性的 get 和 set 方法。
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 ...
}
}
其他操作 / Other Operations
这包括 ToString 方法。
public override string ToString()
{
return this.Address;
}
成员变量 / Member Variables
虽然流程图中没有直接显示,但这些是类的基础。
protected int column = 1;
protected int row = 1;
protected bool isColumnAbsolute = false;
protected bool isRowAbsolute = false;
流程图展示了使用 ExCell 类的典型过程:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bumblebee
{
///
/// ExCell类代表Excel中的一个单元格
/// 它包含单元格的列、行信息,以及是否为绝对引用
///
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 构造函数
///
/// 默认构造函数,创建一个位于A1的单元格
///
public ExCell()
{
}
///
/// 复制构造函数,创建一个与给定单元格相同的新单元格
///
/// 要复制的单元格
public ExCell(ExCell cell)
{
this.column = cell.column;
this.row = cell.row;
this.isColumnAbsolute = cell.isColumnAbsolute;
this.isRowAbsolute = cell.isRowAbsolute;
}
///
/// 通过地址字符串创建单元格
///
/// 单元格地址,如"A1"或"$B$2"
public ExCell(string address)
{
this.Address = address;
}
///
/// 通过列号和行号创建单元格
///
/// 列号
/// 行号
public ExCell(int column, int row)
{
this.column = column;
this.row = row;
}
///
/// 创建可能包含绝对引用的单元格
///
/// 列号
/// 行号
/// 列是否为绝对引用
/// 行是否为绝对引用
public ExCell(int column, int row, bool absColumn, bool absRow)
{
this.column = column;
this.row = row;
this.isColumnAbsolute = absColumn;
this.isRowAbsolute = absRow;
}
#endregion
#region 属性
///
/// 获取或设置单元格的列号
///
public virtual int Column
{
get { return column; }
set {
this.column = value;
}
}
///
/// 获取或设置单元格的行号
///
public virtual int Row
{
get { return row; }
set
{
this.row = value;
}
}
///
/// 获取或设置单元格的地址
/// 当获取时,会根据当前的列、行和绝对引用信息生成地址字符串
/// 当设置时,会解析地址字符串,更新列、行和绝对引用信息
///
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;
}
}
///
/// 获取列引用是否为绝对引用
///
public virtual bool IsColumnAbsolute
{
get { return isColumnAbsolute; }
}
///
/// 获取行引用是否为绝对引用
///
public virtual bool IsRowAbsolute
{
get { return isRowAbsolute; }
}
#endregion
#region 方法
// 此区域为空,可以在此添加自定义方法
#endregion
#region 重写
///
/// 重写ToString方法,返回单元格的地址
///
/// 单元格的地址字符串
public override string ToString()
{
return this.Address;
}
#endregion
}
}