首先在zhengjiao.html中加入 这个导出到excel的按钮。
然后去写对应的js,这个excel函数要做什么呢?其实就是提取页面生成的结果,然后给到后台,后台再写入到excel中,前端再配合去自动下载到使用者电脑即可。
提取方式有几种:
-
提取dom里的实际值。 把这些输入框都统计好。
-
直接提取运行后生成的那个二维数组。
-
直接复制运行功能的代码,进入后台后重新运行,并把结果变成excel而不是返回给前端,这个好处是简单,并且无需先运行。
按照已有的方法,选第三种。简单有效:所以代码完全复制即可,但是需要改动给到后端的url 和 接受返回值的动作函数。
代码如下:
{# 导出excel #} function excel() { var keys = document.getElementsByName('keys'); var values = document.getElementsByName('values'); var end_keys = []; var end_values = []; for (var i=0; i<keys.length; i++) { if(values[i].value !== '') { end_keys.push(keys[i].value); end_values.push(values[i].value); } } $.get('/zhengjiao_excel/', { "end_keys": end_keys.toString(), "end_values": end_values.toString() }, function (ret) { }) }
添加映射:
urls.py:
url(r'^zhengjiao_excel/$', views_tools.zhengjiao_excel), # 正交工具导出excel
views.py
# 正交工具导出 def zhengjiao_excel(request): end_keys = request.GET['end_keys'].split(',') end_values = request.GET['end_values'].split(',') new_values = [i.split('/') for i in end_values] res = [] for i in AllPairs(new_values): res.append(i) print(res) return HttpResponse('')
这部分代码和运行的是基本一样的。这里当然没有写完,得到的这个res就是一个二维数组,也就需要写到excel中的。
打印一下看看:
python写入excel有什么方法:
-
利用xlrd等
-
利用win32com.clent 等
xlrd 大家可以直接pip下载,尽量下载全面:
然后在views_tools.py头部进行导入:
代码临时如下:
# 正交工具导出 def zhengjiao_excel(request): end_keys = request.GET['end_keys'].split(',') end_values = request.GET['end_values'].split(',') new_values = [i.split('/') for i in end_values] res = [] for i in AllPairs(new_values): res.append(i) # 先创建 lr_book = xlwt.Workbook(encoding='utf-8') # 创建excel lr_sheet = lr_book.add_sheet('正交结果') # 创建sheet for i in range(len(res)): case_index = '用例' + str(i+1) # 用例序号 case = ','.join(res[i]) # 用例内容 lr_sheet.write(i, 0, case_index) # 写入,i为行,0为第1列 lr_sheet.write(i, 1, case) # 写入,i为行,1为第2列 lr_book.save('tmp_zhengjiao.xls' + now()) # 保存 return HttpResponse('')
完成后,运行一下看看:
项目根目录位置出现了这个xls表格,打开看看:
可以看到已经成功写入进来了。不过这里看着有点别扭,是因为没有把输入条件的名字 加进来。在前端js函数开始,把这个end_keys给传过来:
然后是python代码:
# 正交工具导出 def zhengjiao_excel(request): end_keys = request.GET['end_keys'].split(',') end_values = request.GET['end_values'].split(',') new_values = [i.split('/') for i in end_values] res = [] for i in AllPairs(new_values): res.append(i) # 先创建 lr_book = xlwt.Workbook(encoding='utf-8') # 创建excel lr_sheet = lr_book.add_sheet('正交结果') # 创建sheet for i in range(len(res)): case_index = '用例' + str(i+1) # 用例序号 hb = list(zip(end_keys, res[i])) # 把key和value进行合并 case = ','.join(':'.join(list(i)) for i in hb) # 用例内容,进行格式化,便于阅读 lr_sheet.write(i, 0, case_index) # 写入,i为行,0为第1列 lr_sheet.write(i, 1, case) # 写入,i为行,1为第2列 lr_book.save('tmp_zhengjiao.xls') # 保存 return HttpResponse('')
此时在运行看看结果:
这次就带上了 输入条件的名字了~
下载:
1.先把文件生成位置改到static中:
然后前端返回处理中只需要加一句:
这就是直接请求静态文件的方法~
然后重启服务,刷新页面测试:
可以看到成功下载了,然后去下载目录找到它并打开:
可以看到已经成功实现了功能。