App下載

xlwings-能讓 Excel 飛上天

猿友 2020-09-08 14:09:30 瀏覽數(shù) (8902)
反饋

文章轉(zhuǎn)載自公眾號(hào):Python技術(shù)

人生苦短,我用 Python!

Python 作為一種腳本語言,其編程方式越來越受程序員們的青睞,同時(shí)其應(yīng)用也越來越廣泛,其中數(shù)據(jù)分析崗位人才需求也日益漸增,運(yùn)用 Python 相關(guān)模塊進(jìn)行數(shù)據(jù)分析能大大提升工作效率,減輕數(shù)據(jù)分析人員的工作負(fù)擔(dān)。在日常辦公中,使用 Python 的場(chǎng)景也越來越多,很多重復(fù)的工作直接交給程序執(zhí)行效率會(huì)大大提高,所以 Python 操作 Excel 也成為每一個(gè)數(shù)據(jù)分析人員的必備技能,今天的文章就一起來看看 Python 中能操作 Excel 工作表的神器。

Python 操作 Excel 模塊簡(jiǎn)介

Python 操作 Excel 的模塊,網(wǎng)上提到的模塊大致有:xlwings、xlrd、xlwt、openpyxlpyxll 等,他們提供的功能歸納起來無非有兩種形式:

  • 1、用 Python 讀寫 Excel 文件,實(shí)際上就是讀寫有格式的文本文件,操作 excel 文件和操作 text、csv 文件沒有區(qū)別,Excel 文件只是用來儲(chǔ)存數(shù)據(jù)。
  • 2、除了操作數(shù)據(jù),還可以調(diào)整Excel文件的表格寬度、字體顏色等。另外需要提到的是用 COM 調(diào)用 ExcelAPI 操作 Excel 文檔同樣也是可行的,相當(dāng)麻煩基本和 VBA 沒有區(qū)別。

關(guān)于 xlwings

為什么 xlwings 能讓 Excel 飛起來呢,因?yàn)?code>xlwings支持 Excel 的讀寫操作。具體使用請(qǐng)參照官網(wǎng) ,一切技術(shù)的出現(xiàn)都是為了滿足人的惰性,因此 xlwings 能讓繁瑣的工作簡(jiǎn)單化、簡(jiǎn)潔化。

Xlwings 是開源且免費(fèi)的工具,能夠非常方便的讀寫 Excel 文件中的數(shù)據(jù),并且能夠進(jìn)行單元格格式的修改。

xlwings 還可以和 matplotlibnumpy 以及 pandas 無縫連接,支持讀寫 numpypandas 數(shù)據(jù)類型,將 matplotlib 可視化圖表導(dǎo)入到 excel 中。

最重要的是 xlwings 可以調(diào)用 Excel 文件中 VBA 寫好的程序,也可以讓 VBA調(diào)用用 Python 寫的程序。

xlwings 優(yōu)點(diǎn)

  • xlwings 能夠非常方便的讀寫 Excel 文件中的數(shù)據(jù),并且能夠進(jìn)行單元格格式的修改
  • xlwings 可以和 Matplotlib 以及 Pandas 無縫連接
  • xlwings 可以調(diào)用 Excel 文件中 VBA 寫好的程序,也可以讓 VBA 調(diào)用 Python 寫的程序。
  • xlwings 開源免費(fèi),并且一直在更新

xlwings 基本操作

xlwings-能讓 Excel 飛上天

xlwings 安裝和使用

和其他模塊使用一樣,xlwings 在使用之前也需要安裝,本文環(huán)境為 Python 3.6 版本的 Windows 環(huán)境。

模塊安裝

安裝xlwings的最簡(jiǎn)單方法是通過pip

 pip install xlwings

 

或者使用conda:

 conda install xlwings

 

再或者

conda install -c conda-forge xlwings

引入模塊使用

import xlwings as xw

Python to Excel

