中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何建立Map寫Excel表

發布時間:2021-08-03 11:14:12 來源:億速云 閱讀:157 作者:小新 欄目:開發技術

這篇文章主要介紹Python如何建立Map寫Excel表,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

【為什么要建立Excel表模板?】

建立Excel模板,是涉及到歷史數據才要建立模板的,為什么呢?

如果,我們需要一份數據表,這個表中是本月的數據,每天跑一行出來。到了下個月,就需要新建下一個月的表。

這樣以后進行數據統計的時候,我們只需要拿到每個月的最后一天的那份數據表就可以了,因為最后一天的數據表包含了當月的所有數據。

對于這樣一個需求,腳本中的代碼在月份改變時,肯定要新建一個表,不再將原來的表作為模板來寫。

自然,下一個月的表肯定不能把上一個月的數據帶進去,所以肯定需要新寫表頭。

這里往深了思考,就涉及到了另外一個問題。

【建立Excel模板的方法的本質】

def createTemplateExcel():
 '''創建Excel文件模板'''
 wb = xlwt.Workbook(encoding = "UTF-8", style_compression = True)
 sht0 = wb.add_sheet("線上", cell_overwrite_ok = True)
 sht0.col(0).width=4000
 sht0.write(0, 0, '游戲名稱', style1)
 sht0.write(0, 1, '渠道', style1)
 sht0.write(0, 2, '成交量', style1)
 sht0.write(0, 3, '下單量', style1)
 sht0.write(0, 4, '失敗量', style1)

 sht1 = wb.add_sheet("線下", cell_overwrite_ok = True)
 sht1.col(0).width=4000
 sht1.write(0, 0, '游戲名稱', style1)
 sht1.write(0, 1, '成交量', style1)
 sht1.write(0, 2, '下單量', style1)
 sht1.write(0, 3, '失敗量', style1)
 return wb
 或者
 wb.save(tempFileName)

這個所謂的建立模板的方法做了什么事情呢?
只是建立了自定義名字的sheet,然后將表頭寫進去了而已。所以建立模板的方法本質上實際上就是寫表頭。

我們可以return wb,也可以wb.save(tempFileName)

即,我們可以把寫好的表頭直接return,接著下面的寫數據的方法用。

也可以,直接保存一個模板Excel表出來放在腳本后臺用。每次需要寫新表的時候就去調用生成的模板。

這里的問題還可以更加深。。。

【有了寫表頭的所謂建立模板方法,保存模板文件是否還有必要?】

其實又是個平衡問題。我們是每次調方法來寫表頭,消耗運行時間。還是直接調用已經寫好的模板文件呢?直接調用雖然快,但是模板文件會占用腳本后臺的空間。

怎么樣劃算呢?選時間還是空間?

而且有個問題,寫一定就比調用慢嗎?如果寫比調用快,既省時間又省空間,只不過代碼中多了個寫表頭的方法而已。

還方便后期維護。

說到這里,就有一個矛盾的地方了。我們既然已經有了寫表頭的操作了。還需要把它保存為模板文件放起來嗎?

每次運行的時候直接寫不就行了嗎?為什么還要保存?

保存起來除了占空間,用于調用(實質上完全可以不調用直接寫),還有什么用呢?

這是一個值得改進的地方。。。吧

【關于建立模板方法相關的個人暫處理辦法】

目前我自己能夠想到的方法是,以后不再額外保存模板文件出來。寫表頭就是寫表頭,直接return,和后面的方法串起來就可以了。

每次月份改變的時候,即到了該月第一天寫該月的第一張表的時候,去調用這個寫表頭的方法就可以了。

好了,第一個問題過去。接下來闡述第二個問題?

【從數據庫取數據,進行處理以后,再寫入】

我們之前寫Excel表的時候,大多數的情況是,直接將取到的數據寫入Excel表對應位置。

取數據都是一樣的方法模板。數據處理發生在寫入的時候。遇到過的,需要處理的情況有兩種:

1. 需要調用Excel相關函數,比如SUM等。需要用到這個

xlwt.Formula

