>>?from?ope..." />
<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>

          5分鐘掌握 openpyxl 操作

          共 3958字,需瀏覽 8分鐘

           ·

          2020-09-04 14:35

          各種數(shù)據(jù)需要導(dǎo)入Excel?多個(gè)Excel要合并?目前,Python處理Excel文件有很多庫(kù),openpyxl算是其中功能和性能做的比較好的一個(gè)。接下來(lái)我將為大家介紹各種Excel操作。

          打開(kāi)Excel文件

          新建一個(gè)Excel文件

          ????>>>?from?openpyxl?import?Workbook
          ????>>>?wb?=?Workbook()

          打開(kāi)現(xiàn)有Excel文件

          ????>>>?from?openpyxl?import?load_workbook
          ????>>>?wb2?=?load_workbook('test.xlsx')

          打開(kāi)大文件時(shí),根據(jù)需求使用只讀或只寫(xiě)模式減少內(nèi)存消耗。

          wb?=?load_workbook(filename='large_file.xlsx',?read_only=True)

          wb?=?Workbook(write_only=True)

          獲取、創(chuàng)建工作表

          獲取當(dāng)前活動(dòng)工作表:

          ????>>>?ws?=?wb.active

          創(chuàng)建新的工作表:

          ????>>>?ws1?=?wb.create_sheet("Mysheet")?#?insert?at?the?end?(default)
          ????#?or
          ????>>>?ws2?=?wb.create_sheet("Mysheet",?0)?#?insert?at?first?position
          ????#?or
          ????>>>?ws3?=?wb.create_sheet("Mysheet",?-1)?#?insert?at?the?penultimate?position

          使用工作表名字獲取工作表:

          ????>>>?ws3?=?wb["New?Title"]

          獲取所有的工作表名稱:

          ????>>>?print(wb.sheetnames)
          ????['Sheet2',?'New?Title',?'Sheet1']
          使用for循環(huán)遍歷所有的工作表:

          ????>>>?for?sheet?in?wb:
          ????...?????print(sheet.title)

          保存

          保存到流中在網(wǎng)絡(luò)中使用:

          ????>>>?from?tempfile?import?NamedTemporaryFile
          ????>>>?from?openpyxl?import?Workbook
          ????>>>?wb?=?Workbook()
          ????>>>?with?NamedTemporaryFile()?as?tmp:
          ????????????wb.save(tmp.name)
          ????????????tmp.seek(0)
          ????????????stream?=?tmp.read()
          保存到文件:

          ????>>>?wb?=?Workbook()
          ????>>>?wb.save('balances.xlsx')
          保存為模板:

          ????>>>?wb?=?load_workbook('document.xlsx')
          ????>>>?wb.template?=?True
          ????>>>?wb.save('document_template.xltx')

          單元格

          單元格位置作為工作表的鍵直接讀取:

          ????>>>?c?=?ws['A4']

          為單元格賦值:

          ????>>>?ws['A4']?=?4
          ????>>>?c.value?=?'hello,?world'

          多個(gè)單元格 可以使用切片訪問(wèn)單元格區(qū)域:

          ????>>>?cell_range?=?ws['A1':'C2']

          使用數(shù)值格式:

          ????>>>?#?set?date?using?a?Python?datetime
          ????>>>?ws['A1']?=?datetime.datetime(2010,?7,?21)
          ????>>>
          ????>>>?ws['A1'].number_format
          ????'yyyy-mm-dd?h:mm:ss'

          使用公式:

          ????>>>?#?add?a?simple?formula
          ????>>>?ws["A1"]?=?"=SUM(1,?1)"

          合并單元格時(shí),除左上角單元格外,所有單元格都將從工作表中刪除:

          ????>>>?ws.merge_cells('A2:D2')
          ????>>>?ws.unmerge_cells('A2:D2')
          ????>>>
          ????>>>?#?or?equivalently
          ????>>>?ws.merge_cells(start_row=2,?start_column=1,?end_row=4,?end_column=4)
          ????>>>?ws.unmerge_cells(start_row=2,?start_column=1,?end_row=4,?end_column=4)?

          行、列

          可以單獨(dú)指定行、列、或者行列的范圍:

          ????>>>?colC?=?ws['C']
          ????>>>?col_range?=?ws['C:D']
          ????>>>?row10?=?ws[10]
          ????>>>?row_range?=?ws[5:10]

          可以使用Worksheet.iter_rows()方法遍歷行:

          ????>>>?for?row?in?ws.iter_rows(min_row=1,?max_col=3,?max_row=2):
          ????...????for?cell?in?row:
          ????...????????print(cell)
          ????
          ????
          ????
          ????
          ????
          ????

          同樣的Worksheet.iter_cols()方法將遍歷列:

          ????>>>?for?col?in?ws.iter_cols(min_row=1,?max_col=3,?max_row=2):
          ????...?????for?cell?in?col:
          ????...?????????print(cell)
          ????
          ????
          ????
          ????
          ????
          ????

          遍歷文件的所有行或列,可以使用Worksheet.rows屬性:

          ????>>>?ws?=?wb.active
          ????>>>?ws['C9']?=?'hello?world'
          ????>>>?tuple(ws.rows)
          ????((,?,?),
          ????(,?,?),
          ????(,?,?),
          ????(,?,?),
          ????(,?,?),
          ????(,?,?),
          ????(,?,?),
          ????(,?,?),
          ????(,?,?))

          Worksheet.columns屬性:

          ????>>>?tuple(ws.columns)
          ????((,
          ????,
          ????,
          ????,
          ????,
          ????,
          ????...
          ????,
          ????,
          ????),
          ????(,
          ????,
          ????,
          ????,
          ????,
          ????,
          ????,
          ????,
          ????))

          使用Worksheet.append()或者迭代使用Worksheet.cell()新增一行數(shù)據(jù):

          ????>>>?for?row?in?range(1,?40):
          ????...?????ws1.append(range(600))

          ????>>>?for?row?in?range(10,?20):
          ????...?????for?col?in?range(27,?54):
          ????...?????????_?=?ws3.cell(column=col,?row=row,?value="{0}".format(get_column_letter(col)))

          插入操作比較麻煩。可以使用Worksheet.insert_rows()插入一行或幾行:

          ?????>>>?from?openpyxl.utils?import?get_column_letter
          ?????>>>?ws.insert_rows(7)?
          ?????>>>?row7?=?ws[7]
          ?????>>>?for?col?in?range(27,?54):
          ????...?????????_?=?ws3.cell(column=col,?row=7,?value="{0}".format(get_column_letter(col)))

          Worksheet.insert_cols()操作類似。Worksheet.delete_rows()Worksheet.delete_cols()用來(lái)批量刪除行和列。

          只讀取值

          使用Worksheet.values屬性遍歷工作表中的所有行,但只返回單元格值:

          ????for?row?in?ws.values:
          ???????for?value?in?row:
          ?????????print(value)

          Worksheet.iter_rows()Worksheet.iter_cols()可以設(shè)置values_only參數(shù)來(lái)僅返回單元格的值:

          ????>>>?for?row?in?ws.iter_rows(min_row=1,?max_col=3,?max_row=2,?values_only=True):
          ????...???print(row)
          ????(None,?None,?None)
          ????(None,?None,?None)


          作者:Sinchard,主攻Python庫(kù)文檔翻譯,開(kāi)發(fā)代碼片段,源碼分析

          Blog:zhihu.com/people/aiApple


          長(zhǎng)按掃碼添加“Python小助手”


          ▼點(diǎn)擊成為社區(qū)會(huì)員? ?喜歡就點(diǎn)個(gè)在看吧

          瀏覽 58
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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热亚洲 |