[python3]Excel解析庫-xlwings

`xlwings` 是一個強大的 Python 庫,它允許你直接與 Microsoft Excel 進行交互。通過 `xlwings`,你可以輕松地在 Python 腳本或 Jupyter Notebook 中讀取、寫入和操作 Excel 文件,而無需手動打開 Excel 應用程序。此外,`xlwings` 還支持將 Python 函數作為宏(User Defined Functions, UDFs)嵌入到 Excel 中,從而擴展了 Excel 的功能。

安裝

要使用 `xlwings`,首先需要安裝它。可以通過 `pip` 來安裝最新版本:

```bash
pip install xlwings
```

對于 Windows 用戶,還需要確保已經安裝了 Microsoft Excel。Mac 用戶則可以使用自帶的 Numbers 或者安裝 Excel for Mac。

基本用法

#### 創建新的工作簿```python
import xlwings as xw# 創建一個新的工作簿
wb = xw.Book()# 獲取活動的工作表
sheet = wb.sheets[0]# 寫入數據到單元格
sheet.range('A1').value = 'Hello'
sheet.range('B1').value = 'World'# 保存文件
wb.save('example.xlsx')# 關閉工作簿
wb.close()
```#### 打開現有的工作簿```python
# 打開現有的工作簿
wb = xw.Book('existing_file.xlsx')# 獲取所有工作表的名字
print(wb.sheet_names)# 選擇特定的工作表
sheet = wb.sheets['Sheet1']# 或者通過索引獲取第一個工作表
sheet = wb.sheets[0]
```#### 讀取和寫入數據```python
# 寫入單個值
sheet.range('A1').value = 'Hello'# 寫入多個值
sheet.range('A2').options(transpose=True).value = ['Python', 'is', 'awesome']# 讀取單個值
cell_value = sheet.range('A1').value
print(cell_value) ?# 輸出: Hello# 讀取多個值
cell_values = sheet.range('A2:A4').value
print(cell_values) ?# 輸出: ['Python', 'is', 'awesome']
```#### 遍歷工作表中的行和列```python
# 遍歷所有非空行
for row in sheet.used_range.rows:print([cell.value for cell in row])# 遍歷指定范圍內的行
for row in sheet.range('A1:B3').rows:print([cell.value for cell in row])
```#### 添加圖表```python
import numpy as np# 準備一些數據
data = np.random.rand(5, 3)
sheet.range('A1').value = data# 插入柱狀圖
chart = sheet.charts.add(left=200, top=20, width=400, height=300)
chart.set_source_data(sheet.range('A1:C6'))
chart.chart_type = 'column_clustered'
```### 高級特性#### 將 Python 函數作為宏嵌入到 Excel 中`xlwings` 支持將 Python 函數注冊為 Excel 中的 UDF(用戶定義函數),這使得你可以在 Excel 公式中調用 Python 代碼。1. **創建一個包含 UDF 的 Python 文件**:```pythonimport xlwings as xw@xw.funcdef hello(name):return f"Hello {name}!"```2. **在 Excel 中運行 Python 函數**:- 在 Excel 中按 `Alt + F11` 打開 VBA 編輯器。- 插入模塊并添加以下代碼來啟動 Python 解釋器:```vbaSub RunPython()RunPython ("import udf_module; udf_module.hello('World')")End Sub```- 或者直接在 Excel 單元格中使用公式調用 Python 函數:```excel=hello("World")```#### 使用 `xlwings` 與 Pandas 結合`xlwings` 和 `pandas` 結合得非常好,可以方便地將 DataFrame 讀入或寫出 Excel 文件。```python
import pandas as pd
import xlwings as xw# 創建一個示例 DataFrame
df = pd.DataFrame({'Column1': [1, 2, 3],'Column2': ['A', 'B', 'C']
})# 寫入 DataFrame 到 Excel
wb = xw.Book()
sheet = wb.sheets[0]
sheet.range('A1').value = df# 從 Excel 讀取 DataFrame
df_from_excel = sheet.range('A1').options(pd.DataFrame, expand='table').value
print(df_from_excel)
```### 示例:完整代碼示例以下是一個完整的例子,演示了如何使用 `xlwings` 創建包含圖表的工作簿,并將其保存到文件系統中:```python
import xlwings as xw
import numpy as npdef create_workbook_with_chart():# 創建一個新的工作簿wb = xw.Book()# 獲取活動的工作表sheet = wb.sheets[0]# 準備一些隨機數據data = np.random.rand(5, 3)sheet.range('A1').value = data# 插入柱狀圖chart = sheet.charts.add(left=200, top=20, width=400, height=300)chart.set_source_data(sheet.range('A1:C6'))chart.chart_type = 'column_clustered'# 保存文件wb.save('workbook_with_chart.xlsx')# 關閉工作簿wb.close()if __name__ == "__main__":create_workbook_with_chart()
```

總結

`xlwings` 是一個非常靈活且功能豐富的庫,適用于需要與 Excel 緊密集成的應用場景。它不僅簡化了 Python 和 Excel 之間的數據交換,還提供了將 Python 邏輯嵌入 Excel 的強大能力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/65168.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65168.shtml
英文地址,請注明出處:http://en.pswp.cn/web/65168.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kafka 消費者專題

目錄 消費者消費者組消費方式消費規則獨立消費主題代碼示例(極簡)代碼示例(獨立消費分區) offset自動提交代碼示例(自動提交)手動提交代碼示例(同步)代碼示例(異步&#…

【游戲設計原理】47 - 超游戲思維

對于這條原理,我首先想到的是開放世界,或者探索性游戲,這是最能包容各類玩家的游戲類型。這類游戲定義了基本規則,玩家的可操作性很強。就像上圖里的沙池一樣,里面有滑梯,是規則性比較明確的,而…

奧迪TT MK1(初代奧迪TT、第一代奧迪TT)儀表盤故障/不精準/水溫/剩余油量不準,如何修復、測試、復位?

故障現象 水溫不準,冷啟動就130℃汽油加滿,指針依然在中間偏左的位置 如下圖: 診斷過程 通過VAG KKL 409 USB OBD接口讀取水溫和油位數值正常,故判斷是儀表指針馬達損壞或需要重置指針位置 維修步驟 推薦選擇CH340(老…

Nginx——服務器端集群搭建與擴展模塊(五/五)

目錄 1.Nginx實現服務器端集群搭建1.1.Nginx 與 Tomcat 部署1.1.1.環境準備 (Tomcat)1.1.2.環境準備 (Nginx) 1.2.Nginx實現動靜分離1.2.1.概述1.2.2.需求分析1.2.3.動靜分離實現步驟 1.3.Nginx 實現 Tomcat 集群搭建1.4.Nginx 高可用解決方案1.4.1.概述1.4.2.Keepalived 介紹1…

輕量級通信協議 JSON-RPC 2.0 詳解

目錄 JSON-RPC 2.0 簡介 請求對象 響應對象 通知 批量請求 錯誤碼 使用場景 文檔和版本控制 社區和支持 小結 參考資料 JSON-RPC 2.0 簡介 JSON-RPC (JavaScript Object Notation - Remote Procedure Call) 是一種輕量級的遠程過程調用協議,使用 JSON&am…

ffmpeg之h264格式轉yuv

h264格式轉yuv詳細步驟 初始化FFmpeg庫:通過av_register_all()來初始化必要的組件。打開輸入文件并查找解碼器:使用avformat_open_input和 avcodec_find_decoder 打開H.264文件,并查找視頻流。分配并配置解碼上下文:使用 avcodec…

創建VUE腳手架

1.輸入 npm create vuelatest2.創建完成

vue3如何實現防抖?

第一 防抖就是我們設置一個調用時間&#xff0c;點擊后設置時間開始倒計時&#xff0c;如果再次點擊會重新倒計時 npm或yarn安裝&#xff1a; npm install lodash <template><div click"debouncedInputHandler"><button>打印</button>…

JavaWeb開發(六)XML介紹

1. XML介紹 1.1. 什么是XML &#xff08;1&#xff09;XML 指可擴展標記語言(EXtensible Markup Language)XML 是一種很像HTML的標記語言。 ??&#xff08;2&#xff09;XML 的設計宗旨是傳輸數據(目前主要是作為配置文件)&#xff0c;而不是顯示數據。 ??&#xff08;3&a…

用shell把(1到100)100個整數寫入到二進制文件

author: hjjdebug date: 2025年 01月 05日 星期日 16:14:41 CST description: 用shell把(1到100)100個整數寫入到二進制文件 1. 問題分析(需求分析) 在c語言下, 整數int 是按4個字節存儲的,能表示最大0xffffffff的范圍 但shell并沒有一條命令能夠實現把一個整數寫入二進制文件…

SpringBoot下載文件的幾種方式

小文件&#xff1a;直接將文件一次性讀取到內存中&#xff0c;文件大可能會導致OOM GetMapping("/download1")public void download1(HttpServletResponse response) throws IOException {// 指定要下載的文件File file new File("C:\\Users\\syd\\Desktop\\do…

Flink使用

Window下啟動支持 下載或復制老版本的放在bin目錄下即可&#xff1b; flink.bat echo off setlocalSET bin%~dp0 SET FLINK_HOME%bin%.. SET FLINK_LIB_DIR%FLINK_HOME%\lib SET FLINK_PLUGINS_DIR%FLINK_HOME%\pluginsSET JVM_ARGS-Xmx512mSET FLINK_JM_CLASSPATH%FLINK_LI…

Python基礎知識回顧-數據結構

Tuple 在 Python 中&#xff0c;我們經常使用 Tuple 來將相關數據分組。Tuple 指的是有序且不可變的元素集合。 形式&#xff1a;通常以逗號分隔的元素寫在括號"() "中。 數據類型和索引&#xff1a;包含 String、整數和浮點數&#xff0c;并使用正索引和負索引訪問…

8. C++ 面向對象之特性一(封裝)

面向對象主要包括三大類&#xff1a;封裝&#xff0c;繼承&#xff0c;多態 1.類和對象 c認為&#xff0c;萬物皆為對象&#xff0c;對象上有其屬性和行為 人可以作為對象&#xff0c;屬性有姓名、年齡、身高、體重...&#xff0c;行為有走、跑、跳、吃飯、唱歌... 車也可以作…

WebRtc02:WebRtc架構、目錄結構、運行機制

整體架構 WebRtc主要分為三層&#xff1a; CAPI層&#xff1a;外層調用Session管理核心層&#xff1a;包括視頻引擎、音頻引擎、網絡傳輸 可由使用者重寫視頻引擎&#xff1a;編解碼器、視頻緩存、視頻增強音頻引擎&#xff1a;編解碼器、音頻緩存、回音消除、降噪傳輸&#x…

【Qt】快速添加對應類所需的頭文件包含

快速添加對應類所需的頭文件包含 一&#xff0c;簡介二&#xff0c;操作步驟 一&#xff0c;簡介 本文介紹一下&#xff0c;如何快速添加對應類所需要包含的頭文件&#xff0c;可以提高開發效率&#xff0c;供參考。 二&#xff0c;操作步驟 以QTime類為例&#xff1a; 選中…

Apache MINA 反序列化漏洞CVE-2024-52046

漏洞描述&#xff1a; Apache MINA 是一個功能強大、靈活且高性能的網絡應用框架。它通過抽象網絡層的復雜性&#xff0c;提供了事件驅動架構和靈活的 Filter 鏈機制&#xff0c;使得開發者可以更容易地開發各種類型的網絡應用。 Apache MINA 框架的 ObjectSerializationDeco…

服務器docker配置過程

1.docker安裝 參考官方文檔&#xff1a;https://docker.cadn.net.cn/manuals/engine_install_ubuntu 2.docker鏡像源替換 官方文檔&#xff1a;https://cloud.tencent.com/document/product/1207/45596 鏡像源根據你租了哪家的去找官方文檔即可。

RabbitMQ通過代碼創建交換機和隊列

常見交換機 RabbitMQ提供的交換機一共的四種&#xff0c;分別是&#xff1a; 1. Fanout&#xff1a;采用廣播形式來發送消息&#xff0c;會將消息路由到所有綁定了的隊列之中。 2. Direct&#xff1a;通過Binding Key與隊列綁定&#xff0c;生產者在發送信息的時候會通過Routin…

js es6 reduce函數, 通過規格生成sku

const specs [{ name: 顏色, values: [紅色, 藍色, 綠色] },{ name: 尺寸, values: [S, M, L] } ];function generateSKUs(specs) {return specs.reduce((acc, spec) > {const newAcc [];for (const combination of acc) {for (const value of spec.values) {newAcc.push(…