2. 需要將數據進行除運算外的處理。我們處理本例的需求時遇到的就是這種情況。

【需求】

將數據庫中每個游戲的成交量、下單量、失敗量取出來。寫一張如下的表出來:

Python如何建立Map寫Excel表

關鍵需要處理的問題是:每個游戲的三項數據,每項數據是單獨對應一個SQL取出來的,即,每項單獨取,排序是不一樣的。

如果直接寫到Excel表中,是這樣子的

Python如何建立Map寫Excel表

可以看到,排序是亂的。我們需要把這些數據按名字進行一一對應的處理,生成一張第一個圖所示的表出來。

這里就是數據處理需要用什么方法的問題?

【如何進行數據處理?】

之前想到的方法是:

def writeInfo0(sht, rs, length, rs2, length3, rs3, length4):
 '''寫入線上具體數據'''
 for j in range(length3):
  sht.write(j+1, 0, str(rs2[j][0]).decode('utf-8'), style1)
  sht.write(j+1, 1, str(rs2[j][1]).decode('utf-8'), style1)
  sht.write(j+1, 3, rs2[j][2], style1)

 for j in range(length3):
  for i in range(length):
   if (str(rs[i][0])==str(rs2[j][0])) and (str(rs[i][1])==str(rs2[j][1])):
    sht.write(j+1, 2, rs[i][2], style1)

 for j in range(length3):
  for k in range(length4):
   if (str(rs3[k][0])==str(rs2[j][0])) and (str(rs3[k][1])==str(rs2[j][1])):
    sht.write(j+1, 4, rs3[k][2], style1)

直接進行寫入。先寫入最多的 ,然后寫入較少的。而較少的兩項寫入時,根據名字的對應,放在對應的位置。
這樣寫可以,但是有兩個問題:

1. 我們需要沒有數據的地方顯示為零。怎么判斷并寫入呢?是個問題,而且還挺麻煩的。

2. 我們需要數據完備,即,能夠保證最多的那項數據中的游戲就是所有了嗎?會不會每項數據對應的數據,都有自己獨有的游戲。

如果,最多的游戲條目數據中確實是沒有包含所有,這就是致命的錯誤了。數據缺失不是小事兒。

還不止這個,我們能夠保證,這個時候最多的,明天還是最多嗎?如果明天變成了最少,就會有很多數據因為名稱匹配不到而沒有寫入。

還是數據缺失,很致命的問題。

所以,這種方法,是有很多漏洞和缺陷的。不可行!

【建立字典DICT處理數據】

比較理想的處理方法,也是我們最終采用的方法,是將所有數據取出來放入一個字典中。

在放入的過程中,進行數據的整理。即,如果有這個游戲,就直接賦值。如果沒有,新建一個key,然后寫入。

字典建立好了,包含了所有的數據了,再進行寫入。是比較可靠的。

這種方法的關鍵點有兩個:

1. 如何在寫入的時候進行處理?

2. DICT建立好后,如何進行寫入?

我們一個一個說。

【如何在寫入的時候,建立DICT處理數據?】

先以比較簡單的線下數據寫入為例,進行說明。

def getInfo1(rs, rs2, rs3):
 dict={}
 for i in range(len(rs)):
  key=str(rs[i][0])
  value=rs[i][1]
  dict[key]=[value, 0, 0]

 dlist=list(dict.keys())
 for i in range(len(rs2)):
  key2=str(rs2[i][0])
  value2=rs2[i][1]
  if key2 in dlist:
   value=dict[key2][0]
  else:
   value=0
  dict[key2]=[value, value2, 0]

 dlist=list(dict.keys())
 for i in range(len(rs3)):
  key3=str(rs3[i][0])
  value3=rs3[i][1]
  if key3 in dlist:
   value=dict[key3][0]
   value2=dict[key3][1]
  else:
   value=0
   value2=0
  dict[key3]=[value, value2, value3]
 return dict

接收來的rs數據是list,一個游戲對應一個數據的那種。

我們這樣處理,將游戲名賦給key,將數據賦給value。循環遍歷,建立一個DICT出來。

