python 读写Excel表格

python 读写Excel表格

一绪论

python在处理日志等数据后,需要将结果保存下来。通常会选择将结果存储到Excel文件中。
在这里我们将介绍python读写Excel的两种方式

二、读写Excel两种方式对比

xlwt 方式

需要安装三个库文件 xlrd(读Excel)xlwt(写Excel)xlutils(修改Excel)
使用 xlwt库操作Exccel表格,不能在已经存在的表格上修改数据,每次写数据都是创建一个新的Excel表格。由于他是先创建一个表格在写入数据,因此它支持Excel表格样式设计。
xlutils库通过copy功能,复制一个excel进行数据修改。

xlwings方式

xlwings操作一个库文件就可以对Excel进行读写操作,适合在事先创建好的表格上进行读写及修改该数据操作。同时它也支持新创建一个表格。

三、xlwings 安装

xlwings安装支持两种方式,在线安装和离线安装。

  • 在线安装:pip install xlwings
  • 离线安装:不能上网的电脑可以下载离线安装包进行安装。下载地址:https://pypi.org/search/?q=xlwings
    1.打开上面的地址,在首页搜索框输入 xlwings 搜索即可显示安装包。
    搜索xlwings

在这里插入图片描述
在这里插入图片描述

四、xlwings 读Excel

xlwings库官方地址:https://docs.xlwings.org/en/stable/

4.1、xlwings读写Excel简单demo
import xlwings as xw
class ExcelEdit:
    def ExcelRead(self):
        try:
            # 设置Excel打开属性,visible设置是否可视化,add_book表示是否新增Excel
            app = xw.App(visible=False, add_book=False)
            # 打开Excel文件
            table = app.books.open("D:/PythonWorkSpace/myexcel.xlsx")
            # 根据Sheet索引切换到指定Sheet,索引从0开始.切换到第一个sheet
            sheet1 = table.sheets[0]
            # 获取sheet使用的总行数
            nrows = sheet1.used_range.last_cell.row
            # 获取sheet使用的总列数
            ncols = sheet1.used_range.last_cell.column
            print('总行数',nrows)
            print("总列数",ncols)

            # 修改单元格值
            sheet1.range(1,1).value = 2
            value = sheet1.range((1, 1), (1, 10)).value
            print("读取表格数据",value)
            #保存Excel
            table.save("D:/PythonWorkSpace/myexcel.xlsx")
        except Exception as e:
            print("Excel文件读写异常信息:",e)
        finally:
            # 关闭Excel
            table.close()
            # 退出设置Excel属性
            app.quit()
            print("退出Excel程序")

ex = ExcelEdit()
ex.ExcelRead()
4.2、xlwings操作Excel详细介绍
**一、操作Excel工作薄**
#设置Excel打开属性,visible设置是否可视化,add_book表示是否新增Excel
app = xw.App(visible=False, add_book=False)
#打开Excel文件
table = app.books.open(Excel文件名称)
#创建一个新的工作薄
wb = app.books.add()
wb.save(r'e:\test.xlsx')
 
#关闭Excel
table.close()
#退出设置Excel属性
app.quit()

**二、选择Excel工作薄的sheet**

#获取Excel文件中Sheet数量
table.sheets.count

#显示当前工作薄中所有的表单
table.sheets
 
#根据Sheet索引切换到指定Sheet,索引从0开始
table.sheets[索引号]
 
#根据Sheet名称切换到指定Sheet
table.sheets[Sheet名称]

#添加sheet
ws = table.sheets.add('Sheet_name')

#修改sheet名称
ws.name = 'Sheet_name'

#将所引用的表单设为活动表单
ws.activate()

#引用活动表单
ws = table.sheets.active

#删除表单
wb.sheets('Sheet_name').delete()

**三、遍历表单内容**
#获取表单使用信息
info = ws.used_range
行数:nrows = info.last_cell.row
列数:ncols = info.last_cell.column

**四、读取sheet数据**
#获取单元格值
value = sheet.range(单元格坐标).value

