【python3.7】:使用xlrd、xlwt、openpyxl操作excel

一、xlrd

import xlrd
# 读取文件
data = xlrd.open_workbook('excelFile.xls')
# 通过索引顺序获取
table = data.sheets()[0]
# 通过索引顺序获取
table = data.sheet_by_index(0)
# 通过名称获取
table = data.sheet_by_name(u'Sheet1')
# 获取整行的值(数组)
table.row_values(行号)
# 获取整列的值(数组)
table.col_values(列号)
# 获取行数
nrows = table.nrows
# 获取列数
ncols = table.ncols
# 循环行列表数据
for i in range(0,nrows):
#从第一行开始至结尾,修改数字可以改变起始行
print(table.row_values(i))
# 根据指定的行与列获取单元格的值
cell_A1 = table.cell(0, 0).value
cell_C4 = table.cell(2, 3).value  #第三行--第二列的值
cell_D2 = table.cell(-1, 3).value  #最后一行--第二列的值
# 左为行号,右为列号,从0开始计算,即0为第一行(列)


# 根据行列索引获取单元格的值
cell_A1 = table.row(0)[0].value
cell_A2 = table.col(1)[0].value

二、xlwt

# 查看该模块共有多少条数据
string = driver.find_element_by_xpath('/html/body/div[1]/div/div[3]/div[1]').text
#string = '显示1到10,共2655记录'
nums = re.findall('\d+\.?',string)  #正则获取string的数字
num = nums[2]  #2655
NUM = int(num)  #转换成int类型
print("共有数据%s条" % NUM)

# 写入数据table.write(行,列,value)
table.write(0,0,'test')

#导出全部数据
driver.find_element_by_xpath('//*[@id="searchBox"]/ul[1]/li[2]/a').click()  # 导出全部
time.sleep(3)
excelpath = r'C:\Users\Ymd\Downloads\部门用车分析表.xls'  #文件全路径
tableopen = xlrd.open_workbook(excelpath)  #打开excel
table = tableopen.sheet_by_name('Sheet1')  #进入Sheet1表
h = table.nrows  #行
print("表数据的行数为:%s" % h)

三、openpyxl

1、创建并写入

# -*- coding: utf-8 -*-
#创建一个excel 文件,并写入不同类的内容
from openpyxl import Workbook
wb = Workbook()    #创建文件对象

ws = wb.active     #获取第一个sheet

ws['A1'] = 42      #写入数字
ws['B1'] = "你好"+"automation test"   #写入中文(unicode中文也可)

ws.append([1, 2, 3])    #写入多个单元格

import datetime
import time
ws['A2'] = datetime.datetime.now()    #写入一个当前时间

#写入一个自定义的时间格式
ws['A3'] =time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())

# Save the file
wb.save("e:\\sample.xlsx")

2、实例操作

# coding:utf-8
import openpyxl

    #导出模板并写入内容
    driver.find_element_by_xpath('//*[@id="salarypayForm"]/table/tbody[1]/tr[7]/td[2]/span[2]/a').click()  # 点击下载模板
    time.sleep(2)
    workbook = openpyxl.load_workbook(r'C:\Users\Ymd\Downloads\工资统计表.xlsx')      #打开下载的Excel
    sheet = workbook['Sheet1']    # 进入Excel第一个表
    h = sheet.max_row  # 行数
    l = sheet.max_column  # 列数
        
    # 写入实际内容(第二行)
    print("系统即将执行Excel写入...")        
    sheet['A2'] = '**'
    sheet['C2'] = '41*******211305560'
    sheet['D2'] = '东北大区'
    sheet['E2'] = '大庆项目'
    sheet['F2'] = '软件测试'
    sheet['G2'] = '软件测试工程师'
    sheet['H2'] = '试用期'
    sheet['I2'] = '初级'
    sheet['J2'] = '初级'
    sheet['K2'] = '2018-09'
    sheet['L2'] = '*200'
    sheet['V2'] = '*500'
    sheet['AD2'] = '*500'
    sheet['AE2'] = '*100'
    sheet['AG2'] = '48********41641'
    sheet['AH2'] = '**银行'
    sheet['AI2'] = '*11'
    sheet['AJ2'] = '**'
    sheet['AK2'] = '普通员工'

    workbook.save(r'C:\Users\Ymd\Downloads\工资统计表.xlsx') # 保存

3、单元格类型

# -*- coding: utf-8 -*-
from openpyxl import Workbook
from openpyxl import load_workbook
import datetime
wb = load_workbook('e:\\sample.xlsx')

ws=wb.active
wb.guess_types = True

ws["A1"]=datetime.datetime(2010, 7, 21)
print (ws["A1"].number_format)

ws["A2"]="12%"
print (ws["A2"].number_format)

ws["A3"]= 1.1
print (ws["A4"].number_format)

ws["A4"]= "中国"
print (ws["A5"].number_format)
wb.save("e:\\sample.xlsx")

