Python辦公自動化(3)對Excel的操作

1.讀取excel文件

1.安裝工具

終端下載讀取excel文檔的工具庫:

?pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple xlrd

若對版本有特殊需求:?

刪除當前版本:pip3 uninstall xlrd

下載所需要的版本:pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple xlrd==1.2.0

2.打開目錄中的excel文件

import xlrd
excel = xlrd.open_workbook('question.xlsx')
print(excel)

3.搜索excel文件頁簽

import xlrd
excel = xlrd.open_workbook('question.xlsx')
# 根據頁簽名找到頁簽
book1 = excel.sheet_by_name('題庫')
print(book1.name)
# 獲取第一個頁簽
book2 = excel.sheet_by_index(0)
print(book2.name)
# 遍歷所有頁簽
for i in excel.sheets():print(i.name)

4.?獲得表格中的數據

import xlrd
excel = xlrd.open_workbook('question.xlsx')
book = excel.sheet_by_name('題庫')
for i in book.get_rows():content = []for j in i:content.append(j.value)print(content)

2.新建excel文件

1.安裝工具

終端下載創建excel文檔的工具庫(支持寫入文本、數字、公式等):

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple xlsxwriter

2.創建excel文檔

import xlsxwriter
# 生成excel
excel = xlsxwriter.Workbook('study.xlsx')
# 添加工作簿
book = excel.add_worksheet('考試成績')
title = ['姓名','性別','年齡','成績','等級']
data = [['Adela','woman','20','90','1'],['Zoya','woman','24','95','2']
]
for index,item in enumerate(title):# 向表格中寫入內容,參數1:行索引;參數2:列索引;參數3:內容book.write(0,index,item)
for row_index, row_data in enumerate(data):for col_index, item in enumerate(row_data):book.write(row_index + 1, col_index, item)  # 從第 1 行開始寫入數據
excel.close()

3.復制excel文檔

代碼思路:讀取+新建+寫入

import xlsxwriter
import xlrd
def read():result = []excel = xlrd.open_workbook('study.xlsx')book = excel.sheet_by_name('考試成績')for i in book.get_rows():content = []for j in i:content.append(j.value) # 行中的每一個格子里的數據,并封裝到content列表中,作為一行數據result.append(content) # 將每一個行的數據追加到返回結果集列表中return resultdef write(content):excel = xlsxwriter.Workbook('study_copy.xlsx')book = excel.add_worksheet('考試成績')for index,data in enumerate(content):for sub_index,sub_data in enumerate(data):book.write(index,sub_index,sub_data)excel.close()
if __name__ == '__main__':result = read()write(result)

4.生成excel并附帶圖表

import xlsxwriter
excel = xlsxwriter.Workbook('study1.xlsx')
book = excel.add_worksheet('成績等級')
data = [['優秀','良好','中等','一般'],[1100,2000,1000,500]
]
book.write_column('A1',data[0])
book.write_column('B1',data[1])
# 繪制圖表
# 參數1:圖表類型 type聲明設置類型,column柱狀圖
chart = excel.add_chart({'type':'column'})
# 定義要展示的數據
chart.add_series({'categories':'=成績等級!$A1:$A4','values':'=成績等級!$B1:$B4','name':'成績占比'})
# 設置圖表標題
chart.set_title({'name':'成績占比圖'})
# 向表格中插入圖表
# 參數1:位置;參數2:圖表的引用名
book.insert_chart('A10',chart)
excel.close()

3.讀取并計算數據

1.安裝工具

終端下載操作excel文檔的工具庫(大多用于讀取、寫入和修改等 ):

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple xlutils

2.讀取數據

編程思路:

1.打開 Excel 文件;

2.獲取第一個工作表;

3.初始化兩個數據:分別是用于存儲按分類匯總的總價goods_type與每行的單品總價count_price

4.用遍歷對每一行計算單品總價

5.最后返回goods_typecount_price

def read_data():wb = xlrd.open_workbook('goods.xlsx')sh = wb.sheet_by_index(0)goods_type = {} # 分類總價 {水果:20,生活用品:30}count_price = [] # 單品總價 [10,20,30]for r in range(sh.nrows):# sh.cell_value(r,4)獲得格子中的數據,參數1行索引值,參數2列索引值count = sh.cell_value(r,3)*sh.cell_value(r,4)#將計算的小計值追加到單品總價中count_price.append(count)key = sh.cell_value(r,0)# 判斷分類總價中是否包含該商品,如包含則追加計算if goods_type.get(key):goods_type[key] += countelse:goods_type[key] = countreturn goods_type,count_price

