1.3 向数据表添加数据
之前的所有操作仅仅是建立了数据表结构。表结构建立起来之后,就可以在其中添加数据了。
1.3.1 直接输入数据
和Excel一样,可以直接在Foxtable的数据表中输入数据。
不同的是,由于Foxtable在数据表中事先定义了每列的数据类型,在相应的列中只能输入指定类型的数据。
例如,在订单表中,如果想在单价、折扣或数量列输入字符(包括汉字)是输入不进去的;同理,如果在日期列输入非日期格式的内容也是不会被接受的。这样就很好地避免了Excel中“群类乱舞”现象的发生。
❶单元格选择与快速移动操作
当需要在数据表中进行编辑、修改、复制、粘贴或删除时,首先要做的就是选择要操作的对象。在Foxtable中,选定数据或单元格的方法如下表所示。
和Excel类似,在Foxtable的数据表中也可使用以下方法快速移动光标。
按“Ctrl +↑”组合键移到同一列的第一个单元格。
按“Ctrl +↓”组合键移到同一列的最后一个单元格。
按“Home”键或按“Ctrl +←”组合键移到同一行的第一个单元格。
按“End”键或按“Ctrl +→”组合键移到同一行的最后一个单元格。
按上、下、左、右箭头键可以分别向上、向下、向左、向右移动单元格。
❷数据编辑操作
● 常规输入操作
选择要输入数据的单元格,直接输入数据即可。输入完成后按“Enter”键或“Tab”键将自动移动到右边的单元格;当移动到数据行的最后一个单元格时,按“Enter”键或“Tab”键将自动移动到下一行的第一个单元格。
当需要在单元格中换行时,可同时按“Ctrl+Enter”组合键,换行输入内容。当然,我们并不建议这样做,关于长文本的处理,本书第2章将给出完美的解决办法。
如果要修改数据,可在选择要修改的单元格后,按空格键或“F2”键进入修改状态,也可双击单元格进入编辑状态,并会将光标置于双击位置。
复制数据时,可以先选择要复制的单元格或单元格区域,按“Ctrl+C”组合键复制到剪贴板;然后单击要粘贴到的单元格,按“Ctrl+V”组合键。也可使用鼠标右键菜单或者【日常工作】功能区的【剪贴板】功能组中的按钮。当直接按“Ctrl+D”组合键时,可以将上一行相同位置单元格的内容复制到当前单元格,这是一种快速复制方法。
编辑修改数据时,如果在按“Enter”键或“Tab”键之前想撤销正在输入的内容,可按“Esc”键;也可单击快速访问栏中的【撤销】按钮。如果要撤销多步输入操作,反复单击【撤销】按钮即可,如下图所示。
在上图所示的椭圆形区域中,左侧的按钮为【撤销】,右侧的按钮为【重做】。
● 编辑功能组
在【日常工作】功能区的【编辑】功能组中,还有一系列常用的编辑功能,如下图所示。
○ 查找与替换
这是很多编辑类软件都有的功能,Foxtable中的用法也大同小异,如下图所示。
这里的查找位置可以选择要查找的列,匹配方式有以下4种。
完全匹配:单元格内容必须和查找内容完全相同,才算符合条件。
开始位置:单元格内容以查找内容开头即可。例如,若查找“abc”,那么“abcde”也是符合条件的。
结束位置:单元格内容以查找内容结尾即可。例如,若查找“abc”,那么“xyzabc”也是符合条件的。
任意位置:只要单元格内容包含查找内容即可。例如,若查找“abc”,那么“abcde”“xyzabc”“xabcy”等都是符合条件的。
如果单击【替换】按钮,则此查找窗口自动增加“替换”的内容,如下图所示。
替换方式有两种,分别是:全部内容和匹配内容。
全部内容:原内容将完全被替换。例如,匹配方式为任意位置,查找内容为“PTD”,替换内容为“UTC”,那么查找到的“HAPTD”都会被替换为“UTC”。
匹配内容:原内容中只有和查找内容匹配的部分才会被替换。例如,匹配方式为任意位置,查找内容为“PTD”,替换内容为“UTC”,查找到的“HAPTD”会被替换为“HAUTC”。
○ 插入符号
单击该按钮,出现插入符号窗口。双击其中的任一符号,即可将该符号插入到所选定的单元格中,如下图所示。
请注意,这些符号都保存在Foxtable安装目录下的文件SYMBOLTXT中,可通过修改这个文件,加入自己的常用符号、删除不常用的符号。如果单击“更多符号”按钮,还将弹出字符映射表,以方便查找自己需要的其他字符。
○ 标记与还原
当单击【标记】按钮时,所有在表中被修改过的单元格都会被标记出来,如下图所示,有4个单元格的内容被修改过。
如果需要撤销对某指定单元格的修改,可以先选定此单元格,然后单击【还原】按钮。很显然,这种处理方法要比标准的撤销按钮方便得多。因为撤销按钮只能逐步撤销上一步的操作,而无法单独跨步直接撤销对某个单元格的修改。
如果选定某个区域后,再单击【还原】按钮,将撤销该区域内的所有修改。
○ 序列填充、重复填充与快速清零
这3种编辑处理方法都在【日常工作】功能区的【编辑】功能组的【其他】下拉菜单中,如下图所示。
这里的【序列填充】和【重复填充】都是垂直方向的,也就是只能在某一列中向下填充。
序列填充:在填充区域的前两个单元格中,输入序列中的头两个值,如“001”“002”(也可以包括前缀,如“A01”“A02”);然后选定整个要填充的区域,单击【序列填充】命令即可在所选定的区域自动按相应的序列顺序填充内容。
重复填充:在填充区域的第一个单元格输入要填充的值,然后选定整个要填充的区域,单击【重复填充】命令或按“Ctrl+D”组合键即可。
例如,在“客户ID”列先输入C01和C03,然后选择10行要填充的区域,如下图所示。
执行【序列填充】命令后的效果如下图所示。
由于“C01”和“C03”的序列间隔为2,因此,后面的填充内容会顺序加2;如果执行【重复填充】命令,则所有的填充区域都会填入“C01”。
快速清零:将选定区域内数值内容为0的单元格内容全部清除,原来为0的单元格将变成空值。
❸数据行操作
默认情况下,Foxtable新建的数据表中只有10条记录,当需要增加记录时,可通过【日常工作】功能区的【数据】功能组中的按钮进行操作,如下图所示。
也可在任意的行号或单元格上,通过选择右键菜单进行处理,如下图所示。
需要注意的是,这里的【插入行】【上移行】【下移行】命令需要在表结构中设置了“插入行标志列”才能有效,【锁定行】【解锁行】命令需要设置“锁定行标志列”才能永久保存。
以下是Foxtable在处理数据行时的两个特别功能。
● 行号颜色
默认情况下,数据表的左边会显示每条记录的行号。行号的颜色是有特殊意义的,不同的颜色表示不同的行状态。
其中,灰色表示该行被锁定,既无法编辑也无法删除;橙色表示该行内容被修改了;红色表示这是新增行;蓝色表示这是保存在数据库中的原始行。
在上图中,第2~3行的行号为橙色,表示这是被修改过的行;第5行是灰色,表示该行被锁定;第6行是红色,表示新增加的行;第1行和第4行为已经保存到数据库中的原始数据,既未被修改,也没被锁定。
数据编辑完成后,一旦按“Ctrl+S”组合键或者单击窗口左上方的【保存】按钮,除了锁定行的行号继续为灰色外,其他所有行的行号都将变为蓝色,表示全部数据已同步保存到数据库中(被锁定的行如果在锁定前发生了更改,更改后的数据仍然会保存且继续保持锁定)。
请注意,锁定行在被解锁之后,即使没有对该行作任何手工修改,其行号颜色也会变为橙色。这是因为,从锁定到解锁,其状态已经发生了改变,数据库中的“_Locked”值由True变成了False。同样,对新增行锁定时,行号也只是在原来的红色基础上加灰,只有保存后才会完全变为灰色。
● 整行突出显示
在编辑和查看数据时,如果表很宽,左右滚动表格时,很容易将相邻行的数据误作本行的数据。为避免此情况,可使用【整行】命令以突出显示。
单击【日常工作】功能区的【编辑】功能组中的【整行】按钮,如下图所示。
那么当前表中的光标所在行就会突出显示(整行都有一种淡红色的背景),如下图所示。
1.3.2 导入现有数据
如果已经有了现成的数据,可以不用再重复输入,将现有数据导入到Foxtable中即可。
例如,在Excel中已经有了现成的3个数据表,而且之前的数据表都是按照这3个表的结构来创建的,则可采用以下方法将数据导入到Foxtable中。
❶复制粘贴法
在Excel中选择要复制的内容区域(注意不要选择标题行,因为Foxtable的表结构中已经有独立的标题行了),按“Ctrl+C”组合键复制到剪贴板;然后在Foxtable相应数据表中选择目标区域的第一个单元格,按“Ctrl+V”组合键即可将剪贴板上的内容复制过来,如下图所示。
使用此方法时需要注意以下两点。
第一,要复制的表结构必须和Foxtable中的数据表结构完全一致,且列顺序相同;否则复制过来后将会出现错位现象。
第二,Foxtable数据表默认只有10行记录。当要复制的数据行大于10时,应在Foxtable中先行给数据表增加行数。如本例,Excel的订单表数据共有864行,要把这些内容全部复制过来,必须给Foxtable中的订单表增加854行。增加多行的方法:单击【日常工作】功能区的【数据】功能组中的【增加行】按钮,选择【增加多行】命令,如下图所示。
由于Foxtable每次最多只能增加300行,因此当需要增加854行的数据记录时就要执行多次【增加多行】命令。
❷导入法与合并法
如果现有数据量非常大,采用复制粘贴法就会非常不方便。如上例,虽然数据只有800多行,在Foxtable里就要至少先执行3次的【增加多行】命令,如果数据量上十万甚至更多,那岂不要把人搞死?因此,复制粘贴法仅适用于很少量的数据,大批量的数据要使用导入法或合并法。
这两种方法都在【杂项】功能区中,如下图所示。
其中,【高速导入】按钮用于导入最常见的4种类型文件,包括Excel中的xls和xlsx格式文件、Access中的mdb和accdb格式文件、d Base中的dbf文件以及文本txt格式文件。为方便操作,还有专门的【文本文件】【XML文件】及【其他类型】导入按钮。
“合并”与“导入”的命令按钮完全相同,仅仅是将导入改为合并而已。那么,“合并”与“导入”的区别在哪儿呢?
“导入”是将外部数据表的结构和数据一同添加到Foxtable中,导入完成后将自动在Foxtable项目中创建一个新表来保存数据;而“合并”仅仅是将外部数据添加到Foxtable已经存在的数据表中。
仍以之前的Excel文件为例,如果单击【高速导入】按钮,将首先弹出【打开】对话框用来选择文件,如下图所示。
这里选择“测试数据xls”文件。单击【打开】按钮,将列出该文件中包含的所有工作表,如下图所示。
需注意,Excel文件所列出的工作表中可能会有多个同名表,它们的区别仅仅在于是否有“$”后缀,一般选择带“$”后缀的数据表即可。如本例就选择导入“订单$”而不是“订单”。选择要导入的工作表后,还将列出该表所包含的全部列。如果不需导入某些列的数据,可将其勾选取消。一旦单击【确定】按钮,将弹出【增加表】设置对话框,如下图所示。
设置好表名,单击【确定】按钮将自动把Excel文件中的订单表数据以指定的表名称导入到Foxtable项目中。该表导入完成后,将弹出“是否继续导入其他表”的提示对话框,如此反复就能将所需要的全部数据表都导入进来。下图就是导入后的“订单”表数据,全部共864行。
如果不希望在Foxtable中新建数据表,而是仅仅将数据合并到现有的数据表中,可以使用“合并”功能。例如,将外部数据合并到Foxtable现有的“订单”表中,可以先在Foxtable中选择该表,然后单击【高速合并】按钮,在弹出的对话框中选择文件“测试数据xls”和工作表“订单$”,如下图所示。
合并数据时会自动比较列名,只有在Foxtable的数据表中存在同名列时才会合并。如上图所示,由于Excel文件中的列名和Foxtable中的订单表列名完全匹配,因而这些同名列的数据会全部合并过来;如果选择合并Excel中的“产品$”表,如下图所示。
由于该表只有一列“产品ID”和Foxtable中的“订单”表相匹配,因而只有该列数据会被合并进来,其他列全部为空。合并后的效果如下图所示。
其中,行号为红色的数据记录是新合并进来的数据。很显然,合并数据时不会对数据表中的原有记录产生影响,仅仅是在当前表中增加记录而已。
至于合并时的主键选择项,这些功能留待第3章再来讲解。这主要因为以上示例所合并的仅仅是Excel格式的文件,而Excel并不是严格意义上的数据库,它不存在主键之说,因而这些主键选择项对于Excel来说没有任何意义。