#获取第1行,第1列到第10列数据
value = sheet.range((1, 1), (1, 10)).value
value = sheet.range('A1:J1').value

#获取第2行,第2列数据
value = sheet.range(2,2).value
value = sheet.range('B2').value

#整行读取:
value = sheet.range('A1').expand('right').value

#整列读取:
value = sheet.range('A1').expand('down').value

#全部读取
data = sheet.range('A1').expand().value

**五、写入Excel**
#在第1行,第1列到第10列写入数据
#单元格data可以是元组、字符串表示的单坐标和区间坐标
data = ['北京', '上海', '广州', '深圳', '香港', '澳门', '台湾']
value = sheet.range((1, 1), (1, 10)).value = data
#在第1行,第1列写入数据
value = sheet.range((1, 1)).value = "AA"

#向一行或者一列写入数据
data = ['北京', '上海', '广州', '深圳', '香港', '澳门', '台湾']
行:ws.range('A1').value = data
列:ws.range('A1').options(transpose=True).value = data

**六、删除数据**
#删除指定单元格内容
sheet.range('A1').clear()

#全部清除
sheet.clear()

5、结合业务

在上面基础模板上进行优化,将Excel根据不同的操作进行封装,分别实现打开表格、读写数据、关闭表格业务的封装。实现打开一次table,多次写入数据,最后关闭一次table。

import xlwings as xw

from src.WcsLog import WcsLog


class ExcelEdit:
    def __init__(self,excelFile,excelSheet):
        # Excel文件路径
        self.excelFile = excelFile
        self.excelSheet = excelSheet
        self.app=False
        self.table=False

    def excelOpen(self):
        try:
            # 设置Excel打开属性,visible设置是否可视化,add_book表示是否新增Excel
            self.app = xw.App(visible=False, add_book=False)
            # 打开Excel文件
            self.table = self.app.books.open(self.excelFile)
            # 根据Sheet索引切换到指定Sheet,索引从0开始.切换到第一个sheet
            self.sheet1 = self.table.sheets[self.excelSheet]
            print("Excel文件打开:",self.excelFile)
            return True
        except Exception as e:
            print("Excel文件打开失败:",e)
            return False


    def excelWrite(self,dataValue,position):
        #写入sheet的数据
        dataValue = dataValue
        #写入sheet单元格坐标位置
        position = position
        try:
            # 单元格写入
            self.sheet1.range(position).value = dataValue
            print("写入"+str(position)+":"+str(dataValue))
        except Exception as e:
            print("Excel读写失败:", e)

    def excelClose(self):
        try:
            if(self.table):
                # 保存Excel
                self.table.save(self.excelFile)
        except Exception as e:
            print("Excel文件保存失败:", e)
        finally:
            if(self.table):
            # 关闭Excel
                self.table.close()
                print("关闭Excel")
            # 退出设置Excel属性
            if(self.app):
                self.app.quit()
                print("退出Excel程序")
    @staticmethod
    def excelDispatch(datafile,excelfile,sheet=0):
        # datafile 写入Excel的数据源
        # excelfile 操作的Excel目标文件
        # sheeet Excel文件的sheet表格
        # position 写入sheet单元格坐标位置

        ex = ExcelEdit(excelfile,sheet)
        if (ex.excelOpen()):
            for i in datafile:
                dateValue = datafile[i]['date']
                positionValue = datafile[i]['row'], date[i]['col']
                ex.excelWrite(dateValue, positionValue)
        ex.excelClose()



# tt = WcsLog()
# listfile = tt.allLogs('D:/PythonWorkSpace/newlog/')
#
# date = tt.logAnalusis(listfile)

datafile = date={'c': {'date': '[2019-09-28:23:11:35+0800]', 'row': 5, 'col': 1}, 'a': {'date': '[2019-09-28:23:09:40+0800]', 'row': 4, 'col': 1}, 'd': {'date': '[2019-09-28:23:09:56+0800]', 'row': 6, 'col': 1}}
excelfile = "D:/PythonWorkSpace/my3.xlsx"
ExcelEdit.excelDispatch(datafile,excelfile)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值