Rxjs Observable.pipe 傳入多個 operators 的執行邏輯分析
阿新 • • 發佈:2021-06-16
一、用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