写在前面:前端ajax调用导出方法,ajax无法导出问题

原因:ajax是无法直接导出excel的,因为ajax的返回值只能是字符流,而导出excel是后台往浏览器中写入二进制的字节流

方法一、form表单(推荐)

<a href="javascript:void(0)" onclick="exportExcel()">导出</a>function exportExcel(){var form = $("<form>");form.attr('style', 'display:none');form.attr('target', '');form.attr('method', 'post');form.attr('action', '接口url');var input1 = $('<input>');input1.attr('type', 'hidden');input1.attr('name', '参数');input1.attr('value', '参数值');      /* JSON.stringify($.serializeObject($('#searchForm'))) */$('body').append(form);form.append(input1);form.submit();form.remove();
}

方法二、window.location.href()

function() {window.location.href = "接口url?参数1=xxx&参数2=aaa";
}

方法三、ajax请求把参数缓存在后端返回给前端,前端ajax再次发起一个window.open(url?params=params)即可

$.ajax({
url: '接口url',
type: 'post',
dataType: "json",
contentType : 'application/json',
data : JSON.stringify(this.tableOpts),
success: function(data){window.open('接口url?params=xxxx');
},

xlwt库负责将数据导出生成Excel表格文件 ,操作的是xls格式的exce,xlwt库里面所定义的行和列都是从0开始计数的

导出的py文件:感谢:https://blog.csdn.net/dl1456074580/article/details/87364999

步骤:

1、首先导入xlwt第3方库

2、创建一个workbook模块,相当于创建一个xlwt文件

3、通过add_sheet创建一个表格

4、使用write函数进行对表完成写的操作

5、把写完的数据导入到Excel中

# 导出表格
def write_excel(filename, tabletitle, bodytitle, datalist,sheetName):""":param filename: 输出的文件名:param tabletitle:  表标题:param remark: 备注:param bodytitle:  表头 格式如: ["名字", "课程名称", "课程编号"]:param datalist: 表格数据 格式二维数组如:[["学号1234", "张三", "语文", "course001"],["学号1235", "李四", "语文", "course001"],["学号1236", "王五", "语文", "course001"]]:return:"""# 设置字体font = xlwt.Font()font.bold = True  # 加粗font.name = "微软雅黑""""# May be: NO_LINE = 无线, THIN = 实线, MEDIUM = 中, DASHED = 虚线, DOTTED = 点虚线, THICK = 厚, DOUBLE, HAIR, MEDIUM_DASHED, THIN_DASH_DOTTED, MEDIUM_DASH_DOTTED, THIN_DASH_DOT_DOTTED, MEDIUM_DASH_DOT_DOTTED, SLANTED_MEDIUM_DASH_DOTTED"""# 设置边框borders = xlwt.Borders()borders.left = xlwt.Borders.THINborders.right = xlwt.Borders.THINborders.top = xlwt.Borders.THINborders.bottom = xlwt.Borders.THIN# 设置居中(左右上下居中)alignment = xlwt.Alignment()alignment.horz = xlwt.Alignment.HORZ_CENTER  # 水平方向alignment.vert = xlwt.Alignment.HORZ_CENTER  # 垂直方向"""0 = Black, 1 = White, 2 = Red, 3 = Green, 4 = Blue, 5 = Yellow, 6 = Magenta, 7 = Cyan, 16 = Maroon, 17 = Dark Green, 18 = Dark Blue, 19 = Dark Yellow , almost brown), 20 = Dark Magenta, 21 = Teal, 22 = Light Gray, 23 = Dark Gray"""# 设置背景颜色pattern = xlwt.Pattern()pattern.pattern = xlwt.Pattern.SOLID_PATTERNpattern.pattern_fore_colour = 7  # 背景颜色# 定义不同的excel stylestyle_tabletitle = xlwt.XFStyle()style_tabletitle.font = fontstyle_tabletitle.borders = bordersstyle_tabletitle.alignment = alignmentstyle2 = xlwt.XFStyle()style2.borders = bordersstyle2.alignment = alignmentstyle_data = xlwt.XFStyle()style_data.alignment = alignmentstyle_body_title = xlwt.XFStyle()style_body_title.borders = bordersstyle_body_title.font = fontstyle_body_title.pattern = patternstyle_body_title.alignment = alignmentwb = xlwt.Workbook(encoding='utf-8')worksheet = wb.add_sheet(sheetName)# 合并单元格并设置样式worksheet.row(0).height_mismatch = Trueworksheet.row(0).height = 20 * 25# 合并单元格并设置样式worksheet.write_merge(0, 0, 0, len(bodytitle), tabletitle, style=style_tabletitle)# worksheet.write_merge(1, 1, 0, len(bodytitle), remark)# 确定栏位宽度col_width = []for i in range(len(datalist)):for j in range(len(datalist[i])):if i == 0:col_width.append(len_byte(datalist[i][j]))else:if len(col_width) <= j:col_width.append(len_byte(datalist[i][j]))else:if col_width[j] < len_byte(str(datalist[i][j])):col_width[j] = len_byte(datalist[i][j])# 设置栏位宽度,栏位宽度小于10时候采用默认宽度for i in range(len(col_width)):if col_width[i] > 10:worksheet.col(i).width = 256 * (col_width[i] + 1)# 设置栏位高度# tall_style = xlwt.easyxf('font:height 720;') #设置字体高度# row0 = worksheet.row(0)# row0.set_style(tall_style)for i in range(0, len(bodytitle)):worksheet.write(1, i, bodytitle[i], style=style_body_title)# excel内容写入for i in range(len(datalist)):for j in range(len(datalist[i])):worksheet.write(i + 2, j, datalist[i][j],style=style_data)sio = BytesIO()# 将excel文件保存到字节流里面wb.save(sio)sio.seek(0)# # 设置响应参数# filename = "表格.xls"response = HttpResponse(sio.getvalue(), content_type='application/vnd.ms-excel; charset=UTF-8')basename = os.path.basename(filename)utf_filename = quote(basename.encode("utf-8"))response["Content-Disposition"] = "attachment;filename*=utf-8''{}".format(utf_filename)response.write(sio.getvalue())return response# 获取字符串长度,一个中文的长度为2
def len_byte(value):if value is None or value == "":return 10if type(value) != int:length = len(value)utf8_length = len(value.encode('utf-8'))length = (utf8_length - length) / 2 + lengthelse:length = len(str(value))return int(length)

调用:

"""
导出班级学生信息
"""
def export_class_stu(request):arguments = _getArguments(request)try:class_id = arguments.get("class_id", "")data = []return_data = []state = 202msg = ""if class_id and class_id != "":stu_learn_info = StudentLearningInfo.objects.filter(class_field_id=class_id)length = len(stu_learn_info)className = ""if stu_learn_info and length > 0:for i in range(length):stu_learn = stu_learn_info[i]data.append(model_to_dict(stu_learn))stu_info = Student.objects.get(pk=stu_learn.student.student_id)data[i]["student"] = stu_info.namedata[i]["course"] = stu_learn.course.course_nameclassName = stu_learn.class_field.class_namedata[i]["class_field"] = classNamedata[i]["phone"] = stu_info.phone_numberphoneID = stu_info.phone_iddata[i]["phone_id"] = phoneIDdata[i]["cdk_unlock"] = ""if phoneID and phoneID != "":phone_view = PhoneCdkView()phone_info = phone_view._selectOneCdkByPhoneId(phoneID)if phone_info:data[i]["cdk_unlock"] = phone_info["cdk_unlock"][0:6]else:data[i]["cdk_unlock"] = "phoneID可能错,请联系管理员查看"data[i]["weChat_id"] = stu_info.wechat_idfor data_list in data:list_info = list(data_list.values())list_info.pop(0)return_data.append(list_info)print(return_data[0])fileName = className+"学生学习信息表"+str(datetime.datetime.now().strftime("%Y-%m-%d"))+"-"+str(str(datetime.datetime.now().timestamp()).split(".")[0]) + ".xls"tabletitle = className+"学生学习信息表"bodytitle = ["姓名", "课程名", "钉钉用户ID", "班级", "培训学习数", "培训学习完成数", "必修培训完成数", "必修培训按时完成数", "必修培训逾期完成数", "视频学习数", "学习总时长", "学习时长(单位换算成秒)", "完成率", "联系电话", "手机ID", "解锁码", "微信ID"]response = write_excel(fileName, tabletitle, bodytitle, return_data, className)state = 200msg = className + "学生学习数据导出成功"return responseelse:state = 202msg = "没有该班学生学习信息"else:state = 202msg = "请选择想要导出的班级信息"return_dict = {'data': return_data,'state': state,'msg': msg}return JsonResponse(return_dict, json_dumps_params={'ensure_ascii': False})except Exception as e:traceback.print_exc()return JsonResponse({"state": 500, "msg": "系统出错,请联系管理员", "errMsg": str(e)},json_dumps_params={'ensure_ascii': False})

结果:

简单版:

# coding:utf-8
import xlwt
# excel路径
excle_path = r'E:\1234.xls'
# 创建一个Workbook模块
data = xlwt.Workbook(encoding='utf-8')
# 创建一个表格,cell_overwrite_ok=True 为不覆盖表,默认为False
sheet = data.add_sheet('test123',cell_overwrite_ok=True)
# 写入坐标为(0,0)内容为职位
sheet.write(0,0,'职位')
# 写入坐标为(1,0)内容为软件测试工程师
sheet.write(1,0,'软件测试工程师')
# 保存到excel中
data.save(excle_path)

设置单元格的一些参数:

感谢:https://www.cnblogs.com/xiaodingdong/p/8012282.html

https://www.jianshu.com/p/bdd06c6f23a7

font:主要对字体进行操作,比如字体的颜色、大小
alignment:主要是对输入内容之后的对齐方式对齐
borders:每一个单元格的格式
pattern:设置单元格的背景颜色

1、font

font.bold = bold # 粗体
font.italic = True # 斜体
font.underline = 10 # 下划线(其中当值为9,整行的填充色为蓝色)
font.struck_out =True # 横线(比如:在一个字中 画上一横)
def setStyle(name, height,color, bold=False):style = xlwt.XFStyle()  # 初始化样式font = xlwt.Font()  # 为样式创建字体# 字体类型:比如宋体、仿宋也可以是汉仪瘦金书繁font.name = name# 设置字体颜色font.colour_index = color# 字体大小font.height = height# 定义格式style.font = fontreturn styleif __name__ == '__main__':# 创建工作簿,并指定写入的格式f = xlwt.Workbook(encoding='utf8')  # 创建工作簿#  创建sheet,并指定可以重复写入数据的情况.设置行高度sheet1 = f.add_sheet(u'colour', cell_overwrite_ok=False)# 控制行的位置column = 0;row = 0# 生成第一行for i in range(0, 100):# 参数对应:行,列,值,字体样式(可以没有)sheet1.write(column, row, i, setStyle('Times New Roman', 400, i, False))# 这里主要为了控制输入每行十个内容。为了查看row = row + 1if row % 10 ==0:column = column + 1row = 0f.save(r'E:\xlwtExCEL.xls')  # 保存文档

效果图:其中1和9看不清,可能写入的颜色为白色,并不是没有写入。

二.borders中设置元素边框的属性:

def setStyle(name, height,color, bold=False):style = xlwt.XFStyle()  # 初始化样式font = xlwt.Font()  # 为样式创建字体# 字体类型:比如宋体、仿宋也可以是汉仪瘦金书繁font.name = name# 设置字体颜色font.colour_index = color# 字体大小font.height = height# 定义格式style.font = font# borders.left = xlwt.Borders.THIN# NO_LINE: 官方代码中NO_LINE所表示的值为0,没有边框# THIN: 官方代码中THIN所表示的值为1,边框为实线borders = xlwt.Borders()borders.left = colorborders.left = xlwt.Borders.THINborders.right = colorborders.top = colorborders.bottom = color# 定义格式style.borders = bordersreturn styleif __name__ == '__main__':# 创建工作簿,并指定写入的格式f = xlwt.Workbook(encoding='utf8')  # 创建工作簿#  创建sheet,并指定可以重复写入数据的情况.设置行高度sheet1 = f.add_sheet(u'colour', cell_overwrite_ok=False)# 控制行的位置column = 0row = 0# 生成第一行for i in range(0, 100):# 参数对应:行,列,值,字体样式(可以没有)sheet1.write(column, row, i, setStyle('汉仪瘦金书繁', 400, i, True))# 这里主要为了控制输入每行十个内容。为了查看row = row + 1if row % 10 == 0:column = column + 1row = 0f.save(r'E:\xlwtExCEL.xls')  # 保存文档

三、pattern设置单元格的颜色背景颜色:

def setStyle(name, height,color, bold=False):style = xlwt.XFStyle()  # 初始化样式font = xlwt.Font()  # 为样式创建字体# 字体类型:比如宋体、仿宋也可以是汉仪瘦金书繁font.name = name# 设置字体颜色font.colour_index = color# 字体大小font.height = height# 定义格式style.font = font# borders.left = xlwt.Borders.THIN# NO_LINE: 官方代码中NO_LINE所表示的值为0,没有边框# THIN: 官方代码中THIN所表示的值为1,边框为实线borders = xlwt.Borders()borders.left = colorborders.left = xlwt.Borders.THINborders.right = colorborders.top = colorborders.bottom = color# 定义格式style.borders = borders# 设置背景颜色pattern = xlwt.Pattern()# 设置背景颜色的模式pattern.pattern = xlwt.Pattern.SOLID_PATTERN# 背景颜色pattern.pattern_fore_colour = colorstyle.pattern = patternreturn styleif __name__ == '__main__':# 创建工作簿,并指定写入的格式f = xlwt.Workbook(encoding='utf8')  # 创建工作簿#  创建sheet,并指定可以重复写入数据的情况.设置行高度sheet1 = f.add_sheet(u'colour', cell_overwrite_ok=False)# 控制行的位置column = 0row = 0# 生成第一行for i in range(0, 100):# 参数对应:行,列,值,字体样式(可以没有)sheet1.write(column, row, i, setStyle('汉仪瘦金书繁', 400, i, True))# 这里主要为了控制输入每行十个内容。为了查看row = row + 1if row % 10 == 0:column = column + 1row = 0f.save(r'E:\xlwtExCEL.xls')  # 保存文档

四、alignment对齐方式的设置:

def setStyle(name, height,color, bold=False):style = xlwt.XFStyle()  # 初始化样式font = xlwt.Font()  # 为样式创建字体# 字体类型:比如宋体、仿宋也可以是汉仪瘦金书繁font.name = name# 设置字体颜色font.colour_index = color# 字体大小font.height = height# 定义格式style.font = fontalignment = xlwt.Alignment()alignment.horz = color# 设置居中(左右上下居中)# alignment = xlwt.Alignment()# alignment.horz = xlwt.Alignment.HORZ_CENTER  # 水平方向# alignment.vert = xlwt.Alignment.HORZ_CENTER  # 垂直方向style.alignment = alignmentreturn styleif __name__ == '__main__':# 创建工作簿,并指定写入的格式f = xlwt.Workbook(encoding='utf8')  # 创建工作簿#  创建sheet,并指定可以重复写入数据的情况.设置行高度sheet1 = f.add_sheet(u'colour', cell_overwrite_ok=False)# 控制行的位置column = 0row = 0# 生成第一行for i in range(0, 100):# 参数对应:行,列,值,字体样式(可以没有)sheet1.write(column, row, i, setStyle('汉仪瘦金书繁', 400, i, True))# 这里主要为了控制输入每行十个内容。为了查看row = row + 1if row % 10 == 0:column = column + 1row = 0f.save(r'E:\xlwtExCEL.xls')  # 保存文档

Python:数据导出到Excel(使用xlwt)相关推荐

  1. python读html导出excel,python数据导出到excel

    如何使用python将大量数据导出到Excel中的 安装openpyxl模块 调用openpyxl模块,将变量中的数据写入excel 具体的操作流程需要根据您的需CSS布局HTML小编今天和大家分享和 ...

  2. python结果输出到excel-python实现数据导出到excel的示例--普通格式

    此文是在django框架下编写,从数据库中获取数据使用的是django-orm 用python导出数据到excel,简单到爆!(普通的excel格式) 安装xlwt pip install xlwt ...

  3. python处理大量excel数据-使用python将大量数据导出到Excel中的小技巧分享

    (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢?如果碰到需要导出大量数据又该如何操作呢? 本文主要解决以 ...

  4. python输出数据到excel-python实现数据导出到excel的示例

    这篇文章主要介绍了关于python实现数据导出到excel的示例,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 此文是在django框架下编写,从数据库中获取数据使用的是django- ...

  5. python输出数据到excel-python实现数据导出到excel的示例--普通格式

    此文是在django框架下编写,从数据库中获取数据使用的是django-orm 用python导出数据到excel,简单到爆!(普通的excel格式) 安装xlwt pip install xlwt ...

  6. python输出数据到excel-使用python将大量数据导出到Excel中的小技巧分享

    (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢?如果碰到需要导出大量数据又该如何操作呢? 本文主要解决以 ...

  7. python输出数据到excel-如何使用python将大量数据导出到Excel中的小技巧之一

    如何使用python将大量数据导出到Excel中的小技巧 (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢 ...

  8. python 导出大量数据到excel_怎么在python中将大量数据导出到Excel文件

    怎么在python中将大量数据导出到Excel文件 发布时间:2021-01-16 11:09:40 来源:亿速云 阅读:76 作者:Leah 这期内容当中小编将会给大家带来有关怎么在python中将 ...

  9. python数据导出excel_【python Excel】如何使用python将大量数据导出到Excel中的小技巧之一...

    如何使用python将大量数据导出到Excel中的小技巧 (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢 ...

最新文章

  1. 全球SDN测试认证中心发布OpenDaylight测试报告
  2. 【转载】mysql常用函数汇总
  3. npm run buil构建后页面白屏_从Npm Script到Webpack,6种常见的前端构建工具对比
  4. 学python爬虫需要什么基础-从零开始教你学爬虫!python爬虫的基本流程!
  5. JZOJ 5192. 【NOI2017模拟7.2】容器
  6. 10_Eclipse中演示Git冲突的解决
  7. SAP Cloud for Customer的duplicate check最后是通过什么模型实现的
  8. VS2019 配色_这个双11,凯里-欧文陪你过!欧文6正式发布,城市版配色真的香
  9. android 怎么刷机,android系统怎么刷机
  10. Kettle工具使用及总结
  11. 【三维目标检测】PointRCNN(二)
  12. GHOSTXPSP3电脑爱好者V9.9美化修正版
  13. 【Arduino实验14 红外遥控】
  14. 1 什么是机器学习(Machine Learning)?
  15. 一次性奖励300万?成都市武侯区促进文化产业发展系列政策影视产业专项政策出来了
  16. 网络安全等级保护的过程
  17. 【游戏开发实战】Unity 2D游戏手指控制移动摄像机镜头和双指缩放镜头(愤怒的小鸟为例)
  18. 7z怎么解压linux,7z 常用解压命令
  19. 墨菲定律 三种(is2120)
  20. 教你创建电脑、手机同步的markdown云笔记--力扣刷题力荐!

热门文章

  1. 最近经常看到网上程序员被抓,如何避免面向监狱编程!?
  2. html病毒DropFileName,王国平博客-HTML 感染 DropFileName = “svchost.exe” Ramnit 蠕虫病毒 查杀解决办法...
  3. 查看windows系统和office是否永久激活(转载)
  4. 硬件基础:台式电脑上的常用的几个接口!
  5. 如何提升测试人员在公司的地位
  6. android 锁屏后定时器,iOS锁屏或者后台计时器定时解决方法
  7. Win7系统安装教程【附Win7/64位系统下载地址】
  8. 【FL论文阅读】Communication-Efficient Learning of Deep Networks from Decentralized Data
  9. 红米k30至尊版是5g吗 红米k30至尊版怎么样
  10. java 文档比较功能_[原创]java在线比较两个word文件