您可能会问:乐创者和航海有什么关系?
lczReport 和 lczExcel 中“单元格扩展机制”完全遵循本文所述的大海航行原理。
那学习这个原理有什么用?可以让您在使用lczReport和lczExcel中过程中得心应手。

“万物生长靠太阳,大海航行靠舵手”,我们中的大多数人都没有作为舵手在大海中航行的经历,那就让我们在单元格中去徜徉吧。

1 前提假设

假设您是一位纵横四海的船长,带领着一个船队在大海中航行。
船队中的船被分为了两种:导航船普通船
两种类型船只的主要区别是:导航船配备有动力引擎,可以依靠自身进行航行,而普通船自身无动力引擎。
所谓的航行方向,只有两种:横向(自西向东,或者说从左到右)、纵向(从北到南,或者说从上到下)。
作为船长,必须要了解这两种类型船只的航行规则。

2 普通船航行

5条规则:
规则1:
普通船是没有动力的,它只能由它的导航船牵引才能航行,如果没有导航船,则普通船会静止在大海中。
规则2:
为了让普通船航行起来,船长必须在该普通船上四处眺望以搜寻导航船。最先搜寻到的导航船会与当前普通船建立牵引关系。
搜寻导航船的方法是:
在横向(东西方向:默认是先向西面搜寻,西面找不到的话再向东面搜寻)搜寻纵向的导航船,如下图所示:

上图中,普通船B静止在大海中,若要航行,则必须要找到导航船牵引前进。船B上的船长会向西眺望去寻找导航船, 首先他会找到船A,但船A是无导航能力的普通船,所以将船A排除,继续往西搜寻找到导航船,与之建立牵引关系。
在纵向(南北方向:默认是先向北面搜寻,北面找不到的话再向南面搜寻)搜寻横向的导航船,如下图所示:

上图中,共有四艘船在大海中航行,其中船A和船B是横向航行的导航船;船C和船D是普通船,静止在大海中。若船C和船D也要航行,则必须要找到导航船牵引前进。船D上的船长向北眺望搜寻导航船,首先他会找到船C,但船C是无导航能力的普通船,所以将船C排除,继续往北搜寻找到船B,于是和船B建立了牵引关系。
规则3:
如果纵向和横向都搜寻到了导航船,则该普通船在两个方向都同时会被牵引。
规则4:
必要的时候,可以不通过自动搜寻的方式,而是强制与任意位置的导航船建立牵引关系并跟随其航行。如下图所示:

上图中,因为船B、船C、船D这一纵队上并没有导航船,因此通过自动搜寻的方式不能找到横向航行的导航船。在东北方向有一个导航船船A, 船B的船长可以通过强制指定的方式将船A做为船B的导航船,牵引着船B进行横向航行。
规则5:
属于高级规则,规则四中被强制指定导航船的普通船(即船B)称为“应急导航船”,在必要的时候可以作为导航船使用。

3 导航船航行

3条规则:
规则1:
导航船可以横向(自西向东)或者纵向(从北到南)航行。
规则2:
导航船可以进一步借助其它导航船的动力加速航行,搜寻导航船的方法是:如果自身的航行方向是纵向航行,则向西搜寻相同航行方向的导航船;如果自身的航行方向是横向航行,则向北搜寻相同航行方向的导航船。
规则3:
必要的时候,也可以强制指定任意位置但航行方向一致的导航船。

4 经验总结

制作单元格报表就类似于指挥船只在大海中航行,只不过船只变成了单元格:
导航船变成了报表中的导航格
普通船变成了报表中的普通格
横向航行变成了横向扩展纵向航行变成了纵向扩展

作者:fancy  创建时间:2023-06-09 10:15
最后编辑:fancy  更新时间:2024-10-31 17:13