4 releases (2 breaking)
0.3.0 | Jun 2, 2022 |
---|---|
0.2.1 | May 3, 2022 |
0.2.0 | May 2, 2022 |
0.1.0 | Apr 18, 2022 |
26 downloads per month
Used in logisheets
560KB
16K
SLoC
Block
Block是指在一个sheet中一块连续的由单元格组成的区域。 该区域可以随时调整大小,但不受插入行列等全局操作影响。Block中的单元格可以引用任何单元格,也可被任何单元格引用。Block是LogiSheets实现结构化数据的基础。
Block的创建、扩大、移动
在创建Block时,需要先指定Block的大小。那么原本在这片区域的“一般单元格”都会被删除(若有公式引用,则引用处变为#REF!)。 Block扩建与移动同理,将会被Block占用的“一般单元格”会被删除。
用一种形象的方式去描述:Block的创建、扩大和移动都是去“占领”一般单元格的地盘的。 也就是说,Block的创建、扩大、和移动,除了涉及被占据的一般单元格外,其他的一般单元格是没有影响的。 这与插入或行列块是有明显区别的。 这样的设计的好处显而易见:在一个具体的位置当中,如A5,D9,这个单元格要么是一般单元格、要么是Block单元格。 这样在公式中引用该单元格时就可以转换成单元格ID。
单元格
组成Block的单元格不妨称为Block单元格。
用户在某个单元格键入公式,其中包含了对单元格C5的引用。
- 若C5是一般单元格,
其与一般单元格唯一的不同在于两者单元格Id组织方式存在差别。
pub enum CellId {
NormalCell(NormalCellId),
BlockCell(BlockCellId),
}
操作
全局插入行或列
- 插入的行列无论相对于Block在什么位置,无其他影响
全局删除行或列
- 删除的行(或列)在Block的上方(或左方),无其他影响
- 删除的行(或列)在Block的下方(或右方),无其他影响
- 删除的行(或列)在Block的中部,则与Block的下方(或右方)接壤的一般单元格会被删除。如果接壤区域中包括Block单元格,则整个Block都需要被删除.
Block插入行或列
- 与Block的下方(或右方)接壤的一般单元格会被删除
Block删除行或列
- 无其他影响
删除Block单元格
Block的单元格删除只能通过删除Block的整行或整列来达到.不能删除个别的单元格. 当用户选定部分Block单元格进行删除时,实际上是将该数据清空.
单元格引用
一般单元格及Block单元格不能同时被一个Range引用.若一个公式包含一个Range引用A1:C5,那么A1:C5这个范围内要么全是一般单元格,要么全是Block单元格.
- 若用户输入A1:C5,其中A1是一般单元格,C5是Block单元格. 此时将该语法树节点转为一般单元格的引用(即A1).
- 若用户输入A1:C5,其中A1与C5均为Block单元格,但不属于同一个Block. 此时将该语法树节点转为第一个单元格引用(即A1).
- 若用户输入A1:C5,其中A1与C5均为一般单元格.但是在A1:C5范围内存在若干个Block单元格. 此时不对用户输入作出修改.然而在计算过程中,该范围内的Block的数值不参与计算.
Dependencies
~17MB
~328K SLoC