接下來是關鍵的邏輯:如果有,直接賦值;如果沒有,新建一個key,再寫入。

而這個關鍵邏輯中更為關鍵的邏輯是,如何判斷原來的key中有沒有。

處理方法是這樣的

dlist=list(dict.keys())
for i in range(len(rs2)):

if key2 in dlist: value=dict[key2][0] else: value=0 dict[key2]=[value, value2, 0] 如果有的話,第一個value的值,從當前狀態的DICT中取。

如果沒有的話,value直接取0。

最后,直接

dict[key2]=[value, value2, 0]

即,key都是當下建立的。我們只需要在乎value的值就可以了。

【疑問】

這就有個疑問了,不會出現重復建立key的情況嗎?

不會。因為

dict[key2]=[value, value2, 0]

這句代碼,這個=的符號。本來就有賦值和新建兩重用法。如果沒有!就是新建,如果有了!就是改變。

只是改變的時候,我們需要把原來的值也帶進去罷了。這個原來的值是從已經有DICT中取到的。。。罷了。

接下來,更為復雜的代碼也就可以理解了。

dlist=list(dict.keys())
for i in range(len(rs3)):
 key3=str(rs3[i][0])
 value3=rs3[i][1]
 if key3 in dlist:
  value=dict[key3][0]
  value2=dict[key3][1]
 else:
  value=0
  value2=0
 dict[key3]=[value, value2, value3]
return dict

第三項數據出現時建立DICT的情況如上所示。

需要顧及到兩項已經寫好的數據,而已。

【如何將DICT寫入Excel表】

def writeInfo1(sht, dict):
 '''寫入線下具體數據'''
 dlist=list(dict.keys())
 for i in range(len(dlist)):
  sht.write(i+1, 0, str(dlist[i]).decode('utf-8'), style1)
  sht.write(i+1, 1, dict[dlist[i]][0], style1)
  sht.write(i+1, 2, dict[dlist[i]][1], style1)
  sht.write(i+1, 3, dict[dlist[i]][2], style1)

其實就是字典的層層剝取的方法。

關鍵就是拿到數據而已,拿到了直接寫入!

再稍復雜的DICT,處理線上數據時,我們的鍵有兩個,值有三個。

我們知道,字典這種數據類型,值可以為包含了多個數據的數組,但是鍵只能夠有一個,且不能為數組。

該怎么處理呢?我們只能將多個鍵合并為一個鍵,然后在寫入的時候拆開。

關鍵問題,就是合并和拆分。

【鍵的合并】

key=str(rs[i][0])+'--'+str(rs[i][1])

對,僅此而已。把兩個數據連到一起。合并為一個字符串。

【寫入時鍵的拆分】

sht.write(i+1, 0, str(dlist[i]).decode('utf-8').split('--')[0], style1)
sht.write(i+1, 1, str(dlist[i]).decode('utf-8').split('--')[1], style1)

用split函數。

split函數對字符串的拆分,拆分結果是數組。按數組編號來取分開的數據就可以了。

至此,這個需求的關鍵問題都已經說明完畢。

最后貼一份完整代碼如下。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

__author__ = "$Author: wangxin.xie$"
__version__ = "$Revision: 1.0 $"
__date__ = "$Date: 2018$"

###############################################################
#功能: 訂單情況相關報表
###############################################################
import sys
import datetime
import xlwt
from myyutil.DBUtil import DBUtil
reload(sys)
sys.setdefaultencoding('utf8')
#######################全局變量####################################

orderDBUtil = DBUtil('moyoyo_order')

fileDir = 'D://'
fileName = fileDir+'order_message_test2.xls'

style1 = xlwt.XFStyle()
font1 = xlwt.Font()
font1.height = 220
font1.name = 'SimSun'
style1.font = font1

