groovy 小应用
昨天使用groovy脚本生成大量的sql,实在是爽!
现在把经验贴上,以后可以继续使用。
首先说下我的需求:
给了一个excel,然后要我提取其中的单元格数据,设置到sql语句中,比如是一条更新语句,
update Table set max_value=?,min_value=? where chart_field='?';
其中 =号后面的? 就是要从excel中提取的数据。 现在给定excel中某行的数据:
chart_field description max_value xx xx min_value
HK4_ALLOW_UPSPWR_KVA xxxx 50000 NA NA 0
给定了6列的数据,而我要取的就是 1,3,6各列的数据,替代=号后面的?,如果数据量非常庞大,这个时候要程序来控制比你手工的效率就大多了,快捷,爽!
看代码:文件名为xxx.groovy
import jxl.*; Workbook workbook = Workbook.getWorkbook(new File("field_to_have_max_min.xls")); //导入同级目录下的excel文档,注意后缀貌似暂时只能是.xlsprintln 'found sheets in workbook: 'workbook.sheetNames.each{print "\t ${it}"}println ''handlePoint(workbook)def handlePoint(workbook){ //主体方法def sheet = workbook.getSheet('field_to_have_max_min'); //field_to_have_max_min 为sheet的名字def rows = sheet.getRows();def cols = sheet.getColumns();println "rows: ${rows}, cols: ${cols}"def file = new File('field_to_have_max_min.sql') //创建导出文件file.delete() for(row in 2..<rows){def chart_field = sheet.getCell(0,row).getContents()def max = sheet.getCell(2,row).getContents()def min = sheet.getCell(5,row).getContents()if (max=='NA') max = 'null'if (min=='NA') min = 'null'def sql = "update dashboard_data_def set max_value=${max},min_value=${min} where chart_field='${chart_field}';"file << "${sql}\r\n" //导出sql到导出文件if (chart_field=='HK4_INSTALL_UPSPWR_Z4C_KVA')break;}}