天天看點

第三篇單元格字型樣式建立标題字型樣式往worksheet中寫入資料第一行第二行設定列寬度設定第1列到第3列的寬度為:100設定行高

首頁新聞博問專區閃存雲上钜惠                          我的部落格我的園子賬号設定登出注冊登入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