3.保存數據

def save(_type,_count):wb = xlrd.open_workbook('goods.xlsx')sh_t = wb.sheet_by_index(0)wb2 = copy(wb) # 復制當前的商品表格sh = wb2.get_sheet(0)for r in range(sh_t.nrows):sh.write(r,sh_t.ncols,_count[r])sh2 = wb2.add_sheet('匯總的數據')for i,key in enumerate(_type.keys()):sh2.write(i,0,key)sh2.write(i,1,_type[key])wb2.save('商品匯總數據.xlsx')

4.主程序

read_data():讀取并自動匹配匯總數據和單品總價

save():將結果保存到新的 Excel 文件中

if __name__ == '__main__':t,c = read_data()save(t,c)

4. 拆分Excel文件

將Excel表格中的數據按照A1列分類,并按類別存到不同的sheet頁中

import xlrd
from xlutils.copy import copydef get_data():wb = xlrd.open_workbook('goods.xlsx')sh = wb.sheet_by_index(0)"""{a:[{},{},{}],b:[{},{},{}],c:[{},{},{}],}"""all_data = {}for r in range(sh.nrows):d = {'type':sh.cell_value(r,1),'name':sh.cell_value(r,2),'price':sh.cell_value(r,3),'count':sh.cell_value(r,4)}key = sh.cell_value(r,0)if all_data.get(key):all_data[key].append(d)else:all_data[key] = [d]return all_datadef save(data):wb = xlrd.open_workbook('goods.xlsx')wb2 = copy(wb)for key in data.keys():temp_sheet = wb2.add_sheet(key)for i,d in enumerate(data[key]):temp_sheet.write(i, 0, d.get('type'))temp_sheet.write(i, 1, d.get('name'))temp_sheet.write(i, 2, d.get('price'))temp_sheet.write(i, 3, d.get('count'))wb2.save('表格拆分.xlsx')
if __name__ == '__main__':all_data = get_data()save(all_data)

5. 合并Excel文件

終端下載操作excel文檔的工具庫(除了讀取寫入,還包括格式化單元格、插入圖表、處理多個工作表等功能,功能比xlutils強大,支持大數據量的處理?):

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple openpyxl

?1.合并至同一sheet頁

from openpyxl import load_workbook,Workbook
import os
def copy_data():wb = Workbook() # 獲得excel對象sh = wb.active # 獲得焦點sheet頁all_data = []for name in os.listdir('./銷售表'):path = f'./銷售表/{name}'tmp_wb = load_workbook(path)tmp_sh = tmp_wb.activefor r in range(1,tmp_sh.max_row+1):# 獲取整行數據row_value = []for c in range(1,tmp_sh.max_column+1):value = tmp_sh.cell(r,c).valuerow_value.append(value)# 將獲取的行數據,添加到全局數據里if row_value not in all_data:all_data.append(row_value)# 將數據追加至新的excel中for data in all_data:sh.append(data)wb.save('合并Excel.xlsx')
if __name__ == '__main__':copy_data()

2.合并至多個sheet頁

from openpyxl import load_workbook,Workbook
import os
def copy_data():wb = Workbook()for name in os.listdir('./銷售表'):path = f'./銷售表/{name}'tmp_wb = load_workbook(path)tmp_sh = tmp_wb.active# 創建sheet頁sh = wb.create_sheet(name[:-5]) # 單肩包.xlsx->單肩包for r in range(1,tmp_sh.max_row+1):row_value = []for c in range(1,tmp_sh.max_column+1):value = tmp_sh.cell(r,c).valuerow_value.append(value)sh.append(row_value)del wb['Sheet']wb.save('合并至多個sheet頁.xlsx')
if __name__ == '__main__':copy_data()

6. 生成工資條

?省腦細胞式描述:遍歷原始工作表的每一行,再單獨存到一個新Excel表中

from openpyxl import load_workbook,Workbook
def create_excel():wb = load_workbook('工資數據.xlsx')sh = wb.activetitle = ["工號”,“姓名","部門", "基本工資","提成","加班工資","社保扣除","考勤扣除","應付工資","郵箱"]for i,row in enumerate(sh.rows):if i == 0:continueelse:temp_wbook = Workbook()temp_sh = temp_wbook.activetemp_sh.append(title)row_data = [cell.value for cell in row] #['5732','Adela','研發部','8000',......]獲得當前行的數據temp_sh.append(row_data) # 將當前行數據追加直sheet頁中temp_wbook.save(f'./工資條/{row_data[1]}.xlsx')
if __name__ == '__main__':create_excel()

