JS宏中操控单元格的API(一)

前面介绍过,最基本的API:Range对象,其中的Value2属性支持单元格的读写功能。

一、查阅官方文档

点击编辑器中的帮助进入官方开放平台后点击客户端开发,在搜索框中输入Range后,点解表格API中的Range,如下图所示:

二、Range对象介绍

Range:代表某一单元格、某一行、某一列、某一选定区域(该区域可包含一个或若干连续单元格区域),或者某一三维区域。

Range:是一个全局对象,也存在于工作表对象Sheets下。

示例:

function main(){
    Range("A1").Value2 = 3; //当前活动工作表中的A1单元格写入3
    Sheets(2).Range("A1").Value2 = 5; //当前活动工作簿中第2个sheet表中的A1单元格写入5
    
    let wb = Workbooks.open("D:\\my.xls"); //打开D盘下的my.xls文件
    let a = wb.Sheets(2).Range("A1").Value2; //读取第二个表中A1单元格的内容赋值给a
    console.log(a); //输出a
}

三、Range对象中常用的属性和方法

1、单元格的读取与写入

Value2属性:支持读写,示例如下:
function main(){
    let a = Range("A1").Value2; //读取一个单元格的内容
    console.log(a);
 	//读取一个区域内的内容
    let arr = Range("A1:E6").Value2; //直接读取,输出二维数组
    console.log(JSON.stringify(arr)); //每行是一个子数组
    //依次循环每个单元格来读取内容
    for(let col=1; col<=6; col++){
    	for(let row=1; row<=6; row++){
    		let rg = String.fromCharCode(col + 64) + row; //通过ascii编码获取列标,再拼接行号
    		console.log(Range(rg).Value2); //输出每个单元格的内容
    	}
    }
}

执行效果如下图所示:

Text属性:只读,示例如下:
function main(){
    let a = Range("A1").Text; //读取一个单元格的内容
    console.log(a);
 	
    let arr = Range("A1:E6").Text; //不支持这样写,返回空
    console.log(JSON.stringify(arr)); //输出null
}

执行效果如下图所示:

强行使用Text属性进行写入时会报错

Formula属性:可读写,它返回或设置一个 Variant 值,它代表 A1 样式表示法和宏语言中的对象的公式。示例如下所示:
function main(){
    let a = Range("A1").Formula; //如果单元格里是公式会把公式读取出来
    console.log(a);
 	
    let arr = Range("A1:E6").Formula; //支持读取数组
    console.log(JSON.stringify(arr)); //输出null
    
    //支持写入
    Range("A12").Formula = "=SUM(A1:A6)"; //写入公式
    Range("A14").Value2 = "=SUM(A1:A6)"; //Value2也支持写入公式,因为对于=SUM(A1:A6)的字符串,excel会认为他是公式
}

与Value2不同的是,使用Value2读取时,不会读取公式字符串,而是单元格的值。

执行效果如下图所示:

FormulaArray属性:返回或设置区域的数组公式。返回(或可设置为)单个公式或数组。如果指定区域不包含数组公式,则该属性返回 null。可读写。示例如下:
function main(){
    let a = Range("A1").FormulaArray; //如果单元格里是公式会把公式读取出来
    console.log(a);
 	
    let arr = Range("A1:E6").FormulaArray; //该区域不存在数组公式返回null
    console.log(JSON.stringify(arr)); //输出null
    
    let b = Range("A8:E10").FormulaArray;
    console.log(JSON.stringify(b)); 
    //支持写入
    Range("A12").FormulaArray = "=SUM(A1:A6)"; //支持写入公式
    Range("A14").Value2 = "=SUM(A1:A6)"; //Value2也支持写入公式,因为对于=SUM(A1:A6)的字符串,excel会认为他是公式
    
    Range("A16").FormulaArray = "=FILTER(A1:E6,C1:C6>6)"; //不会自动溢出,带有{}
    Range("A22").Value2 = "=FILTER(A1:E6,C1:C6>6)"; //也支持写入数组公式,不会自动溢出,没有{}
    
    Range("A16:E18").FormulaArray = "=FILTER(A1:E6,C1:C6>6)";  //超出数组部分的单元格填充报错
    Range("A22:E23").Value2 = "=FILTER(A1:E6,C1:C6>6)"; //单元格中全部报错
    
}

执行效果如下图所示:

2、扩展读取与写入

CurrentRegion属性:返回一个 Range 对象,该对象表示当前区域。当前区域是以空行与空列的组合为边界的区域。只读。示例如下:
function main(){
  	let arr = Range("A1").CurrentRegion.Value2; //从A1开始扩展,如果整行/整列为空就停止
    console.log(JSON.stringify(arr)); //第8行以后的数据不会输出
}

执行效果:

Resize()方法:调整指定区域的大小。返Range对象,该对象代表调整后的区域。示例如下:
function main(){
  	let arr = [[1,2,3],[4,5,6]];
  	Range("A17").Resize(arr.length, arr[0].length).Value2 = arr; 
}

它支持直接写入二维数组。执行效果如下:

四、本章小结

本节中,主要讲述了在JS宏中如何读写单元格中的内容。例如Value2属性,它既可以用于读取单元格的内容,也可以利用它来给单元格赋值。结合CurrentRegion属性一起使用,就可以扩展单元格进行读取;结合Resize方法使用,可以实现扩展写入(即直接写入二维数组)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackispy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值