python办公自动化--实现excel基本操作

文章目录

  • 前言
  • 一、适合场景+准备
    • 1.0 适用场景
    • 1.1 数据下载
    • 1.2 excel模板
  • 二、Python代码部分
    • 1.导入库
    • 2.设置时间变量和格式
    • 3.读入excel模板的xlsx文件
    • 4.读入要更新的本地的csv文件
  • 三、效果展示
  • 四、结束


前言

办公自动化—excel篇:
本文主要是为了将日常重复固定的excel操作脚本化,节约时间,减少心累的excel计算等待,还有就是爽!


如有雷同,不幸荣幸~

一、适合场景+准备

1.0 适用场景

在我的实习工作中,每天有大量重复的工作,在公司内网上跑sql,下载报表;或者是从网页前端选择时间区间,自行下载csv、xlsx文件。下载后的操作 ,基本是筛选日期,复制粘贴等,更新数据到excel模板的指定位置,下拉vlookup公式等。

1.1 数据下载

今天用到的原始数据是纳斯达克的股票数据,下载的是电车四小龙,特斯拉、蔚来、小鹏、理想的近段时间的股价。

数据下载链接:纳斯达克官网
输入各家股票代号(代号可百度)
python办公自动化--实现excel基本操作_第1张图片
python办公自动化--实现excel基本操作_第2张图片
如上图红框所示,最后根据需要下载了最新一个月的特斯拉股价数据

1.2 excel模板

这里不赘述excel模板的制作,基本是通过sumifs函数,将上一步下载的数据进行计算,并进行自动更新
python办公自动化--实现excel基本操作_第3张图片
python办公自动化--实现excel基本操作_第4张图片

二、Python代码部分

1.导入库

代码如下(示例):

# Singghet
import pandas as pd
import datetime
import time
import xlwings as xw

# These Data from Nasdaq Website : https://www.nasdaq.com/market-activity/stocks

2.设置时间变量和格式

#  今日日期
Today = time.strftime('%Y%m%d')
today = datetime.date.today()
today_str = today.strftime('%Y%m%d')

# 昨日/更新日期
up_day = today-datetime.timedelta(2)
up_day_str = up_day.strftime('%Y%m%d')
up_day_sort = up_day.strftime('%m/%d/%Y')

这一步的目的是为了,是为了方便读取含日期的历史模板和下载数据以及筛选数据,便于代码每日复用


3.读入excel模板的xlsx文件

# 打开模板文件,即需要更新数据源的文件
stock_imp_path = r'C:\Users\your_name\Desktop\电车股价表.xlsx'           # import path
stock_save_path = r'C:\Users\your_name\Desktop\电车股价表{up_day_str}.xlsx' .format(up_day_str=up_day_str)

app = xw.App(visible=False, add_book=False)
app.display_alerts = False
app.screen_updating = False  # 是否实时刷新excel程序的显示内容
wb = app.books.open(stock_imp_path)
ws_01 = wb.sheets['TSLA']
ws_02 = wb.sheets['XPEV']
ws_03 = wb.sheets['NIO']
ws_04 = wb.sheets['LI']

这部分是导入excel模板,为后续导入新数据,和导出做准备

4.读入要更新的本地的csv文件

这里我们将下载的四家车企最新一天的股价数据(5月21日),复制到模板的各自sheet中
以TSLA的为例

# 更新TSLA的sheet

tsla_sheet = pd.read_excel(stock_imp_path, sheet_name='TSLA', usecols='A:F')        # 读入模板里的TSLA数据源sheet
start_tsla = len(tsla_sheet)+2                                                                                                            # 在原始数据下方开始复制粘贴

# 导入更新的数据
raw_tsla_data = pd.read_csv(tsla_path, encoding='utf-8')
update_tsla = raw_tsla_data[raw_tsla_data['Date'] == up_day_sort]
ws_01.range('A'+str(start_tsla)).expand('table').value = update_tsla.values.tolist()

# 更新XPEV的sheet
xpev_sheet = pd.read_excel(stock_imp_path, sheet_name='XPEV', usecols='A:F')        # 读入模板里的XPEV数据源sheet
start_xpev = len(xpev_sheet)+2                                                                                                            # 在原始数据下方开始复制粘贴

# 导入更新的数据
raw_xpev_data = pd.read_csv(xpev_path, encoding='utf-8')
update_xpev = raw_xpev_data[raw_xpev_data['Date'] == up_day_sort]
ws_02.range('A'+str(start_xpev)).expand('table').value = update_xpev.values.tolist()

# 更新NIO的sheet
nio_sheet = pd.read_excel(stock_imp_path, sheet_name='NIO', usecols='A:F')        # 读入模板里的NIO数据源sheet
start_nio = len(nio_sheet)+2                                                                                                            # 在原始数据下方开始复制粘贴

# 导入更新的数据
raw_nio_data = pd.read_csv(nio_path, encoding='utf-8')
update_nio = raw_nio_data[raw_nio_data['Date'] == up_day_sort]
ws_03.range('A'+str(start_nio)).expand('table').value = update_nio.values.tolist()

# 更新LI的sheet
li_sheet = pd.read_excel(stock_imp_path, sheet_name='LI', usecols='A:F')      # 读入模板里的LI数据源sheet
start_li = len(li_sheet)+2                                                                                                            # 在原始数据下方开始复制粘贴

# 导入更新的数据
raw_li_data = pd.read_csv(li_path, encoding='utf-8')
update_li = raw_li_data[raw_li_data['Date'] == up_day_sort]
ws_04.range('A'+str(start_li)).expand('table').value = update_li.values.tolist()

完成四张sheet的更新

wb.save(stock_save_path)
wb.close()
app.quit()

保存关闭退出

三、效果展示

将0521 的数据筛选出来并复制到原始数据下方(这个原始数据的日期格式有毒),然后生成以日期命名的新模板
python办公自动化--实现excel基本操作_第5张图片
python办公自动化--实现excel基本操作_第6张图片

四、结束

补充:
若在原有的excel模板中有vlookup公式,可能需要每次更完数据下拉公式的,可利用dataframe的left join函数实现类似效果;
若下载更新的csv文件名不是日期相关的,可以使用正则表达式,一般会索引到最新的同名文件。

如果是比较简单的前端界面,每日打开浏览器下载文件的操作也可使用selenium实现 一步到位的模板制作。
或者条件允许也可使用RPA软件如UiPath等

如有帮助,麻烦赞一个哟!

你可能感兴趣的:(python,excel,数据分析)