龙空技术网

12. WPS报表JS宏查询加入筛选条件

小草随风1668 276

前言:

如今同学们对“js获取value”都比较关怀,大家都想要分析一些“js获取value”的相关知识。那么小编也在网上收集了一些有关“js获取value””的相关资讯,希望兄弟们能喜欢,同学们快快来了解一下吧!

本节将在宏查询的SQL语句加入筛选条件。

在上一节中使用常量定义了whereStr,在本节中,将这个语句设定成从报表上面标黄的查询条件中动态获取。

修改查询按钮代码如下:

 //查询按钮的单击事件function CommandButton1_Click(){  	//使用变量ReportSh 引用工作表对象:报表	let ReportSh = Application.Worksheets.Item("报表")		 //使用变量ReportQuery 引用报表工作表内的查询对象    let ReportQuery = ReportSh.QueryTables.Item(1)        //DictSh 引用工作表对象:字典	let DictSh = Application.Worksheets.Item("字典")	        //先定义一个 where 语句来测试 sql 语句    //const whereStr = 'where (left([单位],6)="101006") and ([计划月份] between "01" and "05")'    /******* 注释掉上面的语句,使用getWhereStr函数动态替换 ***/     /*      *	将字典工作表D1单元格存储的sql语句取出     *	并使用 getWhereStr函数的返回值替换语句中的 ?     */    let sqlstr = DictSh.Range("D1").Value2.replace(/\?/g, getWhereStr(ReportSh))  //  Console.log(sqlstr)    	//将sqlstr 赋值给查询对象,并刷新查询    ReportQuery.CommandText = sqlstr    ReportQuery.Refresh()}

切换到lib模块,将 getWhereStr()这个函数完善。代码如下:

    /*  函数名:getWhereStr 获取报表工作表上设定的条件     *	参   数:传入一个参数Sh 为工作表的引用     *	返回值:sql语句     */function getWhereStr(Sh){	//定义where语句, true后面方便加语句,即便不加语句,也不会出错	let WhereStr = " where true"			//定义单位名称 使用Text属性,适应单元格为空的情况  //单元格为空时,属性Value2是undefined,不能使用substr  //非要使用Value2,则可以:if (Sh.Range('f1').Value2){ alert("可用")} else {alert("不可用")}	let UnitName = Sh.Range('f1').Text.substr(0,7)		//加入条件字符串 如果单位选择全部或者没选择单位 则去掉单位筛选 	if (UnitName == '' || UnitName =='0-全部'){}	else {				WhereStr += " and (left([单位],7) = '" + UnitName + "')"	}	/* 三元表达式可精简上面if语句,但影响可读性:    WhereStr += UnitName == '' || UnitName =='0-全部' ? "" :                          " and (left([单位],7) = '" + UnitName + "')"    */	//定义设置月份 也就是结束的月份	let EndMonth = Sh.Range('c1').Text.substr(0,2)		//定义月份期间 也就是开始的月份	let BeginMonth = Sh.Range('c2').Text		//没有设置月份的时候,不进行筛选,即提取所有月份的数据	if (EndMonth !=''){    		/* 定义开始月份 并定义默认值为'01' 即年初    变量(赋值符号)(条件) ? (表达式1):(表达式2)     三元表达式,条件为真时,返回表达式1,否则返回表达式2    可以在表达式1和2中嵌套三元表达式使用 */    		BeginMonth = BeginMonth == '当月' ? EndMonth : '01'		    		//加入条件字符串 如果开始月份与结束月份一致,则使用=,否则使用between and		WhereStr +=  BeginMonth == EndMonth ? 			" and ([计划月份] = '" + EndMonth +"')" : 												" and ([计划月份] between '" + BeginMonth + "' and '"+ EndMonth +"')"				}  //返回sql语句	return WhereStr}

在【报表】工作表中,点击【查询】按钮,可以看到数据被刷新了。

修改【报表】工作表上面的条件,可以看到不同的报表数据。

本节到此结束,下一节,将完善查询明细的按钮代码。

标签: #js获取value