##################################################################
def createTemplateExcel():
 '''創建Excel文件模板'''
 wb = xlwt.Workbook(encoding = "UTF-8", style_compression = True)
 sht0 = wb.add_sheet("線上", cell_overwrite_ok = True)
 sht0.col(0).width=4000
 sht0.write(0, 0, '游戲名稱', style1)
 sht0.write(0, 1, '渠道', style1)
 sht0.write(0, 2, '成交量', style1)
 sht0.write(0, 3, '下單量', style1)
 sht0.write(0, 4, '失敗量', style1)

 sht1 = wb.add_sheet("線下", cell_overwrite_ok = True)
 sht1.col(0).width=4000
 sht1.write(0, 0, '游戲名稱', style1)
 sht1.write(0, 1, '成交量', style1)
 sht1.write(0, 2, '下單量', style1)
 sht1.write(0, 3, '失敗量', style1)
 return wb

def genSuccessOrderOnline():
 sql = '''
  SELECT A.GAME_NAME,
  A.GOODS_NAME,
  COUNT(B.ORDER_ID)
  FROM moyoyo_order.BASE_INFO B
  INNER JOIN moyoyo_order.ACCOUNT_INFO A ON B.ORDER_ID = A.ORDER_ID
  INNER JOIN netgame_trade.GOODS G ON A.GOODS_ID = G.ID
  LEFT JOIN moyoyo_order.RELATION_INFO R ON B.ORDER_ID = R.PARENT_ORDER_ID
  WHERE B.COMPLETE_DATE >= DATE_SUB(NOW(), INTERVAL 7 DAY)
  AND B.COMPLETE_DATE < NOW()
  AND A.CS_ADMIN_ID != 241
  AND A.GOODS_ID != 1213
  AND G.GOODS_TYPE_ID != 6
  AND A.GOODS_IS_OFFLINE = 0
  AND A.IS_B2C IS NULL
  AND (
   (
    A.GOODS_ID IN (1240, 1241, 1608)
    AND B.SELLER_ID IN (
     SELECT MEMBER_ID
     FROM netgame_trade.B2C_MEMBER
    )
   ) OR (
    B.SELLER_ID NOT IN (
     SELECT MEMBER_ID
     FROM netgame_trade.B2C_MEMBER
    )
   )
  )
  AND R.PARENT_ORDER_ID IS NULL
  AND B.SELLER_ID NOT IN (693356, 14791127)
  AND B.STATUS = 1
  AND B.TRADE_STATUS = 4
  AND B.TYPE = 1
  GROUP BY A.GAME_ID, G.GOODS_CHANNEL_ID
  ORDER BY COUNT(B.ORDER_ID) DESC;
 '''
 rs = orderDBUtil.queryList(sql, ())
 if not rs: return None
 return rs

def genGenerateOrderOnline():
 sql = '''
  SELECT A.GAME_NAME,
  A.GOODS_NAME,
  COUNT(B.ORDER_ID)
  FROM moyoyo_order.BASE_INFO B
  INNER JOIN moyoyo_order.ACCOUNT_INFO A ON B.ORDER_ID = A.ORDER_ID
  INNER JOIN netgame_trade.GOODS G ON A.GOODS_ID = G.ID
  LEFT JOIN moyoyo_order.RELATION_INFO R ON B.ORDER_ID = R.PARENT_ORDER_ID
  WHERE B.CREATED_DATE >= DATE_SUB(NOW(), INTERVAL 7 DAY)
  AND B.CREATED_DATE < NOW()
  AND A.CS_ADMIN_ID != 241
  AND A.GOODS_ID != 1213
  AND G.GOODS_TYPE_ID != 6
  AND A.GOODS_IS_OFFLINE = 0
  AND A.IS_B2C IS NULL
  AND (
   (
    A.GOODS_ID IN (1240, 1241, 1608)
    AND B.SELLER_ID IN (
     SELECT MEMBER_ID
     FROM netgame_trade.B2C_MEMBER
    )
   ) OR (
    B.SELLER_ID NOT IN (
     SELECT MEMBER_ID
     FROM netgame_trade.B2C_MEMBER
    )
   )
  )
  AND R.PARENT_ORDER_ID IS NULL
  AND B.SELLER_ID NOT IN (693356, 14791127)
  AND B.STATUS = 1
  AND B.TYPE = 1
  GROUP BY A.GAME_ID, G.GOODS_CHANNEL_ID
  ORDER BY COUNT(B.ORDER_ID) DESC;
 '''
 rs = orderDBUtil.queryList(sql, ())
 if not rs: return None
 return rs

