JS宏学习笔记2-读取表格指定范围列的内容1

案例代码

function CommandButton1_Click(){
//初始化处理
	let wb = ThisWorkbook;
    let sht1 = wb.Sheets(1);
//设定读取列范围
    const fangwei = [3,6];

//调用自定义函数读取D列到F列的数据
	let SheetsValue = SheetValue(sht1,fangwei);
	if(!SheetsValue) return MsgBox("表格数据不能为空", 0+48, "警告");
}

使用了一个自定义函数SheetsValue来提取表格数据,同时,指定提取的范围,因为SheetsValue函数中使用了slice函数,这个函数会读取数组中指定范围的数据,需要注意,slice函数读取的方式为左闭右开,所以,假设读取G列J列,则数组fangwei的元素应该为(G列索引值J列索引值+1),同时,还要注意,索引值是从0开始的,即A列的索引值为0,D列的索引值为3。

if语句判断获取的值是否为空,为空的情况下使用!取相反的布尔值,即true,然后结束函数运行,返回一个Msg框。

//获取表格数据,提取其中D列到F列的数据
function SheetValue(sht,arry) {
	let results = [];
	// 读取表格数据赋值给sheetData
    let sheetData = sht.Range('A1').CurrentRegion.Value2
    // 排除第一个元素(子数组)包含列头
    for (let i = 1; i < sheetData.length; i++) {
	// 从每行提取D到F列的数据
        let rowData = sheetData[i].slice(arry[0], arry[1]);
        results.push(rowData);
    }
    // 如果results数组为空,则返回空字符串,否则返回 results 数组
    return results.length > 0 ? results : "";
}

SheetValue函数接收传递的参数,然后声明为sht和arry,sht为指定读取的表格,arry为包含读取范围的数组

sheetData的赋值使用了CurrentRegion属性,在案例代码中,CurrentRegion属性会获取工作表中以A1为起点的当前区域(一般指连续的数据区域)的全部值,见下例

 图1表格数据

在主函数末端添加Console.log(JSON.stringify(SheetsValue));即可在调试窗口查看获取的表格数据,需要注意的是,JS宏的使用的所有代码必选包含在函数内部执行。

图2调试窗口

可以看出空缺的地方会以null来填充,同时,获取的为相邻的存在数据的所有行和列

随后,案例函数会提取指定范围的列,这里要理解一个二维数组的概念,函数获取数据如上图2所示,表格的每一行数据都是一个母数组(所有列)的一个元素(子数组),而表格的每一行数据做为一个母数组,下面每一个元素,则是这一行的单元格的值

同时,循环的起始值为1,使得循环的内容sheetData[i],变为sheetData[1],排除了第一行的数据,一般第一行数据为表头数据,如上图1所示,第一行为表头。此外,.length方法会返回数组sheetData中的元素个数,使得循环可以正好读取完所有的值(数组的key从0开始)

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值