1. 程式人生 > 其它 >Rxjs Observable.pipe 傳入多個 operators 的執行邏輯分析

Rxjs Observable.pipe 傳入多個 operators 的執行邏輯分析

一、用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