<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          超詳細Python處理Excel表格

          共 17430字,需瀏覽 35分鐘

           ·

          2021-10-23 02:52

          目錄

          • 一個Excel電子表格文檔稱為一個工作簿- 一個工作簿保存在一個擴展名為.xlsx的文件中- 一個工作簿可以包含多個表- 用戶當前查看的表(或關(guān)閉Excel前最后查看的表)稱為「活動表」- 在特定行和列的方格稱為「單元格、格子」

          「處理Excel表格需要用到openpyxl模塊,該模塊需要手動安裝pip install openpyxl

          xls和xlsx

          簡單來說:xls是excel2003及以前版本所生成的文件格式 xlsx是excel2007及以后版本所生成的文件格式 (excel 2007之后版本可以打開上述兩種格式,但是excel2013只能打開xls格式) 進一步的詳細解釋參見:

          基本操作

          用到的test.xlsx表格 在這里插入圖片描述

          1:用openpyxl模塊打開Excel文檔,查看所有sheet表

          openpyxl.load_workbook()函數(shù)接受文件名,返回一個workbook數(shù)據(jù)類型的值。這個workbook對象代表這個Excel文件,這個有點類似File對象代表一個打開的文本文件。

          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')?#?返回一個workbook數(shù)據(jù)類型的值
          print(workbook.sheetnames)?#?打印Excel表中的所有表


          #?結(jié)果:
          #?['Sheet1',?'Sheet2']

          2.1:通過sheet名稱獲取表格

          在第10行,使用workbook['Sheet1']獲取指定sheet表

          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          print(workbook.sheetnames)??#?打印Excel表中的所有表

          sheet?=?workbook['Sheet1']??#?獲取指定sheet表
          print(sheet)

          #?結(jié)果:
          #?['Sheet1',?'Sheet2']
          #?<Worksheet?"Sheet1">

          2.2:獲取活動表

          使用workbook.active獲取活動表

          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active?????#?獲取活動表
          print(sheet)

          #?結(jié)果:
          #?<Worksheet?"Sheet1">

          3.1:獲取表格的尺寸

          這里所說的尺寸大小,指的是excel表格中的數(shù)據(jù)有幾行幾列,針對的是不同的sheet而言 使用sheet.dimensions獲取表格的尺寸 下面打印的A1:B7是什么意思呢?

          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook['Sheet1']??#?獲取指定sheet表
          print(sheet.dimensions)?????#?獲取表格的尺寸大小

          #?結(jié)果:
          #?A1:B7

          4.1:獲取單元格中的數(shù)據(jù)

          「方法1:指定坐標的方式」 「sheet[“A1”]」

          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active?????#?獲取活動表
          #?print(sheet.dimensions)?????#?獲取表格的尺寸大小

          cell1?=?sheet['A1']?????????#?獲取A1單元格的數(shù)據(jù)
          cell2?=?sheet['B7']?????????#?獲取B7單元格的數(shù)據(jù)
          #?cell2?=?sheet['B7'].value??#?另一種寫法

          #?正確示范
          #?cell1.value獲取單元格A1中的值
          #?cell2.value獲取單元格B7中的值
          print(cell1.value,cell2.value)??#?姓名?18

          #?錯誤示范
          print(cell1,cell2)??#?<Cell?'Sheet1'.A1>?<Cell?'Sheet1'.B7>

          「方法2:指定行列的方式」 「sheet.cell(row=, column=)方式」

          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active?????#?獲取活動表
          #?print(sheet.dimensions)?????#?獲取表格的尺寸大小

          cell1?=?sheet.cell(row=1,column=1)?????????#?獲取第1行第1列的數(shù)據(jù)
          cell2?=?sheet.cell(row=3,column=2)?????????#?獲取第3行第4的數(shù)據(jù)

          #?正確示范
          #?cell1.value獲取單元格A1中的值
          #?cell2.value獲取單元格B7中的值
          print(cell1.value,cell2.value)??#?姓名?41

          4.2:獲取單元格的行、列、坐標

          • .row 獲取某個格子的行數(shù);- .columns 獲取某個格子的列數(shù);- .coordinate 獲取某個格子的坐標;
          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          #?print(sheet.dimensions)?????#?獲取表格的尺寸大小

          cell?=?sheet.cell(row=3,?column=2)??#?獲取第3行第4的數(shù)據(jù)

          print(cell.value,?cell.row,?cell.column,?cell.coordinate)

          '''
          結(jié)果:
          41?3?2?B3
          '
          ''

          5:獲取區(qū)間內(nèi)的數(shù)據(jù)

          獲取單行單列數(shù)據(jù)的時候,使用一層for循環(huán);獲取多行多列、指定區(qū)間的數(shù)據(jù)時,使用兩層for循環(huán)

          獲取指定區(qū)間的數(shù)據(jù)

          1. 使用sheet['A1:A5']拿到指定區(qū)間1. 使用兩個for循環(huán)拿到數(shù)據(jù)
          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print('當前活動表是:')
          print(sheet)

          cell?=?sheet['A1:A5']??#?獲取A1到A5的數(shù)據(jù)

          print(cell)

          #?打印A1到A5的數(shù)據(jù)
          for?i?in?cell:
          ????for?j?in?i:
          ????????print(j.value)

          #?結(jié)果:
          #?當前活動表是:
          #?<Worksheet?"Sheet1">
          #?((<Cell?'Sheet1'.A1>,),?(<Cell?'Sheet1'.A2>,),?(<Cell?'Sheet1'.A3>,),?(<Cell?'Sheet1'.A4>,),?(<Cell?'Sheet1'.A5>,))
          #?姓名
          #?張三
          #?李四
          #?王五
          #?趙六

          獲取指定行列的數(shù)據(jù)

          • sheet[“A”] — 獲取A列的數(shù)據(jù)- sheet[“A:C”] — 獲取A,B,C三列的數(shù)據(jù)- sheet[5] — 只獲取第5行的數(shù)據(jù) 下面的代碼,獲取一列數(shù)據(jù)的時候,使用一層for循環(huán)
          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print('當前活動表是:'?+?str(sheet))

          cell?=?sheet['2']??#?獲取第2行的數(shù)據(jù)

          #?打印A1到A5的數(shù)據(jù)
          for?i?in?cell:
          ????print(i.value)

          #?結(jié)果:
          #?當前活動表是:<Worksheet "Sheet1">
          #?張三
          #?74


          下面代碼,獲取兩列數(shù)據(jù)的時候,使用兩層for循環(huán)。注意到,兩列的結(jié)果打印到一起了,可讀性較差

          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print('當前活動表是:'?+?str(sheet))

          cell?=?sheet['A:B']??#?獲取AB列的數(shù)據(jù)

          #?打印AB列數(shù)據(jù)
          for?i?in?cell:
          ????for?j?in?i:
          ????????print(j.value)

          #?結(jié)果:
          #?當前活動表是:<Worksheet "Sheet1">
          #?姓名
          #?張三
          #?李四
          #?王五
          #?趙六
          #?alice
          #?bob
          #?年齡
          #?74
          #?41
          #?56
          #?12
          #?17
          #?18


          按行、列獲取值

          iter_rows():按行讀取 iter_cols():按列讀取

          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print('當前活動表是:'?+?str(sheet))

          #?按行獲取值
          print('按行獲取值')
          for?i?in?sheet.iter_rows(min_row=2,?max_row=5,?min_col=1,?max_col=2):
          ????for?j?in?i:
          ????????print(j.value)

          #?按列獲取值
          print('按列獲取值')
          for?i?in?sheet.iter_cols(min_row=2,?max_row=5,?min_col=1,?max_col=2):
          ????for?j?in?i:
          ????????print(j.value)

          #?結(jié)果:
          #?當前活動表是:<Worksheet "Sheet1">
          #?按行獲取值
          #?張三
          #?74
          #?李四
          #?41
          #?王五
          #?56
          #?趙六
          #?12
          #?按列獲取值
          #?張三
          #?李四
          #?王五
          #?趙六
          #?74
          #?41
          #?56
          #?12


          獲取活動表的行列數(shù)

          方法1:使用 sheet.max_row 獲取行數(shù) sheet.max_column 獲取列數(shù)

          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('2.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print('當前活動表是:'?+?str(sheet))

          rows?=?sheet.max_row????????#?獲取行數(shù)
          column?=?sheet.max_column???#?獲取列數(shù)

          print(rows)
          print(column)

          '''
          結(jié)果:
          當前活動表是:<Worksheet "Sheet1">
          381
          6
          '
          ''


          方法2:自己寫一個for循環(huán)

          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print('當前活動表是:'?+?str(sheet))

          row?=?[]
          column?=?[]
          #?獲取當前活動表有多少行
          for?i?in?sheet.rows:
          ????row.append(list(i))?????????#?i是元組類型,轉(zhuǎn)為列表

          #?獲取當前活動表有多少列
          for?i?in?sheet.columns:
          ????column.append(list(i))????#?i是元組類型,轉(zhuǎn)為列表

          print('行數(shù):'+str(len(row)))
          print('列數(shù):'+str(len(column)))

          '''
          結(jié)果:
          當前活動表是:<Worksheet "1號sheet">
          行數(shù):12
          列數(shù):3
          '
          ''


          操作

          創(chuàng)建新的excel

          第9行代碼用來指定創(chuàng)建的excel的活動表的名字:

          • 不寫第9行,默認創(chuàng)建sheet- 寫了第9行,創(chuàng)建指定名字的sheet表
          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.Workbook()
          sheet?=?workbook.active
          sheet.title?=?'1號sheet'
          workbook.save('1.xlsx')


          修改單元格、excel另存為

          第9行代碼,通過給單元格重新賦值,來修改單元格的值 第9行代碼的另一種寫法sheet['B1'].value = 'age' 第10行代碼,保存時如果使用原來的(第7行)名字,就直接保存;如果使用了別的名字,就會另存為一個新文件

          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          sheet['A1']?=?'name'
          workbook.save('test.xlsx')


          添加數(shù)據(jù)

          插入有效數(shù)據(jù)

          使用append()方法,在原來數(shù)據(jù)的后面,按行插入數(shù)據(jù)

          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print('當前活動表是:'?+?str(sheet))

          data?=?[
          ????['素子',23],
          ????['巴特',24],
          ????['塔奇克馬',2]
          ]
          for?row?in?data:
          ????sheet.append(row)???#?使用append插入數(shù)據(jù)
          workbook.save('test.xlsx')


          插入空行空列

          • insert_rows(idx=數(shù)字編號, amount=要插入的行數(shù)),插入的行數(shù)是在idx行數(shù)的下方插入- insert_cols(idx=數(shù)字編號, amount=要插入的列數(shù)),插入的位置是在idx列數(shù)的左側(cè)插入
          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print('當前活動表是:'?+?str(sheet))

          sheet.insert_rows(idx=3,?amount=2)
          sheet.insert_cols(idx=2,?amount=1)
          workbook.save('test.xlsx')


          刪除行、列

          • delete_rows(idx=數(shù)字編號, amount=要刪除的行數(shù))- delete_cols(idx=數(shù)字編號, amount=要刪除的列數(shù))
          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print('當前活動表是:'?+?str(sheet))

          sheet.delete_rows(idx=10)???????????#?刪除第10行
          sheet.delete_cols(idx=1,?amount=2)??#?刪除第1列,及往右共2列
          workbook.save('test.xlsx')


          移動指定區(qū)間的單元格(move_range)

          move_range(“數(shù)據(jù)區(qū)域”,rows=,cols=):正整數(shù)為向下或向右、負整數(shù)為向左或向上

          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print('當前活動表是:'?+?str(sheet))

          sheet.move_range('D11:F12',rows=0,cols=-3)??#?移動D11到F12構(gòu)成的矩形格子
          workbook.save('test.xlsx')


          字母列號與數(shù)字列號之間的轉(zhuǎn)換

          核心代碼

          from?openpyxl.utils?import?get_column_letter,?column_index_from_string

          #?根據(jù)列的數(shù)字返回字母
          print(get_column_letter(2))??#?B
          #?根據(jù)字母返回列的數(shù)字
          print(column_index_from_string('D'))??#?4


          舉個例子:

          import?os
          import?openpyxl
          from?openpyxl.utils?import?get_column_letter,?column_index_from_string

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('2.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print('當前活動表是:'?+?str(sheet))

          #?根據(jù)列的數(shù)字返回字母
          print(get_column_letter(2))??#?B
          #?根據(jù)字母返回列的數(shù)字
          print(column_index_from_string('D'))??#?4


          字體樣式

          查看字體樣式

          import?os
          import?openpyxl
          import?openpyxl.styles

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print('當前活動表是:'+str(sheet))

          cell?=?sheet['A1']
          font?=?cell.font
          print('當前單元格的字體樣式是')
          print(font.name,?font.size,?font.bold,?font.italic,?font.color)

          '''
          當前活動表是:<Worksheet "1號sheet">
          當前單元格的字體樣式是
          等線?11.0?False?False?<openpyxl.styles.colors.Color?object>
          Parameters:
          rgb=None,?indexed=None,?auto=None,?theme=1,?tint=0.0,?type='
          theme'
          '
          ''


          修改字體樣式

          「openpyxl.styles.Font(name=字體名稱,size=字體大小,bold=是否加粗,italic=是否斜體,color=字體顏色)」 其中,字體顏色中的color是RGB的16進制表示

          import?os
          import?openpyxl
          import?openpyxl.styles

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print(sheet)

          cell?=?sheet['A1']
          cell.font?=?openpyxl.styles.Font(name="微軟雅黑",?size=20,?bold=True,?italic=True,?color="FF0000")

          workbook.save('test.xlsx')


          再者,可以使用for循環(huán),修改多行多列的數(shù)據(jù),在介紹了獲取的方法

          import?os
          import?openpyxl
          import?openpyxl.styles

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print(sheet)

          cell?=?sheet['A']
          for?i?in?cell:
          ????i.font?=?openpyxl.styles.Font(name="微軟雅黑",?size=20,?bold=True,?italic=True,?color="FF0000")

          workbook.save('test.xlsx')


          設置對齊格式

          Alignment(horizontal=水平對齊模式,vertical=垂直對齊模式,text_rotation=旋轉(zhuǎn)角度,wrap_text=是否自動換行) 水平對齊:‘distributed’,‘justify’,‘center’,‘left’, ‘centerContinuous’,'right,‘general’ 垂直對齊:‘bottom’,‘distributed’,‘justify’,‘center’,‘top’

          import?os
          import?openpyxl.styles

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print('當前活動表是:'?+?str(sheet))

          cell?=?sheet['A1']
          alignment?=?openpyxl.styles.Alignment(horizontal="center",?vertical="center",?text_rotation=0,?wrap_text=True)
          cell.alignment?=?alignment

          workbook.save('test.xlsx')


          當然,你仍舊可以調(diào)用for循環(huán)來實現(xiàn)對多行多列的操作

          import?os
          import?openpyxl.styles

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print('當前活動表是:'?+?str(sheet))

          cell?=?sheet['A']
          alignment?=?openpyxl.styles.Alignment(horizontal="center",?vertical="center",?text_rotation=0,?wrap_text=True)
          for?i?in?cell:
          ????i.alignment?=?alignment
          ????
          workbook.save('test.xlsx')



          設置行高列寬

          「設置行列的寬高:」

          • row_dimensions[行編號].height = 行高- column_dimensions[列編號].width = 列寬
          import?os
          import?openpyxl
          import?openpyxl.styles

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print('當前活動表是:'?+?str(sheet))

          #?設置第1行的高度
          sheet.row_dimensions[1].height?=?50
          #?設置B列的卷度
          sheet.column_dimensions['B'].width?=?20

          workbook.save('test.xlsx')


          「設置所有單元格」 (顯示的結(jié)果是設置所有,有數(shù)據(jù)的單元格的)

          from?openpyxl?import?load_workbook
          from?openpyxl.utils?import?get_column_letter
          import?os

          os.chdir(r'C:\Users\asuka\Desktop')

          workbook?=?load_workbook('1.xlsx')
          print(workbook.sheetnames)??#?打印所有的sheet表
          ws?=?workbook[workbook.sheetnames[0]]??#?選中最左側(cè)的sheet表

          width?=?2.0??#?設置寬度
          height?=?width?*?(2.2862?/?0.3612)??#?設置高度

          print("row:",?ws.max_row,?"column:",?ws.max_column)??#?打印行數(shù),列數(shù)
          for?i?in?range(1,?ws.max_row?+?1):
          ????ws.row_dimensions[i].height?=?height
          for?i?in?range(1,?ws.max_column?+?1):
          ????ws.column_dimensions[get_column_letter(i)].width?=?width

          workbook.save('test.xlsx')


          合并、拆分單元格

          合并單元格有下面兩種方法,需要注意的是,如果要合并的格子中有數(shù)據(jù),即便python沒有報錯,Excel打開的時候也會報錯。

          • merge_cells(待合并的格子編號)- merge_cells(start_row=起始行號,start_column=起始列號,end_row=結(jié)束行號,end_column=結(jié)束列號)
          import?os
          import?openpyxl
          import?openpyxl.styles

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print('當前活動表是:'?+?str(sheet))

          #?方法1:
          sheet.merge_cells('A12:B13')
          #?方法2:
          sheet.merge_cells(start_row=12,?start_column=3,?end_row=13,?end_column=4)

          #?加一個居中對齊
          cell?=?sheet['A12']
          alignment?=?openpyxl.styles.Alignment(horizontal="center",?vertical="center",?text_rotation=0,?wrap_text=True)
          cell.alignment?=?alignment

          cell?=?sheet['C12']
          alignment?=?openpyxl.styles.Alignment(horizontal="center",?vertical="center",?text_rotation=0,?wrap_text=True)
          cell.alignment?=?alignment

          workbook.save('test.xlsx')


          「拆分單元格的方法同上」

          • unmerge_cells(待合并的格子編號)- unmerge_cells(start_row=起始行號,start_column=起始列號,end_row=結(jié)束行號,end_column=結(jié)束列號)

          sheet表

          創(chuàng)建新的sheet(create_sheet)

          create_sheet(“新的sheet名”):創(chuàng)建一個新的sheet表

          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print('當前活動表是:'?+?str(sheet))

          workbook.create_sheet('3號sheet')????#?創(chuàng)建新的sheet表
          print(workbook.sheetnames)????#?查看所有的sheet表
          workbook.save('test.xlsx')

          '''
          當前活動表是:<Worksheet "Sheet1">
          ['
          Sheet1',?'Sheet2',?'3號sheet']
          '
          ''


          修改sheet名字(title)

          第11行,使用title修改sheet表的名字

          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print('當前活動表是:'?+?str(sheet))

          sheet.title?=?'1號sheet'??#?修改sheet表
          workbook.save('test.xlsx')


          復制sheet表(copy_worksheet)

          在“操作”>“修改單元格、excel另存為”中提到了另存為,其實復制sheet表就是一個另存為的過程,你要是在12行代碼保存的時候使用第7行的文件名,那么復制的sheet表就保存到自己身上,內(nèi)容跟copy.xlsx一樣。

          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print('當前活動表是:'?+?str(sheet))

          workbook.copy_worksheet(sheet)?#?復制sheet表
          workbook.save('copy.xlsx')


          刪除sheet表(remove)

          remove(“sheet名”):刪除某個sheet表 要刪除某sheet表,需要激活這個sheet表,即:將其作為活動表(關(guān)于活動表的定義請看前面文章開頭寫的有)下面8~11行代碼展示了原始活動表與手動更換活動表,第13行代碼刪掉活動表

          import?os
          import?openpyxl

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)??#?修改工作路徑

          workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個workbook數(shù)據(jù)類型的值
          sheet?=?workbook.active??#?獲取活動表
          print('當前活動表是:'?+?str(sheet))
          sheet?=?workbook['3號sheet']?????#?手動切換到要刪除的sheet表,一旦切換,這張表就是活動表
          print('當前活動表是:'?+?str(sheet))

          workbook.remove(sheet)??#?刪除當前活動表
          print(workbook.sheetnames)
          workbook.save('test.xlsx')

          '''
          當前活動表是:<Worksheet "Sheet1">
          當前活動表是:<Worksheet "3號sheet">
          ['
          Sheet1',?'Sheet2']
          '
          ''


          操作多個Excel表

          其實想用openpyxl玩這個,但是網(wǎng)上用的是別的庫,就有點無語,以后熟練的話在自己寫一個函數(shù)實現(xiàn)吧

          背景知識

          numpy與pandas

          NumPy是 Python 語言的一個擴展程序庫,支持大量的維度數(shù)組與矩陣運算,此外也針對數(shù)組運算提供大量的數(shù)學函數(shù)庫;pandas 是基于NumPy 的一種工具,該工具是為解決數(shù)據(jù)分析任務而創(chuàng)建的,我們需要利用Pandas進行Excel的合并

          1. 下面的代碼生成了一個5行3列的包含15個字符的嵌套列表 (注意,第4行代碼:15是等于3「5的,如果是15對應4」3,或者16對應5*3都會報錯) (注意,第5行代碼,雖然5行3列是15個數(shù)據(jù),但是可以指定數(shù)據(jù)從1開頭,到16結(jié)束)
          import?numpy?as?np
          import?pandas?as?pd

          xx?=?np.arange(15).reshape(5,?3)
          yy?=?np.arange(1,?16).reshape(5,?3)

          print(xx)
          print(yy)

          '''
          [[?0??1??2]
          ?[?3??4??5]
          ?[?6??7??8]
          ?[?9?10?11]
          ?[12?13?14]]
          [[?1??2??3]
          ?[?4??5??6]
          ?[?7??8??9]
          ?[10?11?12]
          ?[13?14?15]]
          '
          ''


          1. 添加表頭 使用pandas庫的DataFrame來添加表頭。關(guān)于打印的結(jié)果,把最左側(cè)的一列去掉之后會發(fā)現(xiàn)結(jié)果很和諧,這是因為最左側(cè)的一列代表行號。此時xx變量的類型是
          import?numpy?as?np
          import?pandas?as?pd

          xx?=?np.arange(15).reshape(5,?3)
          yy?=?np.arange(1,?16).reshape(5,?3)
          xx?=?pd.DataFrame(xx,?columns=["語文",?"數(shù)學",?"外語"])
          yy?=?pd.DataFrame(yy,?columns=["語文",?"數(shù)學",?"外語"])
          print(xx)
          print(yy)

          '''
          結(jié)果:
          ???語文??數(shù)學??外語
          0???0???1???2
          1???3???4???5
          2???6???7???8
          3???9??10??11
          4??12??13??14
          ???語文??數(shù)學??外語
          0???1???2???3
          1???4???5???6
          2???7???8???9
          3??10??11??12
          4??13??14??15
          '
          ''


          1. 合并兩個矩陣pd.concat(list)括號中傳入的是一個列表;ignore_list=True表示忽略原有索引,重新生成一組新的索引;或者直接可以寫成z = pd.concat([xx,yy],ignore_list=True);不知道為什么失敗,暫時擱淺

          xlsxwriter

          xlsxwriter模塊一般是和xlrd模塊搭配使用的, xlsxwriter:負責寫入數(shù)據(jù), xlrd:負責讀取數(shù)據(jù)。

          1. 「創(chuàng)建一個工作簿」
          import?xlsxwriter
          import?os

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)

          #?這一步相當于創(chuàng)建了一個新的"工作簿";
          #?"demo.xlsx"文件不存在,表示新建"工作簿";
          #?"demo.xlsx"文件存在,表示新建"工作簿"覆蓋原有的"工作簿";
          workbook?=?xlsxwriter.Workbook("demo.xlsx")

          # close是將"工作簿"保存關(guān)閉,這一步必須有,否則創(chuàng)建的文件無法顯示出來。
          workbook.close()


          1. 「創(chuàng)建sheet表」
          import?xlsxwriter
          import?os

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)

          workbook?=?xlsxwriter.Workbook("cc.xlsx")???#?創(chuàng)建一個名為cc.xlsx的文件
          worksheet?=?workbook.add_worksheet("2018年銷售量")??#?創(chuàng)建一個名為“2018年銷售量”的sheet表

          workbook.close()


          1. 「寫入數(shù)據(jù)」
          import?xlsxwriter
          import?os

          path?=?r"C:\Users\asuka\Desktop"
          os.chdir(path)

          #?創(chuàng)建一個名為【demo.xlsx】工作簿;
          workbook?=?xlsxwriter.Workbook("demo.xlsx")

          #?創(chuàng)建一個名為【2018年銷售量】工作表;
          worksheet?=?workbook.add_worksheet("2018年銷售量")

          #?使用write_row方法,為【2018年銷售量】工作表,添加一個表頭;
          headings?=?['產(chǎn)品',?'銷量',?"單價"]
          worksheet.write_row('A1',?headings)
          #?使用write方法,在【2018年銷售量】工作表中插入一條數(shù)據(jù);
          # write語法格式:worksheet.write(行,列,數(shù)據(jù))

          data?=?["蘋果",?500,?8.9]
          for?i?in?range(len(headings)):
          ????worksheet.write(1,?i,?data[i])

          workbook.close()



          瀏覽 71
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99久久精品人妻无码一区二区蜜桃 | 欧美三级韩国三级日本三级在线观看 | 日比视频网站 | 国产大尺度视频 | 午夜成人性爱 |