读入 Excel 文件(简单格式)
import pandas as pd
dict_xl = pd.read_excel('data.xlsx',sheet_name=None,engine='openpyxl')
df_xl = pd.read_excel('data.xlsx',sheet_name='sheet1',engine='openpyxl')
调用 pandas 的 read_excel() 读入;
sheet_name 参数若等于 None,则读入整个文件所有的 sheet, 数据格式为字典,key 为各个 sheet 的名称,内容为 dataframe 格式;
sheet_name 参数若等于其中某个 sheet 名称,则读入单个 sheet, 数据格式为 dataframe;
engine='openpyxl',指定使用 openpyxl 库进行读写,同时支持 .xls 和 .xlsx 格式。
读入 CSV 文件
df_csv = pd.read_csv("data.csv")
与 excel 类似,默认第一行为表头列名。
写入 Excel 文件(简单格式)
import pandas as pd
writer = pd.ExcelWriter('result.xlsx')
df_data.to_excel(writer)
writer.save()
调用 pandas 将 dataframe 保存为 excel 文件,简单格式,数据校验、透视表等附加信息会丢失。
读写 Excel 文件(复杂格式)
import os
import win32com.client
# 获取excel进程
xlApp = win32com.client.Dispatch('Excel.Application')
# 直接覆盖不提示
xlApp.DisplayAlerts = False
# 用xlApp打开xlsx 用于修改和写入数据
path = os.path.dirname(os.path.abspath(__file__))
xlBook = xlApp.Workbooks.Open(path+'\data.xlsx', ReadOnly = False)
# 获取 sheet1
sheet = xlBook.Worksheets('sheet1')
# 单元格赋值
sheet.Cells(1,1) = '计算结果'
# 将 dataframe 数据一次性填充到 sheet 中指定范围
sheet_Range(sheet.Cells(2,1),sheet.Cells(2 + df.shape[0]-1, _col+df.shape[1]-1)).Value = df.values
#保存
# xlBook.Close(SaveChanges=1)
xlBook.SaveAs(path+'\result.xlsx')
# 结束excel进程
xlApp.quit()
del xlApp
win32com 本质上调用本地 excel 进程,因此必须关闭所有当前打开的 excel 窗口;
win32com 需要获取到文件的绝对目录,通常用 os.path 获取;
xlApp 获取到进程;xlBook 操作 excel 文件; sheet 操作单个 sheet; Cells 操作单元格; Range 操作单元格范围;
xlBook.Close(SaveChanges=1) 将 workbook 保存到当前文件;
xlBook.SaveAs(path+'\result.xlsx') 将 workbook 另存为新的文件;
win32com 操作 excel 文件的优点是对数据验证、透视表等附加信息无损,本质上等同于 excel 自身操作;缺点是系统必须安装 excel,速度慢,若程序出错会遗留 EXCEL.exe 进程,下次运行前必须手动清除( taskkill /im excel.exe /F ),暂时未找到完美的事后处理方案。