系列文章目录
向于心的WPS JavaScript 的代码学习和测验
前言
最近发现WPS自带了脚本宏编辑器 ,而我又想学 JavaScript,
2009年的电脑居然 可以运行WPS,它里面就包含了JavaScript,我一看就乐坏了,连运行环境都不用搭建了,既然WPS JS与我和2009年的电脑有缘,那我们就一起玩玩吧.
1.乘法口诀表代码
function 乘法口诀表(){
var r=1
var c=1
for(r;r<10;r++){
c=1
for(c;c<r+1;c++){
ThisWorkbook.Sheets('sheet2').Cells(r,c).Value2=c+'×'+r+'='+(r*c)
}
}
}
2.关于find和findnext涵数的组合使用
function mf()
{//关于find和findnext涵数的组合使用
//ThisWorkbook.Sheets('sheet2').
let f=new Object
f=ThisWorkbook.Sheets('Sheet1').Range("A:A").Find("4", ThisWorkbook.Sheets('Sheet1').Range("A1"), -4176, xlPart, xlByRows, xlNext, false, false, true);
//这行代码是查找含有4的单元格
let r=f.Row
ThisWorkbook.Sheets('Sheet2').Cells(f.Row,2).Value2=f.Row
f=ThisWorkbook.Sheets('Sheet1').Range("A:A").FindNext(f)
ThisWorkbook.Sheets('Sheet2').Cells(f.Row,2).Value2=f.Row
//上面的代码可以运行,是关于find和findnext涵数的组合使用
}
3.我自己写的数据查找函数
我写了一个Find+FindNext封装函数,希望对大家有用.
function FindFun(Findwhat,FindArea,Compare){
//这是一个我自己写的数据查找涵数
//Findwhat要查找的数据
//FindArea数据所在的区域
//Compare对比方法 true查找数据一样的 false含有要查找的数据
let FindData=new Array();
let f1=new Object
let s=''
let looka
if(Compare==true){
looka=xlWhole
}
else{
looka=xlPart
}
f1=FindArea.Find(Findwhat, FindArea.Cells(1,1), -4176, looka, xlByRows, xlNext, false, false, true);//xlWhole查找相同的/xlPart查找含有的
if (f1==null){
return null
}
else{
s=f1.Row + '/' + f1.Column
FindData[0]=s
for(;;){
f1=FindArea.FindNext(f1);
if (s!=f1.Row+'/'+f1.Column){
FindData.push(f1.Row+'/'+f1.Column)
}else{
break
}
}
return FindData
}
}
//
function testfind(){
let fd =new Array
let r
fd=FindFun('4',ThisWorkbook.Sheets('Sheet1').Range("A:A"),false)
for (x in fd){
MsgBox(fd[x])
}
}
4.数据查找函数的实际应用
没想到WPS JS没用其他控件可用,也就面板上那几个。哭死,恨死,怨死。没有表格控件可用。
千年后灵感乍现,sheet不就是一个巨大的表格控件吗。
应该很大的可玩性,好吧那就玩玩。
做一格品名的查找和录入把。
首先新建一格表格,把其中一个表格(sheet)重名成XYX,为什么要名成XYX呢?打个广告而已,
然后新建一个窗体,加入text控件和按键控件,再然后双击按键控件,进入代码编辑器,又然后把
我的代码复制粘贴进去
wps文件下载链接在文章顶部sheet文件
const find_col=21 //这里修改要查找的一个单列
const find_writ_star=14 //这里修改查找到的数据从那一列开始写入
const writ_star=1 //这里修改你要的数据从那列开始写入
var c=1
var r=1
function FindFunOne(Findwhat,FindArea,Compare){
//这是一个我自己写的数据查找涵数
//Findwhat要查找的数据
//FindArea数据所在的区域
//Compare对比方法 true查找数据一样的 false含有要查找的数据
let FindData=new Array();
let f1=new Object
let sr=0
let looka
if(Compare==true){
looka=xlWhole
}
else{
looka=xlPart
}
f1=FindArea.Find(Findwhat, FindArea.Cells(1,1), -4176, looka, xlByRows, xlNext, false, false, true);//xlWhole查找相同的/xlPart查找含有的
if (f1==null){
return null
}
else{
sr=f1.Row
FindData[0]=sr
for(;;){
f1=FindArea.FindNext(f1);
if (sr!=f1.Row){
FindData.push(f1.Row)
}else{
break
}
}
return FindData
}
}
function WriteFind(FindWhat){
let re =new Object
let r=2
re=FindFunOne(FindWhat,ThisWorkbook.Sheets('XYX').Columns.Item(find_col),xlPart)
if(re==null){
return
}else{
for(x in re){
ThisWorkbook.Sheets('XYX').Cells(r,find_writ_star).Value2=ThisWorkbook.Sheets('XYX').Cells(re[x],find_col-1).Value2
ThisWorkbook.Sheets('XYX').Cells(r,find_writ_star+1).Value2=ThisWorkbook.Sheets('XYX').Cells(re[x],find_col).Value2
r++
}
}
}
/**
* UserForm1_CommandButton1_Click Macro
*/
function UserForm1_CommandButton1_Click()
{
ThisWorkbook.Sheets('XYX').Range("N:O").ClearContents()
ThisWorkbook.Sheets('XYX').Range('N1').Value2='ID'
ThisWorkbook.Sheets('XYX').Range('O1').Value2='名称'
WriteFind(UserForm1.TextEdit1.Text)
ThisWorkbook.Sheets('XYX').Range('O2').Select()
r=2
c=15
}
function UserForm1_CommandButton1_KeyDown(keycode, shift)
{
switch(keycode)
{
case 37:
if(c==1){return}
ThisWorkbook.Sheets('XYX').Cells(r,c-1).Select()
c=c-1
break
case 38:
if(r==1){return}
ThisWorkbook.Sheets('XYX').Cells(r-1,c).Select()
r=r-1
break;
case 39:
ThisWorkbook.Sheets('XYX').Cells(r,c+1).Select()
c=c+1
break
case 40:
ThisWorkbook.Sheets('XYX').Cells(r+1,c).Select()
r=r+1
break
case 32:
ThisWorkbook.Sheets('XYX').Cells(2,1).Value2=ThisWorkbook.Sheets('XYX').Cells(r,14).Value2
ThisWorkbook.Sheets('XYX').Cells(2,2).Value2=ThisWorkbook.Sheets('XYX').Cells(r,15).Value2
//我懒了,这里只更新一行数据,不想写自动跳行了
break
}
//ThisWorkbook.Sheets('XYX').Cells(10,1).Value2=keycode
}
function 打开查找窗口(){
UserForm1.Show(true)
}