Python对Excel的常规操作 之 读取,写入(保留原格式)
前言
使用Python读写Excel常用的库有win32com和xlrd、xlwd。其中win32com可读可写,它对Excel的操作更类似于人的手动操作,通过打开文件,读写,关闭软件的方式完成操作,因此如果该文件已经打开或被占用,可能导致某些操作失败。xlrd用于读取Excel文件,xlwd用于写入Excel文件,这两个库并没有直接调用Excel程序打开和关闭的动作,因此处理速度要高于使用win32com的方式。
TIPS: 如果想把某些抓来的数据,写入已经设计好的Excel文件中(尤其是比较复杂的,有很多合并的单元格,颜色,边框),使用xlwd的方式就不太方便,即使可以使用xlwd做出来,但需要花费较长时间。因此本文主要讲解xlrd的读取功能和win32com的读写功能。
xlrd的读取
import xlrd
Base_data = xlrd.open_workbook(path) # path为读取Excel文件路径
Data = Base_data.sheet_by_name("Parameter") # 使用Sheet名作为索引,读取该表
# 至此,文件已经读入Python了,可以做一些读取动作
# Tips: xlrd 的索引是从0开始的,这意味着从Excel文件看到的第一列第一行对应的索引应该为(0, 0),而非(1, 1)
# 列读取
Data_1 = Data.col_values(9) # 读取第10列,存至列表Data_1
Data_2 = Data.col_values(10) # 读取第11列,存至列表Data_2
#行读取
data_3 = Data.row_values(0) # 读取第1行,存至列表Data_3
data_4 = Data.row_values(1) # 读取第2行,存至列表Data_4
# 单元格读取
data_5 = Data.cell_value(i, j) # 读取第i行,第j列数据存至Data_5
# 获取行数列数
rows = Data.nrows # 获取行数
cols = Data.ncols # 获取列数
win32com 的读写
使用win32com进行读写时速度会慢很多,因此推荐读取使用xlrd库,写入使用win32com。但是win32com好处是它可以保存原文件格式,同时还可以打开受密码保护的文件,也可以对格式进行调整,如加粗字体、单元格添加颜色背景等(用到时会陆续更新)
from win32com import client
xlApp_1 = client.Dispatch("Excel.Application")
xlApp_1.Visible = False # 软件不可见 True为可见
xlBook_1 = xlApp_1.Workbooks.Open("D:\LEON\Sevenstar\Files\Template\Special Mode Template.xlsx")
xlSheet_1 = xlBook_1.Worksheets(1) # 打开第1个表
xlSheet_1 = xlBook_1.Worksheets("CSDN") # 打开名为“CSDN”的sheet
info_1 = xlSheet_1.UsedRange
nrows_1 = info_1.Rows.Count # sheet1行数
ncols_1 = info_1.Columns.Count # sheet1列数
# 读取
print(xlSheet_1.Cells(i, j).Value)
# 写入
xlSheet_1.Cells(i, j).Value = "CSDN"
# 保存
xlBook_1.Save()
# 另存为
xlBook_1.SaveAs(path) # path 为另存路径
# 退出表格
xlBook_1.Close(True)
# 关闭Excel软件,可关闭你打开的全部Excel文件
xlApp_1.Quit()
"""
修改格式
"""
# 字体加粗
xlSheet_report.Cells(i, j).Font.Bold = True
#单元格背景颜色
xlSheet_report.Cells(i, j).Interior.ColorIndex = 45
下图是单元格背景颜色对应表,如红色背景,则 xlSheet_report.Cells(i, j).Interior.ColorIndex = 3
写在后面
在写入Excel时,可以使用 for循环 + 列表索引 的方式将所需的内容写入文件。
# 将1,2,3,4,5 写入第一列 1~5行
List = [1, 2, 3, 4, 5]
for i in range(0, len(List), 1):
xlSheet_report.Cells(i, 1).Value = List[i]
使用Python操作Excel在工作中会经常用到,在后面的工作中,如果遇到其他有用的功能会陆续补充。