當然你可以再把他們合并成一起當作練習,并在新的sheet頁中顯示工資數的柱狀圖:

import xlsxwriter
from openpyxl import load_workbook, Workbook
import osdef combine_data():wb = Workbook()sh = wb.activeall_data = []for name in os.listdir('./工資條'):path = f'./工資條/{name}'tmp_wb = load_workbook(path)tmp_sh = tmp_wb.activefor r in range(1, tmp_sh.max_row + 1):row_value = []for c in range(1, tmp_sh.max_column + 1):value = tmp_sh.cell(r, c).valuerow_value.append(value)if row_value not in all_data:all_data.append(row_value)for data in all_data:sh.append(data)wb.save('合并工資條.xlsx')return all_datadef create_chart(data):# 創建新Excelwb = xlsxwriter.Workbook('圖表.xlsx')ws = wb.add_worksheet()# 寫入數據for row_num, row in enumerate(data):for col_num, value in enumerate(row):ws.write(row_num, col_num, value)# 創建柱狀圖(假設第2列是姓名,第8列是工資)chart = wb.add_chart({'type': 'column'})chart.add_series({'categories': f'=Sheet1!$B$1:$B${len(data)}','values': f'=Sheet1!$H$1:$H${len(data)}'})# 插入圖表ws.insert_chart('K2', chart)wb.close()if __name__ == '__main__':data = combine_data()  # 合并數據create_chart(data)  # 生成圖表

7.統計加班時間

1.搭建一個數據表格

from datetime import date
from openpyxl import load_workbook,Workbook
def create_data():wb =Workbook()sh = wb.activerows = [['Date','姓名','打卡時間'],[date(2025, 4, 2), '張三', '18:50'],[date(2025, 4, 2), '李四', '19:15'],[date(2025, 4, 4), '王五', '22:30'],[date(2025, 4, 5), '趙六', '18:45'],[date(2025, 4, 6), '錢七', '17:20'],[date(2025, 4, 7), '孫八', '19:05'],[date(2025, 4, 8), '周九', '21:10'],[date(2025, 4, 9), '吳十', '22:35'],[date(2025, 4, 2), '李四', '19:15'],]for row in rows:sh.append(row)wb.save('打卡時間.xlsx')

2.處理表格數據

def statistics():wb = load_workbook('打卡時間.xlsx')sh = wb.activedata = []for i in range(2, sh.max_row + 1):t_data = []for j in range(1, sh.max_column + 1):t_data.append(sh.cell(i, j).value)# 統計計算h, m = t_data[2].split(":")full = int(h) * 60 + int(m)  # 打卡時間轉換成分鐘tmp = full - 18 * 60  # 與18:00的差值t_data.append(tmp)t_data[0] = t_data[0].date()data.append(t_data)n_wb = Workbook()n_sh = n_wb.activefor d in data:n_sh.append(d)n_wb.save('統計時間.xlsx')

3.主程序

if __name__ == '__main__':
??? statistics()
??? create_data()

8.查重復數據

查詢是否有重復的人名

from openpyxl import load_workbook,Workbook
from openpyxl.styles import PatternFill
import os
def dum():wb = load_workbook('打卡時間.xlsx')sh = wb.activeindex = [] #存放重復數據的索引值tmp = []for i,c in enumerate(sh['B']):flag = c.value not in tmpif flag:tmp.append(c.value)else:index.append(i)fill = PatternFill('solid',fgColor='AEEEEE')for i,r in enumerate(sh.rows):if i in index:for c in r:c.fill = fillprint(f'第{i+1}條數據是重復數據')wb.save('查重復數據.xlsx')
if __name__ == '__main__':dum()

9.提取身份證號信息

根據身份證號碼的格式,提取出生辰年月,并進行年齡等數學運算

