hi uu们,测了电路收了N多数据,从中找到关键信息在整理到一个表格里,干过没有?我干过,甚至干到早上3.钟,要给我累吐了!
读大学的时候没有认真听讲,VBA怎么用,一心只想学电路,现如今,为了搞数据,只能继续搞JSA。为什么不从哪里跌倒从哪里爬起来,因为在泥地里在怎么跑也没有在水泥地里跑的快。所以咱们继续JSA。
📌 我的核心需求
- 在XX列找到匹配的数据
- 源文件(sourcefile)是示波器波形的RawData
- 需要找到波形最高点的的单元格和时间
- 将数据拷贝到指定的 汇总.xlsx 文件
💡 开始需求拆解
- 读取XX列的内容
- 判断是否是XX列的最大值
- 拷贝最大值所在的单元格以及最大值的时间单元格
- 激活 汇总.xlsx
- 添加人性化功能
函数实现
首先我们先基于之前的车轮子做为一些参考:
JS-WPS 自动化办公(1) --表格
JS-WPS自动化办公(2) --文档
获取最大值
function GetMax()
{
//选择要遍例的列
let cellRange="S";
//初始化最大值
let maxValue =0;
//从哪里开始遍历
for(let i=3;i<100;i++)
{
//如果MaxValue小于当前的单元格就将当前单元格的值幅值给MaxValue
if(maxValue<Range(cellRange+i).Value2)
{
maxValue=Range(cellRange+i).Value2;
}
//如果不是那就保持MaxValue
else
{
maxValue=maxValue;
}
}
//打印最大值
console.log("GetMax:"+maxValue);
return maxValue;
}

测试结果1:完成了需求1和2的拆解
但是!但是! 这是一个表格!
所以表格就要用表格的方法,通常我们用的是=MAX(S3:S100),所以我们也不需要去写个for
在JSA里的新实现如下
function GetMax()
{
//选择要遍例的列
let cellRange="S";
//初始化最大值
let maxValue =0;
//将Q2的值等于S3:S100 里面的Max
Range("Q2").Value(undefined,"=MAX(S3:S100)");
//获取Q2的值
maxValue=Range("Q2").Value2;
//打印最大值
console.log("GetMax:"+maxValue);
return maxValue;
}
看起来使用JS结合表格文件的代码要简单的多。

测试结果2:完成了需求1和2的拆解
📹JSA脚本录制
接下来需要完成拷贝操作,如果不知道拷贝从哪里到哪里,那么可以使用宏录制的功能,这样也算图形化的编程了。

将刚刚生成的代码拷贝过来,代码如下:
function Macro1()
{
// 选择B4单元格
Range("B4").Select();
// 复制B4单元格的内容
Selection.copy(undefined);
// 粘贴到D4单元格
Range("D4").Select();
ActiveSheet.Paste(undefined,undefined);
}
这时候咱们就可以将这两个程序结合起来,代码如下:
function GetMax()
{
//初始化最大值
let MaxCell="Q2";
let PasteCell="D4";
let maxValue =0;
//将Q2的值等于S3:S100 里面的Max
Range(MaxCell).Value(undefined,"=MAX(B3:B100)");
//获取Q2的值
maxValue=Range(MaxCell).Value2;
//打印最大值
console.log("GetMax:"+maxValue);
// 选择B4单元格
Range(MaxCell).Select();
// 复制B4单元格的内容
Selection.Copy(undefined);
//粘贴为数值
Windows.Item("汇总.xlsx").Activate();
//选择指定单元格
Range(PasteCell).Select();
//粘贴为数值
Selection.PasteSpecial(xlPasteValues, xlPasteSpecialOperationNone, false, false);
//返回最大值
return maxValue;
}

测试结果:添加到汇总表格
🎉人性化功能添加--封装成函数
封装成参数带入,方便其他文件调用
function GetMax(MaxCell,PasteFileName,PasteCell,SEL_Range)
{
//初始化最大值
let maxValue =0;
//将Q2的值等于S3:S100 里面的Max
Range(MaxCell).Value(undefined,"=MAX("+SEL_Range+')');
//获取Q2的值
maxValue=Range(MaxCell).Value2;
//打印最大值
console.log("GetMax:"+maxValue);
// 选择B4单元格
Range(MaxCell).Select();
// 复制B4单元格的内容
Selection.Copy(undefined);
//粘贴为数值
Windows.Item(PasteFileName).Activate();
Range(PasteCell).Select();
Selection.PasteSpecial(xlPasteValues, xlPasteSpecialOperationNone, false, false);
return maxValue;
}
function test()
{
let printMax;
printMax=GetMax('Q1','汇总.xlsx','A1','B2:B100');
Console.log('Max Value'+printMax);
}

好了今天的文章就到这里,希望大家能通过WPS提高效率,支持国产软件!下图为苍南县望里镇。