def genFailOrderOnline():
 sql = '''
  SELECT A.GAME_NAME,
  A.GOODS_NAME,
  COUNT(B.ORDER_ID)
  FROM moyoyo_order.BASE_INFO B
  INNER JOIN moyoyo_order.ACCOUNT_INFO A ON B.ORDER_ID = A.ORDER_ID
  INNER JOIN netgame_trade.GOODS G ON A.GOODS_ID = G.ID
  LEFT JOIN moyoyo_order.RELATION_INFO R ON B.ORDER_ID = R.PARENT_ORDER_ID
  WHERE B.COMPLETE_DATE >= DATE_SUB(NOW(), INTERVAL 7 DAY)
  AND B.COMPLETE_DATE < NOW()
  AND A.CS_ADMIN_ID != 241
  AND A.GOODS_ID != 1213
  AND G.GOODS_TYPE_ID != 6
  AND A.GOODS_IS_OFFLINE = 0
  AND A.IS_B2C IS NULL
  AND (
   (
    A.GOODS_ID IN (1240, 1241, 1608)
    AND B.SELLER_ID IN (
     SELECT MEMBER_ID
     FROM netgame_trade.B2C_MEMBER
    )
   ) OR (
    B.SELLER_ID NOT IN (
     SELECT MEMBER_ID
     FROM netgame_trade.B2C_MEMBER
    )
   )
  )
  AND R.PARENT_ORDER_ID IS NULL
  AND B.SELLER_ID NOT IN (693356, 14791127)
  AND B.STATUS = 1
  AND B.TRADE_STATUS = 5
  AND B.TYPE = 1
  GROUP BY A.GAME_ID, G.GOODS_CHANNEL_ID
  ORDER BY COUNT(B.ORDER_ID) DESC;
 '''
 rs = orderDBUtil.queryList(sql, ())
 if not rs: return None
 return rs

def genSuccessOrderOffline():
 sql = '''
  SELECT A.GAME_NAME,
  COUNT(B.ORDER_ID)
  FROM moyoyo_order.BASE_INFO B
  INNER JOIN moyoyo_order.ACCOUNT_INFO A ON B.ORDER_ID = A.ORDER_ID
  INNER JOIN netgame_trade.GOODS G ON A.GOODS_ID = G.ID
  LEFT JOIN moyoyo_order.RELATION_INFO R ON B.ORDER_ID = R.PARENT_ORDER_ID
  WHERE B.COMPLETE_DATE >= DATE_SUB(NOW(), INTERVAL 7 DAY)
  AND B.COMPLETE_DATE < NOW()
  AND A.CS_ADMIN_ID != 241
  AND A.GOODS_ID != 1213
  AND G.GOODS_TYPE_ID != 6
  AND A.GOODS_IS_OFFLINE = 1
  AND A.IS_B2C IS NULL
  AND (
   (
    A.GOODS_ID IN (1240, 1241, 1608)
    AND B.SELLER_ID IN (
     SELECT MEMBER_ID
     FROM netgame_trade.B2C_MEMBER
    )
   ) OR (
    B.SELLER_ID NOT IN (
     SELECT MEMBER_ID
     FROM netgame_trade.B2C_MEMBER
    )
   )
  )
  AND R.PARENT_ORDER_ID IS NULL
  AND B.SELLER_ID NOT IN (693356, 14791127)
  AND B.STATUS = 1
  AND B.TRADE_STATUS = 4
  AND B.TYPE = 1
  GROUP BY A.GAME_ID
  ORDER BY COUNT(B.ORDER_ID) DESC;
  '''
 rs = orderDBUtil.queryList(sql, ())
 if not rs: return None
 return rs

