zoukankan      html  css  js  c++  java
  • 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








    
    
  • 相关阅读:
    OpenCV-Python 模板匹配 | 三十一
    OpenCV-Python 傅里叶变换 | 三十
    OpenCV-Python 直方图-3:二维直方图 | 二十八
    OpenCV-Python 直方图-4:直方图反投影 | 二十九
    角谷猜想
    C# Notepad++ 环境配置
    C++ Notepad++ 环境配置
    字符串内无重复字符的最长子串长度
    计算给定字符串的无重复字符的最长子串长度
    黑色星期五
  • 原文地址:https://www.cnblogs.com/ltyc/p/14911720.html
Copyright © 2011-2022 走看看