【python 的各种模块】(2) 在python里使用xlrd 和xlwt操作Excel

目录

1 什么是xlrd 和 xlwt

2 导入xlwt

3 xlwt相关语法

3.1 创建新的workbook

3.2 创建新的sheet

3.3 保存workbook

4 python里表格的形式

4.1 矩阵

4.2 EXCEL的数据形式== 完全等于矩阵的数字结构

4.3 python里矩阵

5 xlwt相关的具体代码

5.1 代码

5.2 结果

5.3 要注意的问题

5.3.1 不能是已有的表,会报错:权限拒绝

5.3.2 保存的格式

5.3.3 路径的方式

6 导入xlrd

6.1 可能的问题

6.2 安装xlrd后,可以查看安装的版本号

7 xlrd的相关语法

7.1  获取现有的EXCEL文件workbook

7.2 获取wb下的sheets表的信息

7.2.1 逐级获得wb的下级对象数组,sheets对象数组

7.2.2 直接获得wb的下级sheets对象的一些属性,用特定方法

7.2.3 获取某个具体的sheet

7.2.4 获取某个具体的sheet 里的行数列数等

7.2.5 获取某个具体的sheet 里的单元格,范围内容呢?

8  xlrd相关的具体代码

8.1 一段试验代码


1 什么是xlrd 和 xlwt

  • 一般来说
  • xlrd是用来读取excel的模块
  • xlwt是用来写入excel的模块

2 导入xlwt

import xlwt

3 xlwt相关语法

3.1 创建新的workbook

wb = xlwt.Workbook(encoding='utf-8')

3.2 创建新的sheet

sh = wb.add_sheet("test")

3.3 保存workbook

一定要保存后才能看到修改的结果

savePath = r'C:\Users\Administrator\Desktop\1002.xls'
wb.save(savePath)

4 python里表格的形式

4.1 矩阵

先回忆下数学里的矩阵   Ai*j

4.2 EXCEL的数据形式== 完全等于矩阵的数字结构

行=矩阵的行

列=矩阵的列

4.3 python里矩阵

矩阵的保存形式是这样的

列表:一般是指矩阵里的1行,

因此列表的长度:一般是指矩阵的行数

列表的某1个元素的长度:一般是指矩阵的列数

head = ['列1','列2','列3']
data = [['a11','a12','a13'],['a22','a22','a23']]

5 xlwt相关的具体代码

5.1 代码

import xlwt
wb = xlwt.Workbook(encoding='utf-8')
sh = wb.add_sheet("test")
head = ['列1','列2','列3']
data = [['a11','a12','a13'],['a22','a22','a23']]
for i in head:
	sh.write(0,head.index(i),i)
for i in range(len(data)):
    for j in range(len(data[i])):
        sh.write(i+1,j,data[i][j])
savePath = r'C:\Users\Administrator\Desktop\1002.xls'
wb.save(savePath)

5.2 结果

5.3 要注意的问题

5.3.1 不能是已有的表,会报错:权限拒绝

5.3.2 保存的格式

  • 只能是xls
  • 不能是xlsx
  • 不能是xlsm
  • 后面2种保存后会打不开

5.3.3 路径的方式

  • savePath = r'C:\Users\Administrator\Desktop\1002.xls'
  • savePath = 'C:\\Users\\Administrator\\Desktop\\1002.xls'

6 导入xlrd

  • import xlrd

6.1 可能的问题

  • 这里可能会有问题,比如我用的anaconda,默认只安装了xlwt,但是没有安装xlrd
  • import xlrd 会报错,找不到 xlrd模块
  • 然后呢
  • 你需要在anaconda里用cmd或者powershell,去运行命令行
  • 输入 conda list  或者 pip show xlrd 可以发现没有xlrd
  • 安装:pip install xlrd 即可

6.2 安装xlrd后,可以查看安装的版本号

import xlrd
print(xlrd.__version__)

7 xlrd的相关语法

7.1  获取现有的EXCEL文件workbook

  • xlrd.open_workbook(path) 返回的就是对应的wb文件的对象

import xlrd
print(xlrd.__version__)

##创建wb对象,打开对应的wb表对象
wb=xlrd.open_workbook(r'C:\Users\Administrator\Desktop\2001.xls')

 

7.2 获取wb下的sheets表的信息

7.2.1 逐级获得wb的下级对象数组,sheets对象数组

  • 首先,和EXCEL本身的结构一样
  • workbook的下级对象是sheets 对象
  • sheets=wb.sheets()  返回的是一个对象数组 [Sheet 0:<sheet101>, Sheet 1:<sheet102>, Sheet 2:<sheet103>]
  • 取得数组长度, len(sheets) ,而不是sheets.count

