1.同目录下创建file_handle.py文件

file_handle.py

import xlwt, datetime
from xlwt import *
import xlsxwriter # 写入excel文件函数
def wite_to_excel(n, head_data, records, download_url, table_name):
# 获取时间戳
timestr = datetime.datetime.now().strftime("%Y%m%d%H%M%S") # 工作表
wbk = xlwt.Workbook(style_compression=2, encoding='utf-8')
sheet1 = wbk.add_sheet('sheet1', cell_overwrite_ok=True) # 写入表头
for filed in range(0, len(head_data)):
sheet1.write(0, filed, head_data[filed], excel_head_style()) # 写入数据记录
for row in range(1, n + 1):
for col in range(0, len(head_data)):
sheet1.write(row, col, records[row - 1][col], excel_record_style())
# 设置默认单元格宽度
sheet1.col(col).width = 256 * 15 wbk.save(download_url + table_name + '.xls')
return timestr # 写入excel文件函数
def wite_to_excel_text(n, head_data, records, download_url, table_name):
# 获取时间戳
timestr = datetime.datetime.now().strftime("%Y%m%d%H%M%S") # 工作表
wbk = xlsxwriter.Workbook(download_url + table_name + '.xls')
sheet1 = wbk.add_worksheet('sheet1') # 写入表头
for filed in range(0, len(head_data)):
sheet1.write(0, filed, head_data[filed]) # 写入数据记录
for row in range(1, n + 1):
for col in range(0, len(head_data)):
sheet1.write(row, col, records[row - 1][col])
# 设置默认单元格宽度
# sheet1.col(col).width = 256 * 15 # wbk.save(download_url + table_name + '.xls')
wbk.close()
return timestr # 定义导出文件表头格式
def excel_head_style():
# 创建一个样式
style = XFStyle()
# 设置背景色
pattern = Pattern()
pattern.pattern = Pattern.SOLID_PATTERN
pattern.pattern_fore_colour = Style.colour_map['light_green'] # 设置单元格背景色
style.pattern = pattern
# 设置字体
font0 = xlwt.Font()
font0.name = u'微软雅黑'
font0.bold = True
font0.colour_index = 0
font0.height = 240
style.font = font0
# 设置文字位置
alignment = xlwt.Alignment() # 设置字体在单元格的位置
alignment.horz = xlwt.Alignment.HORZ_CENTER # 水平方向
alignment.vert = xlwt.Alignment.VERT_CENTER # 竖直方向
style.alignment = alignment
# 设置边框
borders = xlwt.Borders() # Create borders
borders.left = xlwt.Borders.THIN # 添加边框-虚线边框
borders.right = xlwt.Borders.THIN # 添加边框-虚线边框
borders.top = xlwt.Borders.THIN # 添加边框-虚线边框
borders.bottom = xlwt.Borders.THIN # 添加边框-虚线边框
style.borders = borders return style # 定义导出文件记录格式
def excel_record_style():
# 创建一个样式
style = XFStyle()
# 设置字体
font0 = xlwt.Font()
font0.name = u'微软雅黑'
font0.bold = False
font0.colour_index = 0
font0.height = 200
style.font = font0
# 设置文字位置
alignment = xlwt.Alignment() # 设置字体在单元格的位置
alignment.horz = xlwt.Alignment.HORZ_CENTER # 水平方向
alignment.vert = xlwt.Alignment.VERT_CENTER # 竖直方向
style.alignment = alignment
# 设置边框
borders = xlwt.Borders() # Create borders
borders.left = xlwt.Borders.THIN # 添加边框-虚线边框
borders.right = xlwt.Borders.THIN # 添加边框-虚线边框
borders.top = xlwt.Borders.THIN # 添加边框-虚线边框
borders.bottom = xlwt.Borders.THIN # 添加边框-虚线边框
style.borders = borders return style

2.views.py

class ExportExelc(APIView):
# authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication)
# permission_classes = (IsAuthenticated,)
def post(self, request, *args, **kwargs):
'''导出数据'''
table_name = request.query_params['table_name']
# 表头字段
# records表示要添加的数据
# 写入备注
head_data = []
records = []
record = []
queryset = get_query_exprot(connection, table_name, DATABASES['default']['NAME'])
for sql_info in queryset:
head_data.append(sql_info['COLUMN_NAME']) # 设置标题字段
record.append(sql_info['COLUMN_COMMENT']) # 设置标题字段
records.append(record)
cursor = connection.cursor()
page = 0
page_size = 1000
while True:
start = page * page_size
page += 1
num = cursor.execute(f'select * from {table_name} limit {start},{page_size};')
if not num:
break
for i in cursor.fetchall():
record = []
for j in i:
record.append(str(j))
records.append(record)
n = len(records)
# 设置生成文件所在路径
download_url = os.path.dirname(os.path.abspath(__file__)) + '\\export_excel\\'
# excel文件名称
table_name = table_name.replace('database_data_', '')
# 写入数据到excel中
# wite_to_excel(n, head_data, records, download_url, table_name)
wite_to_excel_text(n, head_data, records, download_url, table_name)
from django.http import StreamingHttpResponse def file_iterator(file_name, chunk_size=512):
with open(file_name, 'rb') as f:
while True:
c = f.read(chunk_size)
if c:
yield c
else:
break # 显示在弹出对话框中的默认的下载文件名
the_file_name = table_name + '.xls' # 设置生成文件所在路径
download_url = download_url response = StreamingHttpResponse(file_iterator(download_url + the_file_name))
response['Content-Type'] = 'application/octet-stream'
response['Content-Disposition'] = 'attachment;filename="{0}"'.format(the_file_name) return response

