前军教程网

中小站长与DIV+CSS网页布局开发技术人员的首选CSS学习平台

WPS三板斧(14):交互输入数据到JS宏

创作声明:部分内容由AI辅助创作

数据的输入

网页上的输入框

招式15:输入框函数InputBox

在WPS的JS宏中,InputBox函数是一种用于与用户交互的输入工具,允许用户输入字符类型数据,并将文本框的内容以字符串的形式返回。

输入框函数InputBox

InputBox 基础语法如下:

InputBox::fn(Prompt:?,Title:string,Default:string,XPos:number,YPos:number) As string

参数说明:

Prompt(提示):必选,在弹框中显示与输入相关的提示信息。

Title(标题):可选,弹框的标题栏文本,默认为空。

Default(默认):可选,输入框的默认值,默认为空。

XPos(X位置):可选,水平位置,省略时水平方向居中。

YPos(Y位置):可选,垂直位置,省略时垂直方向居中。

以下是一个全参数的输入框代码示例,增加一条输出语句来显示输入的字符串。当输入框为空时点击确定、点击取消、点击关闭均返回空字符串,增加一个单分支判断语句来进行检验:

function 密码(){
	var	输入=InputBox("请输入密码:","输入密码","A123456",0,0)
	alert("输入的密码为:"+输入)
	if(输入===""){
		alert("输入为空,或者单击了取消、关闭")
	}
}

显示所输入的字符串

输入为空时点击确定;点击取消;点击关闭

复合判断条件式执行的显示语句

招式16:Application对象的InputBox方法

其实在WPS的JS宏中更经常用到的是Application对象的InputBox方法,会更加方便,其基础语法如下:

Application.InputBox: fn(Prompt:string,Title:?,Default:?,Left:?,Top:?,HelpFile:?,HelpContextID:?,Type:?) As ?

前6个参数与上面的InputBox函数类似,第6、7个参数很少使用。

使用DeepSeek查询的关于Type 参数的含义不尽相同,并不适用于我电脑上的版本。对于这种查不到准确资料的情况,可以参考查到的VBA或Javascript相关内容,通过执行下列代码实际测试,并自行总结和发现规律。

测试

将Type参数用变量i来代替,每次循环递增1次,并在立即窗口输出i的值、输入数据内容、输入数据的类型。代码如下:

function 输入类型测试(){
	for(i=0;i<=16;i++){
		var 输入=Application.InputBox("请输入内容:","输入类型测试",123456,0,0,undefined,undefined,i)
		Debug.Print("参数为"+i+":",输入,typeof(输入))
	}
}

当执行到第8次时,无法按确定键,只能按取消键,当时的屏幕提示如下:

执行第8次时,提示应该输入引用

执行完16次循环后的屏幕截图如下:

据此总结出我电脑上Type参数的含义如下:

参数0,返回公式,字符串类型;

参数1,返回数字,数值类型;

参数2,返回文本,字符串类型;

参数4,返回逻辑值,布尔类型;

参数8,待定。(返回的false是按取消键产生的);

参数16,3(不知道什么意思),数值类型。

查VBA的Type参数定义,证明JS宏为了确保与VBA的兼容性,参数解释相同,而DeepSeek并不掌握这一情况,所以:

参数8,返回单元格引用,Range对象;

参数16,错误值的代码,数值类型。

可以用以下代码来验证,将循环语句注释掉,添加type为8和16的两条语句。查询VBA或JS宏中常见的错误类型:

function 输入类型测试(){
//	for(i=0;i<=16;i++){
//		var 输入=Application.InputBox("请输入内容:","输入类型测试",123456,0,0,undefined,undefined,i)
//		Debug.Print("参数为"+i+":",输入,typeof(输入))
//	}
	输入=Application.InputBox("请输入内容:","输入类型测试",123456,0,0,undefined,undefined,8)
	Debug.Print("参数为8:",输入.Address(),typeof(输入))
	输入=Application.InputBox("请输入内容:","输入类型测试",123456,0,0,undefined,undefined,16)
	Debug.Print("参数为16:",输入,typeof(输入))//
}

Type参数为8时,只有输入单元格引用时会显示输出内容:

输入:A1:D5。输出:参数为8: $A$1:$D$5 function

常见错误值及触发场景

Type参数为16时,只有输入正确的错误值会显示输出内容,错误的错误值显示3:

输入:#N/A。输出:参数为16: 7 number

输入:#VALUE!。输出:参数为16: 3 number

输入:#REF!。输出:参数为16: 4 number

输入:#DIV/0!。输出:参数为16: 2 number

输入:#NUM!。输出:参数为16: 6 number

输入:#NAME?。输出:参数为16: 5 number

输入:#NULL!。输出:参数为16: 1 number

输入:#GETTING_DATA。输出:参数为16: 3 number(不支持的错误值)

#N/A

ErrorType.NA

查找函数(如 VLOOKUP)未找到匹配值

#VALUE!

ErrorType.Value

函数参数类型不匹配(如文本转数字失败)

#REF!

ErrorType.Ref

单元格引用无效(如删除被引用的区域)

#DIV/0!

ErrorType.Div0

除以零操作(如 =1/0)

#NUM!

ErrorType.Num

数值计算错误(如负数的平方根)

#NAME?

ErrorType.Name

公式中存在未识别的函数或名称

#NULL!

ErrorType.Null

区域交集运算符使用不当

#GETTING_DATA

ErrorType.GettingData

数据加载未完成(如外部数据源)

总的来说,通过合理利用 InputBox,可以快速实现用户交互功能,提升脚本的灵活性。建议结合具体需求,推荐采用Application对象的InputBox方法,可以通过选择合适的 Type 参数以增强输入验证。返回值是用户输入的内容(根据 Type 转换为对应类型)。若用户点击取消或关闭弹窗,返回 false。

为了增加动手能力,通过AI助手可以获得关于该函数和方法的许多示例代码,比较简单,不再详细讲解,以免啰嗦。

认真听我说!

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言