from openpyxl import load_workbook
from datetime import datetime
def get_code():now_year = datetime.now().yearwb = load_workbook('身份證信息.xlsx')sh = wb.activemax_colunm = sh.max_columnfor i,cell in enumerate(sh['B']):pno = cell.value# 6位行政區號 4位年份 2位月份 2月日期 4位個人識別碼year = pno[6:10]month = pno[10:12]day = pno[12:14]age = now_year - int(year)sh.cell(i + 1, max_colunm + 1).value = yearsh.cell(i + 1, max_colunm + 2).value = monthsh.cell(i + 1, max_colunm + 3).value = daysh.cell(i + 1, max_colunm + 4).value = agewb.save('提取身份證號信息.xlsx')
if __name__ == '__main__':get_code()

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

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

相關文章

go語言:開發一個最簡單的用戶登錄界面

1.用deepseek生成前端頁面&#xff1a; 1.提問&#xff1a;請你用html幫我設計一個用戶登錄頁面&#xff0c;要求特效采用科技感的背景渲染加粒子流動&#xff0c;用css、div、span標簽&#xff0c;并給出最終合并后的代碼。 生成的完整代碼如下&#xff1a; <!DOCTYPE h…

blender二次元上色

前&#xff1a; 后&#xff1a;&#xff08;臉自己會發光) 參考&#xff1a;05-模型導入與材質整理_嗶哩嗶哩_bilibili

Mysql+Demo 獲取當前日期時間的方式

記錄一下使用Mysql獲取當前日期時間的方式 獲取當前完整的日期時間有常見的四種方式&#xff0c;獲取得到的默認格式(mysql的格式標準)是 %Y-%m-%d %H:%i:%s其它格式 %Y-%m-%d %H:%i:%s.%f方式一&#xff1a;now()函數 select now();mysql> select now(); -------------…

C#核心學習(六)面向對象--封裝(5)靜態成員及靜態構造函數和靜態類 以及和常量的區別

目錄 一、什么是靜態的&#xff1f;什么是常量&#xff1f; 1. ?靜態&#xff08;Static&#xff09;? 2. ?常量&#xff08;const&#xff09;? 二、類中的靜態成員有什么用&#xff1f; 1. ?共享數據 2. ?工具方法與全局配置 3. ?單例模式 三、靜態類和靜態成…

FreeRTOS源碼下載分享

FreeRTOS源碼下載分享 官網下載太慢了&#xff0c;分享下FreeRTOSv202411 FreeRTOSv202411.00.zip 鏈接: https://pan.baidu.com/s/1P4sVS5WroYEl0WTlPD7GXg 提取碼: g6aq

2025年win10使用dockerdesktop安裝k8s

一、寫作背景 百度了一圈&#xff0c; 要么教程老&#xff0c;很多操作步驟冗余&#xff0c; 要么跑不通&#xff0c;或者提供的鏈接失效等情況。 二、看前須知 1、安裝過程使用的AI輔助&#xff0c; 因為參考的部分博客卡柱了。 2、如果操作過程中遇到卡頓&#xff0c; …

一段式端到端自動駕駛:UniAD:Planning-oriented Autonomous Driving

論文地址:https://arxiv.org/pdf/2212.10156 代碼地址:https://github.com/OpenDriveLab/UniAD 1. 摘要 現代自動駕駛系統通常由一系列按順序執行的模塊任務構成,例如感知、預測和規劃。為了完成多種任務并實現高級別的智能化,當前的方法要么為每個任務部署獨立模型,要…

【企業文化】CXO是什么?

李升偉 整理 CXO 是企業中高層管理職位的統稱&#xff0c;其中的 “X” 是一個變量&#xff0c;代表不同的職能領域。CXO 通常指企業最高管理層中的各個負責人&#xff0c;他們共同參與企業的戰略決策和運營管理。以下是一些常見的 CXO 職位及其職責&#xff1a; 1. CEO&…

python中的 f 是什么意思,f‘{username}_log_archive_{int(time.time())}.txt‘

python中的 f 是什么意思,f’{username}log_archive{int(time.time())}.txt’ 在 Python 中,f 是一種字符串前綴,用于創建格式化字符串(也稱為 f-string),它是 Python 3.6 及更高版本引入的一種方便的字符串格式化方式。 基本語法和功能 當你在字符串前加上 f 前綴時,…

論文淺嘗 | Interactive-KBQA:基于大語言模型的多輪交互KBQA(ACL2024)

轉載至&#xff1a;何駿昊 開放知識圖譜 原文地址&#xff1a;論文淺嘗 | Interactive-KBQA&#xff1a;基于大語言模型的多輪交互KBQA&#xff08;ACL2024&#xff09; 筆記整理&#xff1a;何駿昊&#xff0c;東南大學碩士&#xff0c;研究方向為語義解析 論文鏈接&#xff…

