excel导入与导出

一、用openpyxl实现导入与导出

基本用法 excel之导出excel表

from openpyxl import Workbook

sheet = Workbook()
# 激活一个表格
word = sheet.active
# 创建一个新表格
# word2 = sheet.create_sheet()
# 给表格起名字
# word.title = 'table'
# 指定行列填入数据
# word.cell(1, 1, "hello, world")
# 直接根据单元格填入
# word['A2'] = '大家好'
# 也可以按行追加
word.append(['type','disease_guiding_id','dis_attr_guiding_id','symptom_guiding_id','sym_attr_guiding_id','order','guide_guiding_id','promote','disease_name'])
# 保存表格
sheet.save("test1.xlsx")

基本用法之导入exel表

from openpyxl import load_workbook

workbook = load_workbook('专病引导导入测试.xlsx')        #  加载xlsx文件
sheets = workbook.sheetnames    # 获取文件里所有表的名字
booksheet = workbook[sheets[0]]     #获取第一张表里的内容
rows = booksheet.rows   # 获取第一张表的里的行数
columns = booksheet.columns # 获取第一张表里的列数
for row in rows:
    line = [col.value for col in row]   #
row_3 = list(booksheet.rows)[2]   #获取第一张表里第三行的数据,注意返回值里的元素为cell类型,需要转化
                                 # 获取列的内容类似,将rows换成columns
line3 = [col.value for col in row_3] #转换第一张表里第三行的数据,用list类型存储

二、用xlsxwriter导出excel表

import xlsxwriter
import io

queryset = self.get_queryset()
ser = self.serializer_class(queryset, many=True)
disease_guide_headers = [
"名称", "状态(0=关闭,1=开启)", "优先级", "年龄下限", "年龄上限",
"适用性别", "自动设置", "自动设置", "提示触发", "提示触发"
]
disease_step_headers = [
"名称", "步骤提示"
]
disease_content_headers = [
"名称", "步骤提示", "内容类型", "内容名", "内容通用属性", "内容排序"
]

output = io.BytesIO() # ????
with xlsxwriter.Workbook(output) as workbook:
worksheet_guide = self.add_sheet(workbook, disease_guide_headers, column='A:J', sheet_name='引导设置') # 生成多个sheet
worksheet_step = self.add_sheet(workbook, disease_step_headers, column='A:B', sheet_name='步骤设置')
worksheet_content = self.add_sheet(workbook, disease_content_headers, column='A:F', sheet_name='内容设置')

row_guide = 1 # 做标记,用来表示,写入的是那一行
row_step = 1
row_content = 1

for disease_guide in ser.data:
name = disease_guide.get('name')
guiding_steps = disease_guide.pop('guiding_steps')
data_guide = self.disease_guide_data(
disease_guide, self.get_resource_data.get('sym_dic'), self.get_resource_data.get('dis_dic'))
worksheet_guide.write_row(row_guide, 0, data_guide)
row_guide += 1
for guiding_step in guiding_steps:
guiding_step_name = guiding_step.get('prompt')
disease_content = guiding_step.pop('disease_symptom')
data_step = self.disease_steps_data(guiding_step, name)
worksheet_step.write_row(row_step, 0, data_step)
row_step += 1
for disease_symptom in disease_content:
data_content = self.disease_content_data(
name,
guiding_step_name,
disease_symptom,
self.get_resource_data.get('sym_dic'),
self.get_resource_data.get('dis_dic'),
self.get_resource_data.get('dis_attr_dic'),
self.get_resource_data.get('sym_attr_dic'),
)
worksheet_content.write_row(row_content, 0, data_content)
row_content += 1
from django.http import FileResponse

output.seek(0) # 将指针移到最开始处,
response = FileResponse(output) # 将FileResponse(output)赋值给response
response['Content-Type'] = 'application/octet-stream' # 二进制流数据(文件下载)
response['Content-Disposition'] = 'attachment;filename="{}"'.format("disease_guide.xlsx")
return response









原文地址:https://www.cnblogs.com/ltyc/p/14911720.html