3.query

def get_query_exprot(connection, table, key):
"""
表的结构和数据
:param connection:
:param table:
:return:
"""
cursor = connection.cursor()
cursor_columns = connection.cursor()
sql = f"select * from information_schema.columns where table_schema ='{key}' and table_name = '{table}';"
data_nums = cursor.execute(sql)
if data_nums:
cursor_columns.execute("show columns from information_schema.columns")
columns = [i[0] for i in cursor_columns.fetchall()]
queryset = [{c: str(j) for c, j in zip(columns, i)} for i in cursor.fetchall()]
return queryset

4.在xls文件上追加数据

import xlrd
from xlutils.copy import copy
workbook = xlrd.open_workbook(file_name, formatting_info=True) # 读取xls文件
write_data = copy(workbook)
sheet_data = write_data.get_sheet(0)
sheet_data.write(i, 12, 'succeed') # i是行 12 是列 'succeed' 追加要写入的数据
write_data.save('.\\operations.xls')

  

 

django 导出xls文件的更多相关文章

  1. 【POI】导出xls文件报错:The maximum number of cell styles was exceeded. You can define up to 4000 styles in a .xls workbook

    使用POI导出xls文件,由于数据过多,导致导出xls报错如下: The maximum number of cell styles was exceeded. You can define up t ...

  2. Django 导出csv文件 中文乱码问题

    import csvimport codecsimport datetimefrom django.db import connectionfrom django.contrib.auth.model ...

  3. asp.net(C#) Excel导出类 导出.xls文件

    ---恢复内容开始--- using Microsoft.Office.Interop.Excel; 针对office 2003需添加引用Microsoft   Excel   11.0   Obje ...

  4. thinkphp--导入导出xls文件

    /** * 数组转xls格式的excel文件 * @param array $data 需要生成excel文件的数组 * @param string $filename 生成的excel文件名 * 示 ...

  5. java通过HSSFWorkbook导出xls文件

    使用swgger2.Restlet等接口工具有bug导致导出失败,测试直接使用浏览器 //导出列表-新 @UserRoleJudgment(authpos = SystemControllerLog. ...

  6. 用DataGridView导入TXT文件,并导出为XLS文件

    使用 DataGridView 控件,可以显示和编辑来自多种不同类型的数据源的表格数据.也可以导出.txt,.xls等格式的文件.今天我们就先介绍一下用DataGridView把导入txt文件,导出x ...

  7. django 中下载文件与下载保存为excel

    一.django 中下载文件 在实际的项目中很多时候需要用到下载功能,如导excel.pdf或者文件下载,当然你可以使用web服务自己搭建可以用于下载的资源服务器,如nginx,这里我们主要介绍dja ...

  8. 用excel.php类库导出excel文件

    excel.php是个小型的php类库,可以满足基本的从数据库中取出数据然后导出xls格式的excel文件,代码如下: 1 class Excel { 2 public $filename = 'ex ...

  9. 前端导出excel文件

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. C# HTTP系列4 HttpWebRequest.CookieContainer属性

    系列目录     [已更新最新开发文章,点击查看详细] HttpWebRequest.CookieContainer 获取或设置与此请求关联的 Cookie.默认情况下CookieContainer  ...

  2. flutter RN taro选型思考

    当前RN已经成熟,但是依赖于大平台(JD.携程),小公司想开箱即用还是有困难的 纯Flutter还远未成熟,更多的是和原生进行混合 但是作为个体又想要在某一个点切入市场,就是需要作选择,基于当下及未来 ...

  3. [数据库] SQL 语法之进阶篇

    一.创建计算字段 下面介绍什么是计算字段,如何创建计算字段,以及如何从应用程序中使用别名引用它们. 1.1 计算字段 存储在数据库表中的数据一般不是应用程序所需要的格式,下面举几个例子. 需要显示公司 ...

  4. 【转】python 调用super()初始化报错“TypeError: super() takes at least 1 argument”

    一.实验环境 1.Windows7x64_SP1 2.Anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 二.实验步骤 2.1 在python中有如下代码: cl ...

  5. python多条插入问题

    多条插入用excutemany(listtuple) #coding=utf-8 import MySQLdb import traceback sqlstr= "insert into t ...

  6. CentOS7 SUDO 笔记--没配置sudoer,为什么有的账号能用sudo命令,有的不能用

    原来: 一.安装linux 创建的用户(管理员打钩)默认在 wheel组里. 1. 使用 cat /etc/passwd 查看用户所在组.中间那个数字是 groupid 不太好看 2.使用 cat / ...

  7. 【JVM学习】3.深入解析强引用、软引用、弱引用、幻象引用

    来源:公众号:猿人谷 关于强引用.软引用.弱引用.幻象引用的区别,在很多公司的面试题中经常出现,可能有些小伙伴觉得这个知识点比较冷门,但其实大家在开发中经常用到,如new一个对象的时候就是强引用的应用 ...

  8. 云计算入门(一)、使用vagrant+virtualbox安装虚机

    一.vagrant和virtaulbox简介 Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境,我们可以使用它来干如下这些事: 建立和删除虚拟机配置虚拟机运行参数管理虚拟机运行状态 ...

  9. Mysql系列(十一)—— 性能分析其他常用监控

    show status show status可以查询显示出当前mysql server的状态信息.该语句不需要任何权限. 对于show status可以时用like子句,模糊检索需要的状态信息.如: ...

  10. Visual Studio 2019 正式版今日发布 key

     Visual Studio 2019 EnterpriseBF8Y8-GN2QH-T84XB-QVY3B-RC4DFVisual Studio 2019 ProfessionalNYWVH-HT4X ...