日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

使用python操作Excel——xlrd、xlwt、xlutils庫(kù)

 Four兄 2019-09-03

一、使用xlrd進(jìn)行讀操作

打開(kāi)workbook

  1. import xlrd
  2. wb = xlrd.open_workbook('mywokbook.xls')

檢查表單名字

wb.sheet_names()

獲取sheet表

  1. sh = wb.sheet_by_index(0) # 索引獲取
  2. sh = wb.sheet_by_name('Sheet01') # 名字獲取

遞歸打印所有行數(shù)據(jù)

  1. for n in range(sh.nrows):
  2. print sh.row_values(n)

返回第N列數(shù)據(jù)

first_column = sh.col_values(N)

通過(guò)索引讀取某單元格數(shù)據(jù)

cell_A1 = sh.cell(0, 0).value

二、使用xlwt進(jìn)行寫操作

初始化workbook對(duì)象,之后才能進(jìn)行寫入操作

  1. import xlwt
  2. wbk = xlwt.Workbook()
  3. sheet = wbk.add_sheet('sheet2')

寫入數(shù)據(jù)

sheet.write(0, 1, 'new text')

保存文件

wbk.save('new.xls')

注意:修改表單內(nèi)容,需要使用cell_overwrite_ok=True來(lái)創(chuàng)建worksheet

  1. sheet2 = wbk.add_sheet('sheet2', cell_overwrite_ok=True)
  2. sheet2.write(0, 0, 'text')
  3. sheet2.write(0, 0, 'altertext')

三、使用xlutils進(jìn)行修改操作

Python中一般使用xlrd(excel read)來(lái)讀取Excel文件,使用xlwt(excel write)來(lái)生成Excel文件(可以控制Excel中單元格的格式),需要注意的是,用xlrd讀 取excel是不能對(duì)其進(jìn)行操作的:xlrd.open_workbook()方法返回xlrd.Book類型,是只讀的,不能對(duì)其進(jìn)行操作。而 xlwt.Workbook()返回的xlwt.Workbook類型的save(filepath)方法可以保存excel文件。因此對(duì)于讀取和生成Excel文件都非常容易處理,但是對(duì)于已經(jīng)存在的Excel文件進(jìn)行修改就比較麻煩了。不過(guò),還有一個(gè)xlutils(依賴于xlrd和xlwt)提供復(fù)制excel文件內(nèi)容和修改文件的功能。其實(shí)際也只是在xlrd.Book和xlwt.Workbook之間建立了一個(gè)管道而已,如下圖:

xlutils.copy模塊的copy()方法實(shí)現(xiàn)這個(gè)功能

  1. from xlrd import open_workbook
  2. from xlutils.copy import copy
  3. rb = open_workbook('D:\\text.xls')
  4. # 通過(guò)get_sheet()獲取的sheet才有write()方法
  5. wb = copy(rb)
  6. ws = wb.get_sheet(0)
  7. ws.write(0, 0, 'changed!')
  8. wb.save('D:\\new.xls')

四、實(shí)際工作使用

將公司采購(gòu)單轉(zhuǎn)換成苗木平臺(tái)生成的Excel模板,采購(gòu)單總共76條數(shù)據(jù),模板14種苗木分類。

采購(gòu)數(shù)據(jù)樣式:

苗木平臺(tái)模板數(shù)據(jù)樣式:

生成的Excel表格

偷了個(gè)懶,比如時(shí)間數(shù)據(jù)的格式?jīng)]進(jìn)行設(shè)置,實(shí)際代碼如下

  1. import re
  2. import xlrd
  3. import xlwt
  4. from xlutils.copy import copy
  5. # 打開(kāi)sheet表
  6. def open_sheet(xl_name):
  7. xl = xlrd.open_workbook(xl_name)
  8. xl_sheet = xl.sheets()[0]
  9. return xl_sheet
  10. # 將原文件的采購(gòu)行插入匹配模板的采購(gòu)行
  11. def insert_mb(L, line_no, ws):
  12. for x in range(len(L)):
  13. one_tree = L[x]
  14. line_no += 1
  15. for i in range(mb_sheet.nrows):
  16. if i == 1:
  17. ws.write(line_no, i, tree_classify(one_tree[2]))
  18. if i == 2:
  19. ws.write(line_no, i, one_tree[2])
  20. if i == 3:
  21. ws.write(line_no, i, one_tree[7])
  22. if i == 4:
  23. ws.write(line_no, i, '43485')
  24. if i == 7:
  25. ws.write(line_no, i, tree_classify(str(one_tree[3])))
  26. if i == 8:
  27. ws.write(line_no, i, one_tree[4])
  28. if i == 9:
  29. ws.write(line_no, i, one_tree[5])
  30. if i == 12:
  31. ws.write(line_no, i, one_tree[-1])
  32. # 處理采購(gòu)項(xiàng)名稱
  33. def tree_classify(tree_name):
  34. s = re.sub('[A-Z]', '', tree_name)
  35. s = s.split('(')[0]
  36. return s
  37. # 查找模板中苗木某種分類的行號(hào)
  38. def search_no(sheet, class_no):
  39. for i in range(len(col_data)):
  40. if class_no == 1 and col_data[i] == '一':
  41. line_no = i
  42. elif class_no == 2 and col_data[i] == '二':
  43. line_no = i
  44. elif class_no == 3 and col_data[i] == '三':
  45. line_no = i
  46. elif class_no == 4 and col_data[i] == '四':
  47. line_no = i
  48. elif class_no == 5 and col_data[i] == '五':
  49. line_no = i
  50. elif class_no == 6 and col_data[i] == '六':
  51. line_no = i
  52. return line_no
  53. # 讀取所有的采購(gòu)項(xiàng)并按序號(hào)分類
  54. def load_class_no(class_no, sheet):
  55. L = []
  56. for i in range(4, sheet.nrows-6):
  57. one_tree = sheet.row_values(i)[:-8]
  58. if one_tree[0] == class_no:
  59. L.append(one_tree)
  60. return L
  61. # copy模板才可以修改
  62. def copy_alter(sheet):
  63. cp_sheet = copy(sheet)
  64. if __name__ == '__main__':
  65. order_name = '副本徑河項(xiàng)目苗木采購(gòu)審批表.xlsx'
  66. mb_name = 'Copy of importBuyList_ex.xls'
  67. tree_sheet = open_sheet(order_name)
  68. mb_sheet = open_sheet(mb_name)
  69. # 模板中第一列的數(shù)據(jù)
  70. col_data = mb_sheet.col_values(0)
  71. # copy后模板才可以修改
  72. mb = xlrd.open_workbook(mb_name)
  73. cp_sheet = copy(mb)
  74. wr_sheet = cp_sheet.get_sheet(0)
  75. for no in range(1, 7):
  76. class_trees = load_class_no(no, tree_sheet)
  77. line_no = search_no(wr_sheet, no)
  78. insert_mb(class_trees, line_no, wr_sheet)
  79. cp_sheet.save('new.xls')

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多