#获取wb对象下的,sheet对象,且是个对象数组
sheets=wb.sheets()
print(sheets)
print(len(sheets))  
print(sheets.count) #错误sheets.count <built-in method count of list object at 0x00000205AD7AE5C0>

  • 取得sheets对象后,也可以取得其中sheet对象的属性,比如sheet.name等

#直接获取sheet对象的.属性呢?可以么?可以,但只能是 sheet.name 没有 sheets.name
sheets=wb.sheets()
for sh in sheets:
    print(sh.name)

7.2.2 直接获得wb的下级sheets对象的一些属性,用特定方法

  • 也可以直接去获取wb对象下的sheets对象的名字数组,这不是对象数组,而是字符串数组
  • sheetnames=wb.sheet_names()
  • 直接获得是字符串数组  ['sheet101', 'sheet102', 'sheet103']

#也可以直接去获取wb对象下的sheets对象的名字数组,这不是对象数组,而是字符串数组
sheetnames=wb.sheet_names()
print(sheetnames)

7.2.3 获取某个具体的sheet

获取某个具体的sheet有3种方法

  • 方法1#取wb得sheet对象数组里得某一个
  • sh1=wb.sheets()[0]

  • 方法2#根据sheet的次序去取
  • sh2=wb.sheet_by_index(1)

  • 方法3 #根据具体的sheet显示名去取
  • EXCEL里sheet的显示名不同于程序内部的真实name或者index
  • sh3=wb.sheet_by_name("sheet101")

  • 报错处理
  • 但是要注意,按照这些方法查找,需要确实有对应的sheet否则报错
  • #sh4=wb.sheet_by_name("sheet1001")   #错误sheet名会引起报错

  • 返回内容
  • #要注意一般取得都是sheet对象,取得对象属性还需要用 sh1.name等

7.2.4 获取某个具体的sheet 里的行数列数等

  • rows=sh1.nrows
  • columns=sh1.ncols   #写sh1.ncolumns报错...


rows=sh1.nrows
columns=sh1.ncols   #写sh1.ncolumns报错...
print(rows)
print(columns)

print("{0}这个表有{1}行{2}列".format(sh1.name,rows,columns))
print(sh1.name,"这个表有",rows,"行",columns,"列")
print(f"sh1.name这个表有rows行columns列")
print("%s这个表有%d行%d列"  %(sh1,rows,columns))

7.2.5 获取某个具体的sheet 里的单元格,范围内容呢?

8  xlrd相关的具体代码

8.1 一段试验代码

  • 打开EXCEL的workbook
  • 找到sheets, sheet_names(),或者具体的sheet
  • 取得sheet内的内容
import xlrd
print(xlrd.__version__)

##创建wb对象,打开对应的wb表对象
wb=xlrd.open_workbook(r'C:\Users\Administrator\Desktop\2001.xls')

#获取wb对象下的,sheet对象,且是个对象数组
sheets=wb.sheets()
print(sheets)
print(len(sheets))  
print(sheets.count) #错误sheets.count <built-in method count of list object at 0x00000205AD7AE5C0>

#也可以直接去获取wb对象下的sheets对象的名字数组,这不是对象数组,而是字符串数组
sheetnames=wb.sheet_names()
print(sheetnames)

#直接获取sheet对象的.属性呢?可以么?可以,但只能是 sheet.name 没有 sheets.name
sheets=wb.sheets()
for sh in sheets:
    print(sh.name)

print()
##获取某个具体的sheet
#取wb得sheet对象数组里得某一个
sh1=wb.sheets()[0]
#根据sheet的次序去取
sh2=wb.sheet_by_index(1)
#根据具体的sheet显示名去取(EXCEL里sheet的显示名不同于程序内部的真实name或者index)
sh3=wb.sheet_by_name("sheet101")
#sh4=wb.sheet_by_name("sheet1001")   #错误sheet名会引起报错


#从wb的sheet数组里取得是对象,取得对象属性还需要用 sh1.name等
print(sh1)   
print(sh1.name) 
print(sh2)
print(sh3)

print()
##获取sheet里的内容


rows=sh1.nrows
columns=sh1.ncols   #写sh1.ncolumns报错...
print(rows)
print(columns)

print("{0}这个表有{1}行{2}列".format(sh1.name,rows,columns))
print(sh1.name,"这个表有",rows,"行",columns,"列")
print(f"sh1.name这个表有rows行columns列")
print("%s这个表有%d行%d列"  %(sh1,rows,columns))


#sheet1=sheetname[0]
#print(sheet1)

#获得sheet内的内容
#sheet1_data=sheet1.sheet_by_name("sheet101")
#print(sheet1.data.name)
#print(f"表:{sheet1_data.name} \n 行数:" sheet1_data.nrows \n 列数:" sheet1_data.ncolumns)



#关于xlrd,xlwt的格式设置,我觉得并不重要,需要用的时候再查把

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值