<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 庫 xlwings 常用操作詳解!

          共 3920字,需瀏覽 8分鐘

           ·

          2021-01-25 16:26

          大家好,我是早起。

          在之前的文章中我們曾詳細(xì)的講解了如何使用openpyxl 操作Excel,其實在Python中還有其他可以直接操作 Excel 文件的庫,如 xlwingsxlrdxlwt 等等,本文就將講解另一個優(yōu)秀的庫xlwings

          開頭還是想說一下,各個庫之間沒有明確的好壞之分,每個庫都有其適合的應(yīng)用場景,并且xlwingsopenpyxl 許多區(qū)別決定了它們的能力是互為補充:

          xlwings:需要安裝有 Excel 軟件,支持 .xls.xlsx 格式;可以調(diào)用 Excel 文件中 VBA 寫好的程序;和 matplotlib 以及 pandas 的兼容性強

          openpyxl:不需要 Excel 軟件,僅支持 .xlsx 格式

          安裝

          xlwings 是一個非標(biāo)準(zhǔn)庫,需要在命令行中安裝,在終端(Mac)/命令行(Win)使用pip安裝即可,一般不會出現(xiàn)什么問題。

          pip?install?xlwings

          前置知識

          xlwings 的核心理解就在于下面這張圖:

          可以看到,和 xlwings 直接對接的是 apps,也就是 Excel 應(yīng)用程序,然后才是 工作簿 books 和工作表 sheets,這點和 openpyxl 有較大區(qū)別,也正是因為此,xlwings 需要依然安裝有 Excel 應(yīng)用程序的環(huán)境

          代碼詳解

          一、打開Excel程序

          使用app打開

          import?xlwings?as?xw
          app?=?xw.App(visible=True,?add_book=False)?#?程序可見,只打開不新建工作薄
          app.display_alerts?=?False?#?警告關(guān)閉
          app.screen_updating?=?False?#?屏幕更新關(guān)閉

          二、保存、退出、關(guān)閉

          這里需要注意,因為 xlwings 是以程序 apps 作為初級操作對象,因此開始和最后都是基于 app 的開和關(guān)

          path?=?r"C:\Scientific?Research\Python"
          wb?=?app.books.open(path?+?r'\practice.xlsx')
          wb.save()?#?保存文件
          wb.close()?#?關(guān)閉文件
          app.quit()?#?關(guān)閉程序

          打開表格又分一下兩種情況,即 固定 和 活動:

          xw.Book(path?+?r'\practice.xlsx')???#?固定打開表格
          xw.books.open(path?+?r'\practice.xlsx')?#?頻繁打開表格

          固定和頻繁打開涉及到一個概念,稱活動對象,它使 xlwings 的操作更顯靈活:

          #?活動應(yīng)用程序
          app?=?xw.apps.active

          #?活動工作簿
          wb?=?xw.books.active??#?在活動app
          wb?=?app.books.active??#?在特定app

          #?活動工作表
          sheet?=?xw.sheets.active??#?在活動工作簿
          sheet?=?wb.sheets.active??#?在特定工作簿

          #?活動工作表的Range
          xw.Range('A1')?

          三、新建 Excel 文件

          無論是新建還是打開都記得保存工作簿、關(guān)閉工作簿、關(guān)閉程序

          path?=?r"C:\Scientific?Research\Python"
          wb?=?app.books.add()
          wb.save(path?+?r'\new_practice.xlsx')?
          wb.close()?
          app.quit()?

          四、讀取內(nèi)容

          示例文件 practice.xlsx 如下:

          下面的代碼部分不再顯示程序的開閉代碼,利于直觀看到重點:

          path?=?r"C:\Scientific?Research\Python"
          wb?=?app.books.open(path?+?r'\practice.xlsx')
          #?類似?openpyxl?中的?sheet?=?workbook.active
          sheet?=?wb.sheets.active

          #?獲取單個單元格的值
          A1?=?sheet.range('A1').value
          print(A1)
          #?獲取橫向或縱向多個單元格的值,返回列表
          A1_A3?=?sheet.range('A1:A3').value
          print(A1_A3)
          #?獲取給定范圍內(nèi)多個單元格的值,返回嵌套列表,按行為列表
          A1_C4?=?sheet.range('A1:C4').value
          print(A1_C4)

          在 xlwings 中,可以通過 sheet.range 獲取一個或多個單元格進行操作,另外也可以不用 sheet.range 獲取:

          #?獲取單個單元格的值
          A1?=?sheet['A1'].value
          print(A1)
          #?獲取橫向或縱向多個單元格的值,返回列表
          A1_A3?=?sheet['A1:A3'].value
          print(A1_A3)
          #?獲取給定范圍內(nèi)多個單元格的值,返回嵌套列表,按行為列表
          A1_C4?=?sheet['A1:C4'].value
          print(A1_C4)

          無論是單個單元格還是多個單元格,可以用 .value直接獲取,輸出結(jié)果和使用 .range 完全一致,也避免了類似 openpyxl 對于多個單元格需要再建立循環(huán)遍歷才能獲取值。

          還有一種類似 pandas 切片獲取范圍內(nèi)所有值的方法:

          sheet?=?wb.sheets.active
          A1_B2?=?sheet[:2,?:2].value
          print(A1_B2)

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

          以下為寫入 1 個單元格、一行或一列寫入多個單元格、寫入范圍內(nèi)多個單元格代碼

          #?寫入?1?個單元格
          sheet.range('A2').value?=?'大明'

          #?一行或一列寫入多個單元格
          #?橫向?qū)懭階1:C1
          sheet.range('A1').value?=?[1,2,3]
          #?縱向?qū)懭階1:A3
          sheet.range('A1').options(transpose=True).value?=?[1,2,3]

          #?寫入范圍內(nèi)多個單元格
          sheet.range('A1').options(expand='table').value?=?[[1,2,3],?[4,5,6]]

          例如,如果要給 practice.xlsx 添加一行新的記錄,代碼如下:

          import?xlwings?as?xw
          app?=?xw.App(visible=True,?add_book=False)
          app.display_alerts?=?False
          app.screen_updating?=?False

          path?=?r"C:\Scientific?Research\Python"
          wb?=?app.books.open(path?+?r'\practice.xlsx')
          sheet?=?wb.sheets.active
          sheet.range('A5').value?=?['小蘭',?23,?'女']

          wb.save()
          wb.close()
          app.quit()

          六、獲取數(shù)據(jù)范圍

          有兩種方法實現(xiàn)

          #?方法一
          shape?=?sheet.used_range.shape
          print(shape)

          #?方法二
          nrow?=?sheet.api.UsedRange.Rows.count
          ncol?=?sheet.api.UsedRange.Columns.count
          print(nrow)
          print(ncol)

          七、輸出并修改行高列寬

          #?輸出
          print(sheet.range('A1:A2').row_height)
          print(sheet.range('A1:A2').column_width)
          #?修改
          sheet.range('A1:A2').row_height?=?15
          sheet.range('A1:A2').column_width?=?10

          八、獲取及設(shè)置公式

          可以調(diào)用Excel公式,這是pandas無法完成的

          #?獲取公式
          print(sheet.range('B2').formula_array)
          #?寫入公式
          sheet.range('B2').formula='=SUM(A1,A2)'

          九、 獲取、設(shè)置及清除顏色格式

          當(dāng)然類似openpyxl等樣式修改也是支持的

          #?獲取顏色
          print(sheet.range('C1').color)
          #?設(shè)置顏色
          sheet.range('C1').color?=?(255,?0,?120)
          #?清除顏色
          sheet.range('C1').color?=?None

          以上僅是針對一些常用操作給出代碼示例與講解,更多的操作可以閱讀官方文檔,大家也可以自己對比一下xlwings和其他庫在部分操作上的異同。未來我們也會更新基于xlwings的辦公自動化案例!

          -END-


          文末推薦一本書,《從零開始學(xué)Selenium自動化測試(基于Python·視頻教學(xué)版)》基于Python語言,系統(tǒng)地介紹了Selenium自動化測試的相關(guān)知識及應(yīng)用。書中的大部分知識點都匹配了可獨立運行的典型實例,便于讀者學(xué)習(xí)與實踐。另外,為了幫助讀者更加高效、直觀地學(xué)習(xí),本書特意提供了約10小時基礎(chǔ)操作配套教學(xué)視頻。相信讀者通過系統(tǒng)地學(xué)習(xí)本書內(nèi)容,可以全面掌握Selenium 3自動化測試技術(shù)。


          瀏覽 104
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  国产性爱小说 | 91丨豆花丨成人熟女 | 国内自拍小视频 | 亚洲va在线观看 亚洲艾薇在线观看 | 国产强 暴 疼 哭 处 |