'''
执行结果:
yyyy-mm-dd h:mm:ss
0%
General
General
如果是常规,显示general,如果是数字,显示'0.00_ ',如果是百分数显示0%
数字需要在Excel中设置数字类型,直接写入的数字是常规类型
'''

4、操作单元格

# -*- coding: utf-8 -*-
from openpyxl import Workbook
wb = Workbook()  # 得到一个全新的workbook
ws1 = wb.create_sheet("Mysheet")   #创建一个sheet

ws1["A1"]=123.11
ws1["B2"]="你好"
d = ws1.cell(row=4, column=2, value=10)  # 第4行、第2列、10

print (ws1["A1"].value)
print (ws1["B2"].value)
print (d.value)

wb.save("e:\\sample.xlsx")

5、批量操作单元格

# -*- coding: utf-8 -*-
from openpyxl import Workbook
wb = Workbook()

ws1 = wb.create_sheet("Mysheet")           #创建一个sheet

ws1["A1"]=1
ws1["A2"]=2
ws1["A3"]=3

ws1["B1"]=4
ws1["B2"]=5
ws1["B3"]=6

ws1["C1"]=7
ws1["C2"]=8
ws1["C3"]=9

#操作单列
print (ws1["A"])
for cell in ws1["A"]:   #遍历A列单元格
    print (cell.value)

#操作多列,获取每一个值
print (ws1["A:C"])
for column in ws1["A:C"]:  #按列遍历单元格
    for cell in column:
        print (cell.value)

#操作多行
row_range = ws1[1:3]
print (row_range)
for row in row_range:  #按行遍历单元格
    for cell in row:
        print (cell.value)

print ("*"*50)

for row in ws1.iter_rows(min_row=1, min_col=1, max_col=3, max_row=3):  
#按行遍历指定范围内的所有单元格
    for cell in row:
        print (cell.value)

#获取所有行
print (ws1.rows)
for row in ws1.rows:
    print (row)

print ("*"*50)

#获取所有列
print (ws1.columns)
for col in ws1.columns:
    print (col)

wb.save("e:\\sample.xlsx")

6、获取所有的行对象

#coding=utf-8
from openpyxl import Workbook
from openpyxl import load_workbook
wb = load_workbook('e:\\sample.xlsx')
ws = wb.active   #激活工作表
rows = []   # 返回指定单元格的行号
for row in ws.iter_rows():    #遍历所有单元格的函数
            rows.append(row)
print (rows)   #所有行
print (rows[0])   #获取第一行
print (rows[0][0])   #获取第一行第一列的单元格对象
print (rows[0][0].value)  #获取第一行第一列的单元格对象的值
 
print (rows[len(rows)-1])   #获取最后行 print rows[-1]
print (rows[len(rows)-1][len(rows[0])-1])   #获取第后一行和最后一列的单元格对象
print (rows[len(rows)-1][len(rows[0])-1].value)   #获取第后一行和最后一列的单元格对象的值

7、获取所有的列对象

#coding=utf-8
from openpyxl import Workbook
from openpyxl import load_workbook
wb = load_workbook('e:\\sample.xlsx')
ws=wb.active
cols=[]
cols = []
for col in ws.iter_cols():
    cols.append(col)
 
print (cols)   #所有列
print (cols[0])   #获取第一列
print (cols[0][0])   #获取第一列的第一行的单元格对象
print (cols[0][0].value)   #获取第一列的第一行的值
 
print ("*"*30)
print (cols[len(cols)-1])   #获取最后一列
print (cols[len(cols)-1][len(cols[0])-1])   #获取最后一列的最后一行的单元格对象
print (cols[len(cols)-1][len(cols[0])-1].value)   #获取最后一列的最后一行的单元格对象的值

8、复制sheet

# -*- coding: utf-8 -*-

from openpyxl import Workbook
wb = Workbook()

ws1 = wb.create_sheet("Mysheet")           #创建一个sheet
ws1.title = "New Title"                    #设定一个sheet的名字
ws2 = wb.create_sheet("Mysheet", 0)      #设定sheet的插入位置 默认插在后面
ws2.title = u"你好"    #设定一个sheet的名字 必须是Unicode

ws1.sheet_properties.tabColor = "1072BA"   #设定sheet的标签的背景颜色
ws2.sheet_properties.tabColor = "1072BA"
'''
#获取某个sheet对象
print (wb.get_sheet_by_name(u"你好"))
print (wb["New Title" ])

#获取全部sheet 的名字,遍历sheet名字
print (wb.sheetnames)

for sheet_name in wb.sheetnames:
    print (sheet_name)

print ("*"*50)

for sheet in wb:
    print (sheet.title)
'''
#复制一个sheet
wb["New Title" ]["A1"]="zeke"
source = wb["New Title"]
target = wb.copy_worksheet(source)  #由此得到一个复制过来的sheet

ws3 = wb.copy_worksheet(wb['New Title'])
ws3.title = 'new2'

wb.copy_worksheet(wb['New Title']).title = 'hello'  # 又复制一个

wb.save("e:\\sample.xlsx")

 

你可能感兴趣的:(Selenium+Python)