快速将筛选后的数据加载到数组

54 篇文章 4 订阅
18 篇文章 0 订阅

实例需求:工作表中有一个格式化表格(ListObject),现需要将筛选后的表格区域(包含标题行)加载到数组中。

在这里插入图片描述


方法1:

Sub Demo1()
    Dim oTab As ListObject, visRng As Range
    Dim i As Long, j As Long, iR As Long
    Dim arr, tmpSht As Worksheet
    Set oTab = Sheet1.ListObjects(1)
    Set visRng = oTab.Range.SpecialCells(xlCellTypeVisible)
    Set tmpSht = Sheets.Add
    visRng.Copy tmpSht.Range("A1")
    arr = tmpSht.Range("A1").CurrentRegion.Value
    Debug.Print UBound(arr), UBound(arr, 2)
    Application.DisplayAlerts = False
    tmpSht.Delete
    Application.DisplayAlerts = True
End Sub

【代码解析】
第6行代码获取ListObject对象。
第7行代码使用SpecialCells(xlCellTypeVisible)获取筛选后的可见单元格(Range对象),注意筛选可能会产生非连续单元格,后续读取单元格数据时需要特殊处理。
第8行代码创建临时工作表。
第9行代码将筛选后表格拷贝到新建工作表中,Excel将只拷贝可见单元格。
第10行代码将临时工作表中的数据加载到数组中。
第11行代码输入数组的维度。
第12行代码禁止显示错误提示信息。
第13行代码删除临时工作表。
第14行代码恢复错误提示机制。


方法2:

Sub Demo2()
    Dim oTab As ListObject, areaRng As Range, visRng As Range
    Dim CellCnt As Long, ColCnt As Long, brr(), crr
    Set oTab = Sheet1.ListObjects(1)
    Set visRng = oTab.Range.SpecialCells(xlCellTypeVisible)    
    CellCnt = visRng.Cells.Count 
    ColCnt = visRng.Rows(1).Cells.Count
    ReDim brr(1 To CellCnt/ColCnt, 1 To ColCnt)
    For Each areaRng In visRng.Areas
        crr = areaRng.Value
        For i = 1 To UBound(crr)
            iR = iR + 1
            For j = 1 To UBound(crr, 2)
                brr(iR, j) = crr(i, j)
            Next
        Next
    Next
    Debug.Print UBound(brr), UBound(brr, 2)
End Sub

【代码解析】
第5行代码获取ListObject对象。
第6行代码使用SpecialCells(xlCellTypeVisible)获取筛选后的可见单元格(Range对象),注意筛选可能会产生非连续单元格,后续读取单元格数据时需要特殊处理。
第7行代码获取可见单元格的总数量。
第8行代码获取可见表格区域的总列数。
第9行代码为动态数组分配存储空间。
第10~18行代码循环遍历每个Area(即连续单元格区域),加载至数组中。
第11行代码读取areaRng单元格区域的内容到数组中。
第12~17行代码将数组crr中内容转存到brr中。
第19行代码输入数组的维度。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要在小程序页面上添加滚动事件,监听是否触底。当触底时,触发一个函数来进行分页加载数据。 在加载数据的函数中,你可以向后台发送请求,获取数据并进行筛选筛选数据的方式可以根据你的需求来定,可以通过请求参数传递筛选条件,也可以在前端进行筛选。 获取到符合条件的数据后,你可以将数据保存在一个数组中,并调用小程序的 setData 函数来更新页面数据。 具体的代码实现可以参考以下示例: 1. 在页面 onLoad 中初始化数据 ```javascript Page({ data: { dataList: [], // 数据列表 pageNo: 1, // 当前页码 pageSize: 10, // 每页数据条数 category: '' // 种类筛选条件 }, onLoad: function () { this.loadData() }, // 加载数据函数 loadData: function () { let { dataList, pageNo, pageSize, category } = this.data // 发送请求,获取数据 wx.request({ url: 'your-api-url', data: { pageNo, pageSize, category }, success: res => { let newDataList = res.data.data if (newDataList.length > 0) { // 将新数据拼接到原有数据列表中 dataList = dataList.concat(newDataList) this.setData({ dataList, pageNo: pageNo + 1 }) } } }) } }) ``` 2. 监听页面滚动事件,判断是否触底 ```javascript Page({ // ... // 监听页面滚动事件,判断是否触底 onReachBottom: function () { this.loadData() } }) ``` 3. 添加筛选种类功能 ```javascript Page({ data: { // ... categoryList: ['种类1', '种类2', '种类3'], // 种类列表 categoryIndex: -1 // 当前选中的种类索引 }, // 监听种类选择器变化,更新筛选条件并重新加载数据 bindCategoryChange: function (e) { let categoryIndex = e.detail.value let category = categoryIndex > -1 ? this.data.categoryList[categoryIndex] : '' this.setData({ categoryIndex, category, dataList: [], // 清空数据列表 pageNo: 1 // 重置页码 }) this.loadData() } }) ``` 4. 在页面中渲染数据 ```wxml <view class="container"> <picker bindchange="bindCategoryChange" value="{{categoryIndex}}" range="{{categoryList}}" range-key="">{{categoryList[categoryIndex] || '全部'}}</picker> <view class="list"> <block wx:for="{{dataList}}" wx:key="id"> <view class="item">{{item.name}}</view> </block> </view> </view> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值