首頁新聞博問專區閃存雲上钜惠 我的部落格我的園子賬号設定登出注冊登入AirPython 公号「AirPython」,每周分享 Python 爬蟲、自動化、資料分析、Web、高效率工具等原創幹貨,歡迎關注。 部落格園首頁新随筆聯系訂閱管理随筆 - 21 文章 - 0 評論 - 3最全總結 | 聊聊 Python 辦公自動化之 Excel(下) 1. 前言前面談到 Python 處理 Excel 檔案最常見的兩種方式,即:xlrd/xlwt、openpyxl其中,xlrd/xlwt 這一組合,xlrd 可以負責讀取資料,而 xlwt 則負責寫入資料,缺點是不支援 xlsxopenpyxl 同時支援對 Excel 文檔的讀取、寫入操作,缺點是不支援 xls本篇文章将繼續聊聊 Python 操作 Excel 文檔的其他幾種方式2. xlsxwriterxlsxwriter 主要用于将資料、圖表寫入到 Excel 檔案中,可以配置使用較小的記憶體快速寫入資料它的缺點是:無法讀取、修改已有的 Excel 檔案;如果需要讀取修改 Excel 檔案,隻能搭配其他依賴庫使用,比如:xlrd首先安裝 xlsxwriter 的依賴包# 安裝依賴包
pip3 install xlsxwriter
xlsxwriter 提供了 Workbook(filename) 方法,用于建立一個工作簿對象使用工作簿對象的 add_worksheet(sheet_name) 函數,就可以在工作簿中建立 Sheet 了def create_workbook_and_worksheet(filename, worksheet_names):
“”"
建立工作簿和Sheet
:param filename: 檔案名稱
:param worksheet_names: sheet名稱清單
:return:
“”"
wb = xlsxwriter.Workbook(filename)
sheets = []
# 新增sheet
for worksheet_name in worksheet_names:
sheets.append(wb.add_worksheet(worksheet_name))
return wb, sheets
接着,就可以往某個 Sheet 單元格中寫入資料了如果需要定制單元格的樣式,比如:字型大小、字型、顔色、背景、是否加粗等,可以使用工作簿對象的 add_format() 方法建立一個樣式def create_format_styles(wb, format_stuyles):
“”"
建立一個樣式,包含:字型大小、字型、顔色、背景、是否加粗等
:param wb:
:param format_stuyles:
:return:
“”"
return wb.add_format(format_stuyles)
單元格字型樣式
self.title_style = {‘bold’: True, ‘bg_color’: ‘#B0C4DE’, ‘font_size’: 10,‘font_name’: ‘Microsoft yahei’}
建立标題字型樣式
title_font_style = create_format_styles(self.wb, self.title_style)
Sheet 對象的 write(…) 函數用于向單元格中寫入資料,參數包含:行索引、列索引、值、字型樣式等需要注意的是,預設 xlsxwriter 的行索引、列索引都是從 0 開始,即: 0 代表第一行寫入資料的同時配置單元格樣式的寫法如下:def write_to_cell(sheet, row_index, column_index, value, format_styles=None):
“”"
往單元格中寫入資料
:param row_index: 行索引,1:第一行
:param column_index: 列索引,1:第一列
:param format_styles 字型樣式
:return:
“”"
if row_index < 1 or column_index < 1:
print(‘參數輸入不正确,寫入失敗!’)
else:
# 注意:預設xlsxwriter的行索引、列索引從0開始
sheet.write(row_index - 1, column_index - 1, value, format_styles)
往worksheet中寫入資料
第一行
write_to_cell(self.current_sheet, 1, 1, “姓名”, title_font_style)
write_to_cell(self.current_sheet, 1, 2, “年齡”, title_font_style)
第二行
write_to_cell(self.current_sheet, 2, 1, ‘xingag’)
write_to_cell(self.current_sheet, 2, 2, 23)
xlsxwriter 同樣支援在單元格中插入圖檔,包含:本地圖檔和網絡圖檔使用的方法是:insert_image()參數包含:單元格行索引(索引從 0 開始)、單元格列索引、圖檔檔案、可選參數(圖檔位置、縮放、url 超連結、image_data 圖檔位元組流等)以插入一張網絡圖檔為例首先,定義一個圖檔展示可選參數,指定圖檔的縮放比、url 超連結def create_image_options(x_offset=0, y_offset=0, x_scale=1, y_scale=1, url=None, tip=None, image_data=None,
positioning=None):
“”"
插入圖檔的參數配置
包含:偏移量、縮放比、網絡圖檔連結、超連結、懸停提示燈
:param x_offset:
:param y_offset:
:param x_scale:
:param y_scale:
:param url:
:param tip:
:param image_data:
:param positioning:
:return:
“”"
image_options = {
‘x_offset’: x_offset,
‘y_offset’: y_offset,
‘x_scale’: x_scale,
‘y_scale’: y_scale,
‘url’: url,
‘tip’: tip,
‘image_data’: image_data,
‘positioning’: positioning,
}
return image_options
image_options = create_image_options(x_scale=0.5, y_scale=0.5, url=‘https://www.jianshu.com/u/f3b476549169’)
接着,将網絡圖檔轉為位元組流from io import BytesIO
import ssl
def get_image_data_from_network(url):
“”"
擷取網絡圖檔位元組流
:param url: 圖檔位址
:return:
“”"
ssl._create_default_https_context = ssl._create_unverified_context
# 擷取網絡圖檔的位元組流
image_data = BytesIO(urlopen(url).read())
return image_data
最後,将圖檔插入到單元格中def insert_network_image(sheet, row_index, column_index, url, filepath, image_options=None):
“”"
插入網絡圖檔
:param sheet:
:param row_index:
:param column_index:
:param url:
:param filepath:
:param image_options:
:return:
“”"
if row_index < 1 or column_index < 1:
return “參數輸入有誤,插入失敗!”
# 擷取圖檔位元組流
image_data = get_image_data_from_network(url)
if image_options:
image_options['image_data'] = image_data
print(image_options)
sheet.insert_image(row_index - 1, column_index - 1, filepath, image_options)
insert_network_image(self.current_sheet, 1, 1, url, ‘1.png’, image_options4)
使用 set_column() 方法可以設定列寬和 openpyxl 類似,有 2 種使用方式,分别是:字元串索引、列索引數字索引def set_column_width(sheet, index_start, index_end, width):
“”"
設定列寬
:param sheet:
:param index_start: 開始位置,從1開始
:param index_end: 結束位置
:param width: 寬度
:return:
“”"
# 方式二選一
# self.current_sheet.set_column(‘A:C’, width)
# 預設0代表第一列
sheet.set_column(index_start - 1, index_end - 1, width)
設定列寬度
設定第1列到第3列的寬度為:100
set_column_width(self.current_sheet, 1, 3, 100)
行高使用 set_row() 方法,傳入行索引和高度即可def set_row_height(sheet, row_index, height):
“”"
設定行高
:param sheet:
:param row_index: 行索引,從1開始
:param height:
:return:
“”"
sheet.set_row(row_index - 1, height)
設定行高
set_row_height(self.current_sheet, 1, 50)
set_row_height(self.current_sheet, 2, 100)
寫入資料完畢之後,将工作簿關閉,檔案會自動儲存到本地def teardown(self):
# 寫入檔案,并關閉檔案
self.wb.close()
xlsxwriter 還支援插入圖表,比如:條形圖、柱狀圖、雷達圖等,受限于篇幅,這部分内容就不展開說明了3. 其他方式還有一種比較常見的方式是:xlwingsxlwings 是一款開源免費的依賴庫,同時支援 Excel 檔案的讀取、寫入、修改它功能非常強大,還可以和 Matplotlib、Numpy 和 Pandas 無縫連接配接,支援讀寫 Numpy、Pandas 資料類型;同時,xlwings 可以直接調用 Excel 檔案中 VBA 程式需要注意的是,xlwings 依賴于 Microsoft Excel 軟體,是以使用 WPS 的使用者建議直接使用 openpyxl官方文檔:https://docs.xlwings.org/zh_CN/latest/quickstart.html另外,還有一個操作 Excel 比較強大的方式,即:Pywin32其中,Pywin32 相當于調用 Win 下的系統 API 來操作 Excel 檔案優點是:可以處理複雜圖表的資料表缺點也非常明顯,包含:速度慢、占用 CPU 高,僅支援 Win 系統4. 最後綜合發現,xlrd/xlwt、openpyxl、xlsxwriter 基本上可以滿足大部分的日常 Excel 文檔操作要擷取全部源碼,關注公衆号「 AirPython 」,背景回複「 excel 」即可獲得全部源碼如果你覺得文章還不錯,請大家 點贊、分享、留言下,因為這将是我持續輸出更多優質文章的最強動力!推薦閱讀最全總結 | 聊聊 Python 辦公自動化之 Excel(上)最全總結 | 聊聊 Python 辦公自動化之 Excel(中)分享 Python 自動化及爬蟲、資料分析實戰幹貨,歡迎關注。 分類: 自動化 标簽: 辦公軟體, 辦公, Python, Excel, 辦公自動化, 高效, 高效率, 工具, 工作, 自動化好文要頂 關注我 收藏該文 AirPython
關注 - 1
粉絲 - 4 +加關注 0 0
« 上一篇: 最全總結 | 聊聊 Python 辦公自動化之 Excel(中) posted @ 2020-11-11 23:13 AirPython 閱讀(53) 評論(0) 編輯 收藏
重新整理評論重新整理頁面傳回頂部
發表評論 【福利】注冊AWS賬号,立享12個月免費套餐 編輯預覽 7693b08a-a8f6-49f3-f45a-08d88556cc23 Markdown 幫助自動補全 不改了退出 訂閱評論 [Ctrl+Enter快捷鍵送出]
首頁 新聞 博問 專區 閃存 班級 【推薦】News: 大型組态、工控、仿真、CADGIS 50萬行VC++源碼免費下載下傳
【推薦】部落格園 & 陌上花開HIMMR 給單身的程式員小哥哥助力脫單啦~
【推薦】部落格園x示說網聯合策劃,AI實戰系列公開課第二期
【推薦】了不起的開發者,擋不住的華為,園子裡的品牌專區
【推薦】未知數的距離,毫秒間的傳遞,聲網與你實時互動
【推薦】 阿裡雲雙十一返場繼續,雲伺服器0.73折起
【推薦】年薪100w+的技術人,都做對了什麼?
相關博文:
· pythonexcel
· pythonexcel
· python操作excel
· python操作excel——建立、加載、通路基本操作
· python操作excel表
» 更多推薦…最新 IT 新聞:
· 網絡“奔現師”為啥火了?
· 中芯國際第三季度收入10.8億美元,淨利潤2.56億美元
· 為什麼平台采購成受賄案高發地?
· 換“芯”的蘋果,換了新的打法
· 虎牙第三季度淨利潤3730萬美元 同比增長105.3%
» 更多新聞…
公告 昵稱: AirPython
園齡: 8個月
粉絲: 4
關注: 1 +加關注
< 2020年11月> 日一二三四五六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12
搜尋 常用連結 我的随筆我的評論我的參與最新評論我的标簽我的标簽Python(15) 自動化(11) 高效率(8) 工具(5) 工作(5) 辦公(5) 軟體(4) 資料處理(4) 資料庫(4) 辦公軟體(3) 更多 随筆分類 工具插件(3) 自動化(10) 随筆檔案 2020年11月(2) 2020年10月(4) 2020年9月(3) 2020年8月(4) 2020年7月(4) 2020年6月(3) 2020年5月(1) 最新評論1. Re:App 自動化,Appium 憑什麼使用 UiAutomator2?@luckdv 哈哈,對的…–AirPython2. Re:App 自動化,Appium 憑什麼使用 UiAutomator2?竟然是meizu–luckdv3. Re:再推薦 5 款私藏的優質 Chrome 插件六一兒童節快樂–凱哥xyz閱讀排行榜 1. 推薦 iOS 上的一款黑科技自動化腳本:捷徑(1664) 2. 帶你用 Python 實作自動化群控裝置(689) 3. 如何利用 Python 爬蟲實作給微信群發新聞早報?(詳細)(418) 4. 最全總結 | 聊聊 Python 資料處理全家桶(Mysql 篇)(344) 5. 最全總結 | 聊聊 Python 資料處理全家桶(配置篇)(336) 評論排行榜 1. App 自動化,Appium 憑什麼使用 UiAutomator2?(2) 2. 再推薦 5 款私藏的優質 Chrome 插件(1) 推薦排行榜 1. 最全總結 | 聊聊 Python 資料處理全家桶(Sqlite篇)(2) 2. 帶你用 Python 實作自動化群控裝置(2) 3. 再推薦 5 款私藏的優質 Chrome 插件(1)
Copyright © 2020 AirPython
Powered by .NET 5.0.0 on Kubernetes