def genGenerateOrderOffline():
 sql = '''
  SELECT A.GAME_NAME,
  COUNT(B.ORDER_ID)
  FROM moyoyo_order.BASE_INFO B
  INNER JOIN moyoyo_order.ACCOUNT_INFO A ON B.ORDER_ID = A.ORDER_ID
  INNER JOIN netgame_trade.GOODS G ON A.GOODS_ID = G.ID
  LEFT JOIN moyoyo_order.RELATION_INFO R ON B.ORDER_ID = R.PARENT_ORDER_ID
  WHERE B.CREATED_DATE >= DATE_SUB(NOW(), INTERVAL 7 DAY)
  AND B.CREATED_DATE < NOW()
  AND A.CS_ADMIN_ID != 241
  AND A.GOODS_ID != 1213
  AND G.GOODS_TYPE_ID != 6
  AND A.GOODS_IS_OFFLINE = 1
  AND A.IS_B2C IS NULL
  AND (
   (
    A.GOODS_ID IN (1240, 1241, 1608)
    AND B.SELLER_ID IN (
     SELECT MEMBER_ID
     FROM netgame_trade.B2C_MEMBER
    )
   ) OR (
    B.SELLER_ID NOT IN (
     SELECT MEMBER_ID
     FROM netgame_trade.B2C_MEMBER
    )
   )
  )
  AND R.PARENT_ORDER_ID IS NULL
  AND B.SELLER_ID NOT IN (693356, 14791127)
  AND B.STATUS = 1
  AND B.TYPE = 1
  GROUP BY A.GAME_ID
  ORDER BY COUNT(B.ORDER_ID) DESC;
 '''
 rs = orderDBUtil.queryList(sql, ())
 if not rs: return None
 return rs

def genFailOrderOffline():
 sql = '''
  SELECT A.GAME_NAME,
  COUNT(B.ORDER_ID)
  FROM moyoyo_order.BASE_INFO B
  INNER JOIN moyoyo_order.ACCOUNT_INFO A ON B.ORDER_ID = A.ORDER_ID
  INNER JOIN netgame_trade.GOODS G ON A.GOODS_ID = G.ID
  LEFT JOIN moyoyo_order.RELATION_INFO R ON B.ORDER_ID = R.PARENT_ORDER_ID
  WHERE B.COMPLETE_DATE >= DATE_SUB(NOW(), INTERVAL 7 DAY)
  AND B.COMPLETE_DATE < NOW()
  AND A.CS_ADMIN_ID != 241
  AND A.GOODS_ID != 1213
  AND G.GOODS_TYPE_ID != 6
  AND A.GOODS_IS_OFFLINE = 1
  AND A.IS_B2C IS NULL
  AND (
   (
    A.GOODS_ID IN (1240, 1241, 1608)
    AND B.SELLER_ID IN (
     SELECT MEMBER_ID
     FROM netgame_trade.B2C_MEMBER
    )
   ) OR (
    B.SELLER_ID NOT IN (
     SELECT MEMBER_ID
     FROM netgame_trade.B2C_MEMBER
    )
   )
  )
  AND R.PARENT_ORDER_ID IS NULL
  AND B.SELLER_ID NOT IN (693356, 14791127)
  AND B.STATUS = 1
  AND B.TRADE_STATUS = 5
  AND B.TYPE = 1
  GROUP BY A.GAME_ID
  ORDER BY COUNT(B.ORDER_ID) DESC;
 '''
 rs = orderDBUtil.queryList(sql, ())
 if not rs: return None
 return rs

def getInfo0(rs, rs2, rs3):
 dict={}
 for i in range(len(rs)):
  key=str(rs[i][0])+'--'+str(rs[i][1])
  value=rs[i][2]
  dict[key]=[value, 0, 0]

 dlist=list(dict.keys())
 for i in range(len(rs2)):
  key2=str(rs2[i][0])+'--'+str(rs2[i][1])
  value2=rs2[i][2]
  if key2 in dlist:
   value=dict[key2][0]
  else:
   value=0
  dict[key2]=[value, value2, 0]

 dlist=list(dict.keys())
 for i in range(len(rs3)):
  key3=str(rs3[i][0])+'--'+str(rs3[i][1])
  value3=rs3[i][2]
  if key3 in dlist:
   value=dict[key3][0]
   value2=dict[key3][1]
  else:
   value=0
   value2=0
  dict[key3]=[value, value2, value3]
 return dict

