1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        超詳細(xì)Python處理Excel表格

        共 17430字,需瀏覽 35分鐘

         ·

        2021-10-23 02:52

        目錄

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

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

        xls和xlsx

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

        基本操作

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

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

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

        import?os
        import?openpyxl

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

        workbook?=?openpyxl.load_workbook('test.xlsx')?#?返回一個(gè)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')??#?返回一個(gè)workbook數(shù)據(jù)類型的值
        print(workbook.sheetnames)??#?打印Excel表中的所有表

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

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

        2.2:獲取活動(dòng)表

        使用workbook.active獲取活動(dòng)表

        import?os
        import?openpyxl

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

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

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

        3.1:獲取表格的尺寸

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

        import?os
        import?openpyxl

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

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

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

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

        「方法1:指定坐標(biāo)的方式」 「sheet[“A1”]」

        import?os
        import?openpyxl

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

        workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個(gè)workbook數(shù)據(jù)類型的值
        sheet?=?workbook.active?????#?獲取活動(dòng)表
        #?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

        #?錯(cuò)誤示范
        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')??#?返回一個(gè)workbook數(shù)據(jù)類型的值
        sheet?=?workbook.active?????#?獲取活動(dòng)表
        #?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:獲取單元格的行、列、坐標(biāo)

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

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

        workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個(gè)workbook數(shù)據(jù)類型的值
        sheet?=?workbook.active??#?獲取活動(dòng)表
        #?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ù)的時(shí)候,使用一層for循環(huán);獲取多行多列、指定區(qū)間的數(shù)據(jù)時(shí),使用兩層for循環(huán)

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

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

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

        workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個(gè)workbook數(shù)據(jù)類型的值
        sheet?=?workbook.active??#?獲取活動(dòng)表
        print('當(dāng)前活動(dòng)表是:')
        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é)果:
        #?當(dāng)前活動(dòng)表是:
        #?<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ù)的時(shí)候,使用一層for循環(huán)
        import?os
        import?openpyxl

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

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

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

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

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


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

        import?os
        import?openpyxl

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

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

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

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

        #?結(jié)果:
        #?當(dāng)前活動(dòng)表是:<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')??#?返回一個(gè)workbook數(shù)據(jù)類型的值
        sheet?=?workbook.active??#?獲取活動(dòng)表
        print('當(dāng)前活動(dòng)表是:'?+?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é)果:
        #?當(dāng)前活動(dòng)表是:<Worksheet "Sheet1">
        #?按行獲取值
        #?張三
        #?74
        #?李四
        #?41
        #?王五
        #?56
        #?趙六
        #?12
        #?按列獲取值
        #?張三
        #?李四
        #?王五
        #?趙六
        #?74
        #?41
        #?56
        #?12


        獲取活動(dòng)表的行列數(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')??#?返回一個(gè)workbook數(shù)據(jù)類型的值
        sheet?=?workbook.active??#?獲取活動(dòng)表
        print('當(dāng)前活動(dòng)表是:'?+?str(sheet))

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

        print(rows)
        print(column)

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


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

        import?os
        import?openpyxl

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

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

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

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

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

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


        操作

        創(chuàng)建新的excel

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

        • 不寫第9行,默認(rèn)創(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號(hào)sheet'
        workbook.save('1.xlsx')


        修改單元格、excel另存為

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

        import?os
        import?openpyxl

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

        workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個(gè)workbook數(shù)據(jù)類型的值
        sheet?=?workbook.active??#?獲取活動(dòng)表
        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')??#?返回一個(gè)workbook數(shù)據(jù)類型的值
        sheet?=?workbook.active??#?獲取活動(dòng)表
        print('當(dāng)前活動(dòng)表是:'?+?str(sheet))

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


        插入空行空列

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

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

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

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


        刪除行、列

        • delete_rows(idx=數(shù)字編號(hào), amount=要?jiǎng)h除的行數(shù))- delete_cols(idx=數(shù)字編號(hào), amount=要?jiǎng)h除的列數(shù))
        import?os
        import?openpyxl

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

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

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


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

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

        import?os
        import?openpyxl

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

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

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


        字母列號(hào)與數(shù)字列號(hào)之間的轉(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


        舉個(gè)例子:

        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')??#?返回一個(gè)workbook數(shù)據(jù)類型的值
        sheet?=?workbook.active??#?獲取活動(dòng)表
        print('當(dāng)前活動(dòng)表是:'?+?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')??#?返回一個(gè)workbook數(shù)據(jù)類型的值
        sheet?=?workbook.active??#?獲取活動(dòng)表
        print('當(dāng)前活動(dòng)表是:'+str(sheet))

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

        '''
        當(dāng)前活動(dòng)表是:<Worksheet "1號(hào)sheet">
        當(dāng)前單元格的字體樣式是
        等線?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進(jìn)制表示

        import?os
        import?openpyxl
        import?openpyxl.styles

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

        workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個(gè)workbook數(shù)據(jù)類型的值
        sheet?=?workbook.active??#?獲取活動(dòng)表
        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')??#?返回一個(gè)workbook數(shù)據(jù)類型的值
        sheet?=?workbook.active??#?獲取活動(dòng)表
        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')


        設(shè)置對(duì)齊格式

        Alignment(horizontal=水平對(duì)齊模式,vertical=垂直對(duì)齊模式,text_rotation=旋轉(zhuǎn)角度,wrap_text=是否自動(dòng)換行) 水平對(duì)齊:‘distributed’,‘justify’,‘center’,‘left’, ‘centerContinuous’,'right,‘general’ 垂直對(duì)齊:‘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')??#?返回一個(gè)workbook數(shù)據(jù)類型的值
        sheet?=?workbook.active??#?獲取活動(dòng)表
        print('當(dāng)前活動(dòng)表是:'?+?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')


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

        import?os
        import?openpyxl.styles

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

        workbook?=?openpyxl.load_workbook('test.xlsx')??#?返回一個(gè)workbook數(shù)據(jù)類型的值
        sheet?=?workbook.active??#?獲取活動(dòng)表
        print('當(dāng)前活動(dòng)表是:'?+?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')



        設(shè)置行高列寬

        「設(shè)置行列的寬高:」

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

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

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

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

        workbook.save('test.xlsx')


        「設(shè)置所有單元格」 (顯示的結(jié)果是設(shè)置所有,有數(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??#?設(shè)置寬度
        height?=?width?*?(2.2862?/?0.3612)??#?設(shè)置高度

        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沒有報(bào)錯(cuò),Excel打開的時(shí)候也會(huì)報(bào)錯(cuò)。

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

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

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

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

        #?加一個(gè)居中對(duì)齊
        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(待合并的格子編號(hào))- unmerge_cells(start_row=起始行號(hào),start_column=起始列號(hào),end_row=結(jié)束行號(hào),end_column=結(jié)束列號(hào))

        sheet表

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

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

        import?os
        import?openpyxl

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

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

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

        '''
        當(dāng)前活動(dòng)表是:<Worksheet "Sheet1">
        ['
        Sheet1',?'Sheet2',?'3號(hào)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')??#?返回一個(gè)workbook數(shù)據(jù)類型的值
        sheet?=?workbook.active??#?獲取活動(dòng)表
        print('當(dāng)前活動(dòng)表是:'?+?str(sheet))

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


        復(fù)制sheet表(copy_worksheet)

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

        import?os
        import?openpyxl

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

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

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


        刪除sheet表(remove)

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

        import?os
        import?openpyxl

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

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

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

        '''
        當(dāng)前活動(dòng)表是:<Worksheet "Sheet1">
        當(dāng)前活動(dòng)表是:<Worksheet "3號(hào)sheet">
        ['
        Sheet1',?'Sheet2']
        '
        ''


        操作多個(gè)Excel表

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

        背景知識(shí)

        numpy與pandas

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

        1. 下面的代碼生成了一個(gè)5行3列的包含15個(gè)字符的嵌套列表 (注意,第4行代碼:15是等于3「5的,如果是15對(duì)應(yīng)4」3,或者16對(duì)應(yīng)5*3都會(huì)報(bào)錯(cuò)) (注意,第5行代碼,雖然5行3列是15個(gè)數(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è)的一列去掉之后會(huì)發(fā)現(xiàn)結(jié)果很和諧,這是因?yàn)樽钭髠?cè)的一列代表行號(hào)。此時(shí)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ù)學(xué)",?"外語"])
        yy?=?pd.DataFrame(yy,?columns=["語文",?"數(shù)學(xué)",?"外語"])
        print(xx)
        print(yy)

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


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

        xlsxwriter

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

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

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

        #?這一步相當(dāng)于創(chuàng)建了一個(gè)新的"工作簿";
        #?"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)建一個(gè)名為cc.xlsx的文件
        worksheet?=?workbook.add_worksheet("2018年銷售量")??#?創(chuàng)建一個(gè)名為“2018年銷售量”的sheet表

        workbook.close()


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

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

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

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

        #?使用write_row方法,為【2018年銷售量】工作表,添加一個(gè)表頭;
        headings?=?['產(chǎn)品',?'銷量',?"單價(jià)"]
        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
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            无码成人视频 | 日本泡妞xxxxxxxx69 | 97在线无码精品秘 原神 | 黑人无码在线 | 高清视频一区二区 | 欧美一级片观看 | 亚洲中文在线视频 | 欧美乱大交XXXXX潮喷 | 少妇浪妇荡欲黄蓉奶汁 | 操B欧美 综合色图 |