(已解决) 集算器 xlsimport 读取 Excel 文件的问题
关于集算器用 xlsimport 函数读取 Excel 文件有以下几个问题恳请大佬们得闲时帮忙看看:
1、读取 excel 文件时,xlsimport 能否按 Range 区域读取?
xlscell 函数能针对 xlsopen()对象按区域读取和写入数据:=file(xlsx).xlsopen().xlscell@w("F9":"H12","Sheet2")
目前,xlsimport 函数能指定读取某个 Sheet,能指定读取第几行到第几行,但没有对读取列的控制,所以,我在想,能否实现把 Range 区域加上去,比如写成:
1、file(xlsx).[xlsopen()].xlsimport(;"Sheet2!F9:H12") 或者
2、file(xlsx).[xlsopen()].xlsimport(;"Sheet2$F9:H12") 或者
3、file(xlsx).[xlsopen()].xlsimport(;"Sheet2","F9":"H12")
XO 对象也有 xlsimport 方法。
这样是不是搞复杂了?写完才想起 xlscell 函数能按区域读写,真是卧了个槽,希望渺茫😂
2、 说到 xlsopen 对象,用 xlsimport 函数能读成序列吗?
=file(xlsx).xlsopen().xlsimport@w()
3、Excel 文件中如果有新函数生成的数据,会报错
此处所指的新函数是指微软最近两年发布的函数,像 makearray,sequence,reduce,groupby,pivotby…等。比如以下例子,在 Excel 的 A1 单元格中输入 =sequence(10),会自动扩展出一列 10 行的数据,用 xlsimport 或者 xlsopen 等方法去读取时会报错,我用的是 Office365:
如果用旧版本函数 =row(),然后往下拖出 10 行,再用集算器函数读取时,不会报错:
如果用 =row(1:10) 数组函数自动扩展,集算器能读,但结果不符,如下:
还有另一种报错形式:
这些报错是不是 POI 包不认识微软新近发布的函数,或者不能识别区域数组的自动扩展 spillover,因为有些老函数像常规的 sum,average 等倒是没有问题。也只是猜测,我也不懂具体啥原因。照理,集算器不用管 Excel 单元格里的公式,只要读取数据就行,见到什么就读什么。
以上 3 个问题,恳请大佬们帮助指导,谢谢🙏 🙏
1.xlsimport 主要是针对 sheet 的导入,参数可以设置要导入的列,也可以设置起始结束行。对格子(区域)的操作可以使用 xlscell。
f.xlsimport 是从 excel 文件读取 sheet 数据,如果只导入一次推荐用这种方式。
f.xlsopen() 是打开了 excel 对象到内存中,适用于多次操作。
2.这部分需要整理一下,目前可以使用f.xlsimport@w ()或者xo.xlscell@w ()。
3. 程序修改了,可以正常取到新公式格的值,稍后会更新。
程序已更新,请前往下载贴中下载最新的 esproc-bin.jar 文件。
@WuNan
@ddszm
谢谢大佬们的帮助指导🙏 🙏
大佬,还有两个小问题看下是否属于正常,1,图上这样写:Sheet3 中的第 1,2 列,起始行第 10 行,但是当其中一列的起始行为空时则报错。2 当只有一列有数据,但是写了读取 2 列,也是报错,我的理解是如果指定读取了两列,就没有数据也要读出来为空。初来乍到,哪说的不对的请佬们忽略。
已修复使用 f.xlsopen() 时,因 Excel 新函数产生错误的问题。
程序已更新,请前往下载贴中下载最新的 esproc-bin.jar 文件。
@hoocx 妥了,谢谢大佬🙏
@爱之源 你说的问题可以用 XO.xlscell@w 读成序列的序列,以下供参考:
收到❤ ❤ ❤