def writeInfo0(sht, dict):
 '''寫入線上具體數據'''
 dlist=list(dict.keys())
 for i in range(len(dlist)):
  sht.write(i+1, 0, str(dlist[i]).decode('utf-8').split('--')[0], style1)
  sht.write(i+1, 1, str(dlist[i]).decode('utf-8').split('--')[1], style1)
  sht.write(i+1, 2, dict[dlist[i]][0], style1)
  sht.write(i+1, 3, dict[dlist[i]][1], style1)
  sht.write(i+1, 4, dict[dlist[i]][2], style1)

def getInfo1(rs, rs2, rs3):
 '''拿到線下具體數據'''
 dict={}
 for i in range(len(rs)):
  key=str(rs[i][0])
  value=rs[i][1]
  dict[key]=[value, 0, 0]

 dlist=list(dict.keys())
 for i in range(len(rs2)):
  key2=str(rs2[i][0])
  value2=rs2[i][1]
  if key2 in dlist:
   value=dict[key2][0]
  else:
   value=0
  dict[key2]=[value, value2, 0]

 dlist=list(dict.keys())
 for i in range(len(rs3)):
  key3=str(rs3[i][0])
  value3=rs3[i][1]
  if key3 in dlist:
   value=dict[key3][0]
   value2=dict[key3][1]
  else:
   value=0
   value2=0
  dict[key3]=[value, value2, value3]
 return dict

def writeInfo1(sht, dict):
 '''寫入線下具體數據'''
 dlist=list(dict.keys())
 for i in range(len(dlist)):
  sht.write(i+1, 0, str(dlist[i]).decode('utf-8'), style1)
  sht.write(i+1, 1, dict[dlist[i]][0], style1)
  sht.write(i+1, 2, dict[dlist[i]][1], style1)
  sht.write(i+1, 3, dict[dlist[i]][2], style1)


def writeExcel():
 '''寫報表'''
 wb = createTemplateExcel()

 rs=genSuccessOrderOnline()
 rs2=genGenerateOrderOnline()
 rs3=genFailOrderOnline()

 sheet0 = wb.get_sheet(0)
 dict0=getInfo0(rs, rs2, rs3)
 writeInfo0(sheet0, dict0)

 rs4=genSuccessOrderOffline()
 rs5=genGenerateOrderOffline()
 rs6=genFailOrderOffline()

 sheet1 = wb.get_sheet(1)
 dict1=getInfo1(rs4, rs5, rs6)
 writeInfo1(sheet1, dict1)

 wb.save(fileName)

def main():
 print "===%s start===%s"%(sys.argv[0], datetime.datetime.strftime(datetime.datetime.now(), "%Y-%m-%d %H:%M:%S"))
 writeExcel()
 print "===%s end===%s"%(sys.argv[0], datetime.datetime.strftime(datetime.datetime.now(), "%Y-%m-%d %H:%M:%S"))

if __name__ == '__main__':
 try:
  main()
 finally:
  if orderDBUtil: orderDBUtil.close()

以上是“Python如何建立Map寫Excel表”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

页游| 东莞市| 增城市| 甘孜县| 景德镇市| 濉溪县| 新和县| 诸城市| 自治县| 望奎县| 隆昌县| 江阴市| 洪雅县| 汉沽区| 兴化市| 平昌县| 灌云县| 安庆市| 井冈山市| 天峨县| 拉孜县| 滦平县| 涞源县| 靖宇县| 新巴尔虎左旗| 蓝山县| 湖口县| 青川县| 无棣县| 开封县| 抚松县| 南木林县| 洪雅县| 东丰县| 旬阳县| 乌兰察布市| 高台县| 兰西县| 云阳县| 前郭尔| 固阳县|