xlrd读取Excel文件
python读取excel的单元格返回类型
Python通过xlrd对Excel进行读取操作时,返回的数据类型(ctype)有下面5中类型:
0 – empty:空
1 – string:字符串
2 – number:数字
3 – date:日期
4 – boolean:布尔
5 – error
import xlrd
import os
from LYKION.self.log import Logger
from datetime import datetime
from xlrd import xldate_as_tuple
'''
python读取excel中单元格的内容返回的5种类型
0 --empty:空
1 --string:字符串
2 --number:数字
3 --date:日期
4 --boolean:布尔
5 --error
'''
excel_path = os.path.join(os.getcwd(), 'extra.xlsx') # Excel文件路径
Logger().info('Excel文件的路径:' + excel_path)
excel_file = xlrd.open_workbook(excel_path) # 打开Excel文件
# table = excel_file.sheet_by_index(1) # 通过索引打开
# table = excel_file.sheet_by_name('mode') # 通过名字打开
table = excel_file.sheets()[1] # 通过索引打开
Logger().info('已经打开的工作簿的名字:' + table.name)
Logger().info('**********开始读取Excel单元格的内容**********')
all_content = []
for i in range(table.nrows):
row_content = []
for j in range(table.ncols):
ctype = table.cell(i, j).ctype # 获取单元格返回的数据类型
cell_value = table.cell(i, j).value # 获取单元格内容
if ctype == 2 and cell_value % 1 == 0: # 是否是数字类型
cell_value = int(cell_value)
elif ctype == 3: # 是否是日期
date = datetime(*xldate_as_tuple(cell_value, 0))
cell_value = date.strftime('%Y/%m/%d %H:%M:%S')
elif ctype == 4: # 是否是布尔类型
cell_value = True if cell_value == 1 else False
row_content.append(cell_value)
all_content.append(row_content)
# Logger().info('[' + ', '.join("'" + str(element) + "'" for element in row_content) + ']')
Logger().info(row_content)
# Logger().info(all_content)
Logger().info('**********Excel单元格的内容读取完毕**********')
Logger().info('行数:%d' % table.nrows) # 打印行数
Logger().info('列数:%d' % table.ncols) # 打印列数
Logger().info('========================')
Logger().info('第二行的内容:' + str(table.row_values(1))) # 打印一行的内容
Logger().info('第二列的内容:' + str(table.col_values(1))) # 打印一列的内容
Logger().info('========================')
# 打印单元格的内容(以下打印的是第二行第二列的单元格的内容)
Logger().info(table.cell(1, 1).value)
Logger().info(table.cell_value(1, 1))
Logger().info(table.row(1)[1].value)
Logger().info('========================')
1)注意
在xlutils.copy使用保存Excel文件时,只能保存后缀为xls的文件,不能保存xlsx的文件
# -*- coding:utf-8 -*-
import xlrd
import os
import time
from xlutils.copy import copy
filePath = os.path.join(os.getcwd(), 'text.xlsx')
book = xlrd.open_workbook(filePath)
fs = copy(book)
ws = fs.get_sheet(0)
ws.write(4, 0, '天府软件园')
fs.save('new01.xls')
openpyxl读取Excel文件
在openpyxl中,有三个概念:Workbooks,Sheets,Cells:
1、Workbook就是一个打开的excel文件,即excel工作簿
2、Sheet是工作簿中的一张表,即工作表
3、Cell就是一个简单的单元格
openpyxl就是围绕着这三个概念进行的,不管读写都是“三板斧”:打开Workbook,定位Sheet,操作Cell
向Excel写入内容
以下过程:创建excel→写入内容→保存excel
'''
以下过程:创建excel→写入内容→保存excel
'''
wb = openpyxl.Workbook() # 创建一个新的excel文件(还未保存)
# ws = wb.active # 激活sheet,默认至少会创建一个sheet
ws = wb.create_sheet(title='TestCase', index=0) # 直接创建一个自定义title的sheet;index=0:表示插在开头,补贴写则表示插在最末
ws.cell(1, 1).value = 'Hello World' # 给单元个赋值
'''
1、rang(x,y)的边界不包含x,但包含y;例如range(2,5) 表示[2,5),即(2,3,4)
2、openpyxl的索引是从1开始的,与excel本身的序号相同;例如ws.cell(1, 1) 表示第一行第一例
3、注意:excel文件处于打开状态时,是不能保存成功
'''
# 用for循环的方式连续向单元格中写入内容
for i in range(2, 5):
for j in range(2, 6):
ws.cell(i, j).value = i*j
wb.save('lykion.xls') # 保存excel文件,写入完成后,一定要保存
读取Excel的内容
以下过程:打开excel文件→获取工作簿(sheet)→读取单元格内容
'''
以下过程:打开excel文件→获取工作簿(sheet)→读取单元格内容
'''
filePath = os.path.join(os.getcwd(), 'text.xlsx')
wb = openpyxl.load_workbook(filePath) # 打开excel文件
# ws = wb.get_sheet_by_name('示例文件') # 通过工作簿的名字(sheet)打开
ws = wb['TestCase']
res = ws.cell(row=1, column=1).value # 获取单元格的内容
# print(res)
# print(wb.sheetnames) # 显示excel文件的所有sheet名字
print(ws.min_row, ws.max_row, ws.max_column, ws.min_column) # 单元格的行数、列数; max_row:最大行、max_column:最大列
print('*******************************************************')
all_content = []
# 方式一、用for循环的方式获取所有单元格的内容
# for i in range(1, ws.max_row+1):
# row_content = []
# for j in range(1, ws.max_column+1):
# value = ws.cell(row=i, column=j).value
# row_content.append(value)
# all_content.append(row_content)
# print(row_content)
# print('*******************************************************')
# print(all_content)
# print('===========================================================')
# # 方式二、用for循环的方式遍历每个单元格
# all_row = []
# for row in ws.rows: # 按行获取单元格(Cell对象) - 生成器
# ev_row = []
# for cell in row:
# value = cell.value
# ev_row.append(value)
# all_row.append(ev_row)
# print(ev_row)
# print('*******************************************************')
# print(all_row)
# 方式三
all_value = []
for row in ws.values: # 按行获取表格的内容(数据) - 生成器
all_value.append(row)
print(all_value)