关于 xlsimport@c 使用游标读取 excel 文件的问题

大佬们,我在使用 xlsimport@c 以游标方式读取 excel 文件时碰到一些现象,不知道是我使用方法欠妥,还是说有其它什么问题,恳请大佬得闲时给予帮助。

正常的 excel 表格是四方的,或者说矩阵式的,所见即所得。但实务中总有一些意想不到的操作,导致 excel 单元格看上去是空的,而实际上是有使用痕迹的。比如说,单元格不输入任何东西,设置居中对齐或者左右对齐,这在 excel 里就视同使用了,再比如行距变宽,也是使用了,这种是肉眼观察不到单元格里有东西的。还有一种是能看得到使用痕迹的,比如设置单元格的边框和底色。

由此,引申出游标读取的问题,我在使用中发现,用游标读取 excel 文件时,游标是根据 excel 的 usedrange 来取数的,当然这只是猜测。我还是用举例来说明这个问题(以下结果在集算器 IDE 和 EXCEL 插件里得到的结果是一样的)比如,在主目录下有一个 testcursor.xlsx 文件,看上去中规中矩的 4×3 表格,实际上在 D3 单元格设置了居中格式,如下所示:

imagepng

读取方式 1:字段名参数不写,从第一行开始读,所见即所得,跟源表一样,结果如下:

imagepng

读取方式 2:字段名参数不写,从第三行开始读,因为 D3 设置了格式,结果得到 4 列,如下所示:

imagepng

读取方式 3:显式指定所有字段名,从第一行开始读,结果在 D3 设置了格式处被截断,如下:

imagepng

读取方式 4:如果指定 4 列 (因为 D3 有使用痕迹),从第一行开始读,结果为空,猜测是因为列数不符,第一行才 3 列:

imagepng

此时,如果指定 4 列,从第三行开始读,结果跟上述第 2 种读取方式的一样,得到 4 列:

imagepng

以上情况大概的意思是,在游标从上往下读取的过程中,在显式指定读取字段时,如果检测到之前的列数比当前的列数要小时,就会给截断。在字段名缺省时,会以表格中第一行的列数为基准读取。

还有一个情况是,源表格中的末尾如果有空行,且这个空行的行距或者格式有重新设置过,就会被游标视为数据读取出来。

目前碰到的就是这些,先不管文件格式是否中规中矩,游标使用方法是否合法,在缺省字段名和显式指定字段名时,得到的结果是不是应该是一样的?

以上游标处理 excel 的问题,恳请大佬们得闲时帮忙看看,谢谢!