最近在编写适合日常工作数据集格式化输出的命令,其中需要解决在已有xlsx表格中连续输入且不覆盖原来内容,没有找到更好的方法,自己按照理解编写了一个MATA函数实现,现与Stata爱好者分享。自己水平有限,如果有更好的思路请各位不吝赐教,谢谢。
以下是代码和测试用的xlsx表格
table.xlsx
(6.6 KB)
- /*********************************************************
- row_emptyrange 函数
- 用途:检测某个当前目录下xlsx表中某个sheet指定区域是否为空,
- 并返回与指定区域大小相同且为空的起始行数,
- 可以用于读取已有的xlsx表,在不覆盖原有内容的基础上,
- 寻找合适的位置输出新的内容,类似于append的作用
- *********************************************************/
- mata: mata clear
- mata:
- real scalar row_emptyrange(string scalar tablename, string scalar sheetname, /// //指定的表格名称和sheet名称
- real scalar row1, real scalar row2, /// //指定区域的行范围 第row1行至第row2行 row1>=row2
- real scalar col1, real scalar col2) //指定区域的列范围 第col1列至第col2列 col1>=col2
- {
- class xl scalar b // 初始化xl()类
- string vector cells // 声明字符串向量 用于存储指定的区域
- real scalar i // 判断指定区域的长度
- real vector rowrange // 声明实数向量 行范围
- real vector colrange // 声明实数向量 列范围
-
- i=0
- rowrange=(row1\row2)
- colrange=(col1,col2)
- b.load_book(tablename) // 加载表名
- b.set_sheet(sheetname) // 加载sheet名
- cells=b.get_string(rowrange,colrange) // 获取指定位置的内容
- printf("The first specified range is: row[%f,%f] and col[%f,%f]\n", row1,row2,col1,col2)
- cells // 显示指定区域大小的内容
- i=rowsum(colsum(ustrlen(cells))) // 判断指定区域的长度
- printf("The length of initially specified range is: %f\n",i)
- while (i) { // 如果长度不为0
- row1=row1+1 // 则行范围递增1 此处可以修改进行快速判断
- row2=row2+1 // 同上
- rowrange=(row1\row2)
- cells=b.get_string(rowrange,colrange) // 列范围不变
- i=rowsum(colsum(ustrlen(cells))) // 判断指定区域的长度
- cells // 显示指定区域大小的内容
- printf("The length of the new range with the same size as the initially specified range is: %f\n",i)
- }
- printf("The row of the new range with same size is: %f\n", row1)
- return(row1) // 返回输出新表的起始行数 可以修改
-
- }
- end
- mata: row_emptyrange("table.xlsx","Sheet1",1,6,1,4)



雷达卡




京公网安备 11010802022788号







