找回密码
 立即注册

QQ登录

只需一步,快速开始

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证

超级版主

200

主题

9899

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
15531

讲师达人悬赏达人微信认证勋章SpreadJS 认证SpreadJS 高级认证元老葡萄

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-2-28 16:32  /   查看:1189  /  回复:1
本帖最后由 Clark.Pan 于 2023-2-28 17:45 编辑

在GcExcel V6的新特性中,有一个功能是在一片指定区域中获取其中被使用的区域。这个功能本身对开发代码中提供了很多的遍历。目前SpreadJS没有对应的接口,不过我们完全可以通过代码来实现一个这样的接口。


首先,Excel中的任何一片区域都是一个规则的矩形,从一个区域中找出使用的区域(UsedRange)可以简化为在一个大的矩形中根据条件找到一个小的矩形。但是由于内容位置的不规范,通过内容获取矩形区域是一个比较麻烦的事情,举个例子,下面这个图中,黑色部分是内容,获取的使用区域(usedRange)应该如红框所示
image.png334843749.png
这个时候问题就变成了,我们要在外侧的黑框中根据黑色部分的信息获取红色边框的内容。
那么如果写算法来解决这个问题,我们先来分析一下,一个矩形只需要4个点就可以定位,也就是左上,右上,左下,右下4个点(A,B,C,D)。
这四个点的index对应整个红色区域的规则如下:
A,B点的横坐标 = 1点的横坐标
C,D点的横坐标 = 3点的横坐标
A,C点的纵坐标 = 2点的纵坐标
B,D点的纵坐标 = 4点的纵坐标
那么问题就变成了1,2,3,4这4个点。最简单直接的办法就是通过4个双重循环来解决。
先按行再按列顺序双重循环获取的第一个黑色位置就是1这个点
先按行再按列倒序双重循环获取的第一个黑色位置就是3这个点
先按列再按行顺序双重循环获取的第一个黑色位置就是2这个点
先按列再按行倒序双重循环获取的第一个黑色位置就是4这个点

按照上述方法就可以实现获取任意区域内的使用区域,详情代码见附件
如果感兴趣,也可以再次基础上扩展其他条件,比如按公式,按样式等进行区分。

getUsedRangeBySelection.html

3.52 KB, 下载次数: 24

1 个回复

倒序浏览
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-11-3 17:09:30
沙发
在v15.1 版本,我们推出了getUsedRange 接口,可以参考此篇学习指南:
https://demo.grapecity.com.cn/sp ... get-set-data/purejs
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部