最新消息:重新回归WordPress,我要比较认真的开始更新我的博客了。

python操作excel总结

程序问题 hanlei 454浏览

最近使用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总结