MySQL注入中user-agent和cookie存在的注入

uagent注入 1、漏洞成因&#xff1a; 當Web應用程序將用戶提供的User-Agent值未經處理直接拼接到SQL查詢語句時&#xff0c;攻擊者可以通過構造惡意User-Agent值閉合原有SQL語句并注入任意SQL代碼。 2、以less-18為例&#xff1a; 相比前幾關&#xff0c;第18關對于uname和pa…

【算法數學篇】試除法求約數

題解&#xff1a;試除法求約數 題目傳送門 869. 試除法求約數 一、題目描述 給定 n 個正整數 a?&#xff0c;對于每個整數 a?&#xff0c;按照從小到大的順序輸出它的所有約數。 輸入格式&#xff1a; 第一行包含整數 n接下來 n 行&#xff0c;每行包含一個整數 a? 輸…

《UNIX網絡編程卷1:套接字聯網API》第5章 TCP客戶服務器程序示例

《UNIX網絡編程卷1&#xff1a;套接字聯網API》第5章 TCP客戶/服務器程序示例 5.1 本章目標與示例程序概述 本章通過一個完整的TCP回射&#xff08;Echo&#xff09;客戶/服務器程序&#xff0c;深入解析TCP套接字編程的核心流程與關鍵問題。示例程序的功能為&#xff1a;客戶…

封裝可拖動彈窗(vue jquery引入到html的版本)

vue cli上簡單的功能&#xff0c;在js上太難弄了&#xff0c;這個彈窗功能時常用到&#xff0c;保存起來備用吧 備注&#xff1a;deepseek這個人工智障寫一堆有問題的我&#xff0c;還老服務器繁忙 效果圖&#xff1a; html代碼&#xff1a; <div class"modal-mask&qu…

編譯器工具鏈是什么?

編譯器工具鏈&#xff08;Compiler Toolchain&#xff09; 是一組用于將源代碼轉換為可執行程序的工具和庫的集合。它涵蓋了從源代碼編寫到程序運行的整個構建過程&#xff0c;包括編譯、匯編、鏈接等多個階段。以下是關于編譯器工具鏈的詳細解釋&#xff1a; 一、編譯器工具鏈…

Spring Boot 集成Redis中 RedisTemplate 及相關操作接口對比與方法說明

RedisTemplate 及相關操作接口對比與方法說明 1. RedisTemplate 核心接口與實現類 RedisTemplate 是 Spring Data Redis 的核心模板類&#xff0c;通過 opsFor... 方法返回不同數據類型的操作接口&#xff0c;每個接口對應 Redis 的一種數據結構。以下是主要接口及其實現類&am…

linux內核漏洞檢測利用exp提權

案例一dirtycow&#xff08;CVE-2016-5159&#xff09; 有個前置知識就是 獲取liunx的內核 hostnamectl uname -a 然后這個內核漏洞進行提權的步驟也是和手工win進行提權差不多 也是需要使用輔助工具在本地進行輔助檢測 然后去nomi-sec/PoC-in-GitHub&#xff1a; &#…

重磅 | CertiK《Hack3d:2025第一季度安全報告》(附報告全文鏈接)

CertiK《Hack3d&#xff1a;2025年第一季度安全報告》現已發布&#xff0c;本次報告深入分析了2025年1至3月Web3.0領域的安全狀況。2025年第一季度共發生197起安全事件&#xff0c;總損失約為16.7億美元&#xff0c;環比激增303.4%。其中Bybit事件導致約14.5億美元的損失&#…

經典卷積神經網絡LeNet實現(pytorch版)

LeNet卷積神經網絡 一、理論部分1.1 核心理論1.2 LeNet-5 網絡結構1.3 關鍵細節1.4 后期改進1.6 意義與局限性二、代碼實現2.1 導包2.1 數據加載和處理2.3 網絡構建2.4 訓練和測試函數2.4.1 訓練函數2.4.2 測試函數2.5 訓練和保存模型2.6 模型加載和預測一、理論部分 LeNet是一…

二維碼掃不出?用QR Research工具

一.簡介 簡單來說QR Research就是用來掃二維碼的工具 當二維碼模糊不清&#xff0c;無法用普通方式掃時&#xff0c;就可以用QR Research輕松掃描。QR Research還可以分析變形/破損二維碼&#xff08;修復或提取有效部分&#xff09; 二.下載安裝 QR Research 三.例題 這…