00:00
大家好,这是X基础教程的第三章第一节,这节课我们来学习使用X来生成包含大规模数据的电子表格文档。本节课将会通过一个商品订单数据报表的例子,使用X生成一个包含十列100万行数据,累计1000万单元格的Excel大文档,带大家学习流式生成相关的六个API的使用。我们先来学习第一组的三个API,获取流式写入器,按行流式写入工作表和结束流式写入。先在课程目录下创建一个名为第三章第一节的目录。使用Vs code的编辑器打开,新建一个main do go文件声明包名称导入format标准库和X基础库。创建main函数,通过XS提供的new file方法新建一个工作簿。然后使用save将工作簿保存为bookone.xlxx。
01:02
接收并检查可能出现的异常保存代码,打开终端,在终端中运行go init初始化模块。运行GOTY安装包依赖。下面我们来学习如何获取流式写入器。通过new stream writer函数传入工作表名称,即可获得对应工作表的流式写入器,得到streamwriter接收并检查可能产生的错误。接着,我们调用stream writer对象上的set方法,将第一行数据流式写入工作表。第一个参数是起始单元格坐标,第二个参数是要写入的数据,它是一个interface类型的数组。我们设置A单元格的值为商品订单数据报表。接收并检查error,在数据写入完毕后,调用flash API结束流失写入。接收并检查可能产生的错误,保存代码并运行程序。使用Excel打开生成的文档,可以看到单元格的值已经设置好了。下面我们学习本节课的第二组的三个API。
02:13
流式合并单元格、流式创建表格与流式设置列宽度。调用stream writer对象上的mecel方法进行合并单元格,将A1到G区域合并。接收并检查错误,保存代码并运行程序。打开生成的文档,可以看到合并单元格已经设置好了。接下来我们学习流式设置单元格样式。首先通过new style API创建一个样式。声明样式为水平和垂直方向居中对齐,填充颜色为浅蓝色、纯色填充得到style ID收并检查可能出现的error,然后在按行写入工作表时绑定写入单元格的样式style ID。此外,还可以在set函数的第三个可选参数real options中指定he和hidden等属性来设置行高度以及是否隐藏该行。
03:13
保存并运行程序,可以看到样式与行高已经设置好了。下面我们定义header变量为工作表的第二行,设置数据作为前十列数据,表头分别为订单号、商家ID、买家ID。商品ID。商品单价、交易件数、物流公司ID。运单编号、运单状态码和签收状态码。同样调用streamrir上的函数。指定写入起始坐标为A2。然后将第二行数据流式写入到工作表中。保存代码并运行程序,可以看到第二行的数据已经写入了。
04:00
接着我们进行大规模数据的写入,在SHIFT1的第三行至第100万行写入数据,循环得到每一行的热ID。声明,数组热为每一行要写入的前十列十个单元格的数据。使用随机数填充数组热。接着通过索引转单元格坐标函数计算写入每一行的起始坐标cell,在循环中调用set将数据依次写入到工作表中。接收并检查可能出现的error。保存代码并运行程序,可以看到已经将100万行数据写入到工作表中了。接下来,我们使用stream writer对象上的at table函数,在工作表的A2至J100万区域创建表格,前两个参数分别是合并区域、左上角坐标和右下角坐标。需要注意的是,创建表格时,坐标区域至少要包含两行。
05:02
第三个参数是表格参数,这里我们设置表格名称样式,开启第一列和最后一列,关闭镶边行,开启镶边列。并检查可能出现的异常,保存代码并运行程序。打开生成的工作簿,可以看到表格已经设置好了。下面我们来调节一下列的宽度,在暗行流式写入之前,调用set column right API,设置第一列至第十列的宽度为15。接收并检查error。保存代码并运行程序,可以看到A列至J列的宽度已经设置好了。下面我们学习流式设置单元格公式,并统计一下生成一个这样的包含1000万单元格数据的文档对资源的使用情况。在定义标题行单元格数据后的K2设置公式sum f3至F100万定义print benchmark info函数。
06:01
接收提示信息与程序运行起始时间定义memory status用于存储有关内存分配器的统计信息r usage用于存储通过系统调用获取到的资源值,定义字节与兆字节转换函数BMB。然后以兆字节为单位输出程序所消耗的RSS及实际使用物理内存、已分配内存和累计分配内存、系统内存使用、内存回收次数以及运行耗时。在主函数中调用runtime标准库的GC函数进行主动内存回收。声明start time变量记录程序运行起始时间,最后在程序结束时调用print benchmark info函数传入提示信息与起始时间。保存代码并运行程序。打开生成的文档,可以看到,F3至F100万区域单元格的值已经通过公式进行了求和计算,并得到了运行时对资源的使用情况。生成这样一个包含1000万单元格的工作簿,内存占用约63兆字节,耗时约12.71秒。
07:18
XS的性能仍在不断优化中,也请关注后续更新。好了,本节课就到这里,如果你喜欢这个视频,欢迎关注点赞和评论,谢谢大家,我们下节课再见。
我来说两句