最近使用python自动生成excel日报表,由于各种原因使用过了openpyxl,xlwt和wlrd,pywin32。
openpyxl使用小结
安装
pip install openpyxl
使用
import openpyxl
book=openpyxl.load_workbook(filename)
sheetnames=book_sheng.sheetnames
sheet=book_sheng[sheetnames[0]]
sheet['A1']='第一个单元格'
sheet['B2']='第二个单元格'
d4=sheet['D4'].value
book.save(filename)
openpyxl使用起来很方便,我自己只是用来修改表格,其它功能没做研究。但openpyxl有个缺点就是只支持xlsx文件,不支持xls文件。而我又正好必须要使用xls文件。
xlwt、xlrd和xlutils使用小结
安装
pip install xlwt xlrd xlutils
使用
import xlrd
from xlutils.copy import copy
import xlwt
# 第一步 把原表格中的数据拷贝一份
path = 'E:\\测试文件\\test.xls'
book = xlrd.open_workbook(path)
# book = xlrd.open_workbook(path, formatting_info=True)
# 设置 formatting_info=True ,当打开表格是保存表格原有的样式,进行保存时,
# 原来的样式不会丢失
sheet = book.sheets()[0]
wb = copy(book)
ws = wb.get_sheet(0)
# 第二步 设置样式
pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN
pattern.pattern_fore_colour = 5 # 5 背景颜色为黄色
#1 = White, 2 = Red, 3 = Green, 4 = Blue, 5 = Yellow, 6 = Magenta, 7 = Cyan, 16 = Maroon,
# 17 = Dark Green, 18 = Dark Blue, 19 = Dark Yellow , almost brown), 20 = Dark Magenta, 21 = Teal, 22 = Light Gray, 23 = Dark Gray
style = xlwt.XFStyle()
style.pattern = pattern
# 第三步 写入数据并保存
ws.write(1, 1, '苹果', style) # 顺序为 row, column, value, style
ws.write(1, 2, '南瓜', style)
ws.write(1, 3, '猫头鹰', style)
ws.write(2, 2, '', style) # 单元格数据为空,背景为黄色
# value会覆盖原单元格的数据,如果不想被覆盖了,需提前把原单元格的数据获取到再写入
wb.save(path)
————————————————
版权声明:本文为CSDN博主「梦之炫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_37356900/article/details/92759471
xlrd、xlwt和xlutils配合使用可以完成excel的常用读写操作,但只支持xls格式,不支持xlsx格式,操用也略麻烦。但是在使用过程中发现个问题,用xlwt保存的excel文件在目标系统中无法正常读取,应该是在保存过程中丢失了一些隐藏格式,所以这个也没法用。
pywin32使用小结
因为是在windows上操作,所以最后选择使用pywin32。这样就没有兼容性的问题了,只需要安装有office。
安装
pip install pywin32
使用
from win32com.client import Dispatch
import win32com.client
class easyExcel:
"""A utility to make it easier to get at Excel. Remembering
to save the data is your problem, as is error handling.
Operates on one workbook at a time."""
def __init__(self, filename=None): #打开文件或者新建文件(如果不存在的话)
self.xlApp = win32com.client.Dispatch('Excel.Application')
if filename:
self.filename = filename
self.xlBook = self.xlApp.Workbooks.Open(filename)
else:
self.xlBook = self.xlApp.Workbooks.Add()
self.filename = ''
def save(self, newfilename=None): #保存文件
if newfilename:
self.filename = newfilename
self.xlBook.SaveAs(newfilename)
else:
self.xlBook.Save()
def close(self): #关闭文件
self.xlBook.Close(SaveChanges=0)
del self.xlApp
def getCell(self, sheet, row, col): #获取单元格的数据
"Get value of one cell"
sht = self.xlBook.Worksheets(sheet)
return sht.Cells(row, col).Value
def setCell(self, sheet, row, col, value): #设置单元格的数据
"set value of one cell"
sht = self.xlBook.Worksheets(sheet)
sht.Cells(row, col).Value = value
def setCellformat(self, sheet, row, col): #设置单元格的数据
"set value of one cell"
sht = self.xlBook.Worksheets(sheet)
sht.Cells(row, col).Font.Size = 15#字体大小
sht.Cells(row, col).Font.Bold = True#是否黑体
sht.Cells(row, col).Name = "Arial"#字体类型
sht.Cells(row, col).Interior.ColorIndex = 3#表格背景
#sht.Range("A1").Borders.LineStyle = xlDouble
sht.Cells(row, col).BorderAround(1,4)#表格边框
sht.Rows(3).RowHeight = 30#行高
sht.Cells(row, col).HorizontalAlignment = -4131 #水平居中xlCenter
sht.Cells(row, col).VerticalAlignment = -4160 #
def deleteRow(self, sheet, row):
sht = self.xlBook.Worksheets(sheet)
sht.Rows(row).Delete()#删除行
sht.Columns(row).Delete()#删除列
def getRange(self, sheet, row1, col1, row2, col2): #获得一块区域的数据,返回为一个二维元组
"return a 2d array (i.e. tuple of tuples)"
sht = self.xlBook.Worksheets(sheet)
return sht.Range(sht.Cells(row1, col1), sht.Cells(row2, col2)).Value
def addPicture(self, sheet, pictureName, Left, Top, Width, Height): #插入图片
"Insert a picture in sheet"
sht = self.xlBook.Worksheets(sheet)
sht.Shapes.AddPicture(pictureName, 1, 1, Left, Top, Width, Height)
def cpSheet(self, before): #复制工作表
"copy sheet"
shts = self.xlBook.Worksheets
shts(1).Copy(None,shts(1))
def inserRow(self,sheet,row):
sht = self.xlBook.Worksheets(sheet)
sht.Rows(row).Insert(1)
#下面是一些测试代码。
if __name__ == "__main__":
#PNFILE = r'c:/screenshot.bmp'
xls = easyExcel(r'd:\jason.li\Desktop\empty_book.xlsx')
#xls.addPicture('Sheet1', PNFILE, 20,20,1000,1000)
#xls.cpSheet('Sheet1')
xls.setCell('sheet1',2,'A',88)
row=1
col=1
print("*******beginsetCellformat********")
# while(row<5):
# while(col<5):
# xls.setCellformat('sheet1',row,col)
# col += 1
# print("row=%s,col=%s" %(row,col))
# row += 1
# col=1
# print("*******row********")
# print("*******endsetCellformat********")
# print("*******deleteRow********")
# xls.deleteRow('sheet1',5)
xls.inserRow('sheet1',7)
xls.save()
xls.close()
————————————————
版权声明:本文为CSDN博主「peiwang245」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/peiwang245/article/details/100544691
直接用封装好的类,间单省事了好多,实际使用也没出问题。
其它推荐
xlwings
xlwings是一个可以实现从Excel调用Python,也可在python中调用Excel的库。
http://docs.xlwings.org/en/stable/index.html
1、xlwings支持.xls读,支持.xlsx文件读写。
2、支持Excel操作。
3、支持VBA。
4、强大的转换器可以处理大部分数据类型,包括在两个方向上的numpy array和pandas DataFrame。
刚看到一篇python读写excel第三方库汇总评测的文章,很不错。如果早看到了也不用走这么多弯路。地址:
https://blog.csdn.net/qq_34617032/article/details/80433939
转载请注明:HANLEI'BLOG » python操作excel总结