連接到工作簿最簡(jiǎn)單便捷的方法是由 xw.Book 提供:它在所有應(yīng)用程序?qū)嵗胁檎以摴ぷ鞑静⒎祷劐e(cuò)誤,但如果同一個(gè)工作簿在多個(gè)實(shí)例中打開,要連接到活動(dòng)應(yīng)用程序?qū)嵗械墓ぷ鞑荆瑒t需要使用 xw.books 并引用特定應(yīng)用程序, 使用區(qū)別如下:

Header1 Header2 Header3
New book xw.Book() xw.books.add()
Unsaved book xw.Book('Book1') xw.books['Book1']
UBook by (full)name xw.Book(r'D:/test/file.xlsx') xw.books.open(r'D:/test/file.xlsx')

:在 Windows 上指定文件路徑時(shí),應(yīng)該通過在字符串前放置一個(gè) r 來使用原始字符串,或者使用雙反斜杠:D:\Test\file.xlsx

Excel 活動(dòng)對(duì)象

# 活動(dòng)應(yīng)用程序(即Excel實(shí)例)
app = xw.apps.active


# 活動(dòng)工作簿
wb = xw.books.active  # 在活動(dòng)app
wb = app.books.active  # 在特定app


# 活動(dòng)工作表
sht = xw.sheets.active  # 在活動(dòng)工作簿
sht = wb.sheets.active  # 在特定工作簿


# 活動(dòng)工作表的Range
xw.Range('A1')  #在活動(dòng)應(yīng)用程序的活動(dòng)工作簿的活動(dòng)表上

基本操作

以下代碼展示相關(guān)基本操作:

  • 打開表格
  • 引用工作表
  • 引用單元格
  • 引用區(qū)域
  • 寫入數(shù)據(jù)(數(shù)據(jù)寫入默認(rèn)按照行寫入,如果要指定相應(yīng)的列寫入則需要添加相應(yīng)參數(shù),指定參數(shù)為:transpose = True)
  • 讀取數(shù)據(jù)

import xlwings as xw
# 打開表格
file_path = r'D:/test/file.xlsx'


xw.Book(file_path)   # 固定打開表格
xw.books.open(file_path) # 頻繁打開表格


# 引用工作表
sht = wb.sheets['sheet1']


# 引用單元格
rng = xw.Range('A1')
# rng = sht[0,0] # 此代碼第一行的第一列即a1,相當(dāng)于 pandas 的切片


# 引用區(qū)域
rng = sht.range('a1:a5')
# rng = sht['a1:a5']
# rng = sht[:5,0]


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


sht.range('a1').value = 'Hello Excel' # 指定一個(gè)單元格寫入數(shù)據(jù)


# 按行寫入數(shù)據(jù)
sht.range('a1').value = [1, 2, 3, 4,5,6,7,8]


# 按照列寫入數(shù)據(jù)
sht.range('a2').options(transpose=True).value = [2, 3, 4, 5, 6, 7, 8]


# 按照二維列表的方式寫入數(shù)據(jù)


sht.range('a9').expand('table').value = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i'],['j', 'k', 'l']]


# 讀取寫入的數(shù)據(jù)


print(sht.range('A1:D5').value)

xlwings 結(jié)合 matplotlib

xlwings 結(jié)合 Matplotlib 使用能講圖畫貼入到 Excel 中,具體使用 pictures.add() 方法就可以很容易地將Matplotlib圖作為圖片粘貼到表格中。詳細(xì)代碼如下:

 fig = plt.figure()  # 指定畫布
 # plt.plot([1, 2, 3, 4, 5])
 plt.plot([36,5,3,25,78])
 plt.plot([9,10,31,45])
 plt.plot([6,14,45,31])
 sht = xw.Book(r'G:/test/test.xlsx').sheets[0]
 sht.pictures.add(fig, name='myplt', update=True)

xlwings-能讓 Excel 飛上天

總結(jié)

磨刀不誤砍柴工,今天的文章主要是操作 Excel 的工具 xlwings 介紹,大家都用工具操練起來,好好修煉如何擰好螺絲的內(nèi)功,奧利給!

以上就是W3Cschool編程獅關(guān)于xlwings-能讓 Excel 飛上天的相關(guān)介紹了,希望對(duì)大家有所幫助。

3 人點(diǎn)贊