本文对xlsx文件的读写使用以下的库,已安装的可以忽略:
"""
需安装的库文件:
pip install xlrd==1.2.0
pip install pywin32
换源网址:
- 豆瓣:http://pypi.douban.com/simple/
- 中科大:https://pypi.mirrors.ustc.edu.cn/simple/
- 清华:https://pypi.tuna.tsinghua.edu.cn/simple
换源安装,例如:pip install pywin32 -i https://pypi.tuna.tsinghua.edu.cn/simple
"""
xlsx文件的读操作:
1.读一行数据
# 读一行
# 参数解读:get_row(excel的路径,选择的子表格名字,所读行的位置)
def get_row(file_path, subtable, row_location):
# 打开excel表格
filename = xlrd.open_workbook(file_path)
# 打印excel所有子表格的名字
form_name = filename.sheet_names()
# 获取选择子表格的位置
subtable_location = form_name.index(subtable)
# 选择子表格为操作对象
sheet = filename.sheet_by_index(subtable_location)
# 获取选取对象的行列值
rowNum = sheet.nrows
colNum = sheet.ncols
# 获取某一行的数据
row_allvalue = sheet.row_values(row_location)
# 返回的结果为列表,例如:[1,2,3,4]
return row_allvalue
2.读多行数据
# 读多行数据
# 参数解读:get_rows(excel的路径,选择的子表格名字,所读行开始的位置,所读行结束的位置)
def get_rows(file_path, subtable, start, end):
# 打开excel表格
filename = xlrd.open_workbook(file_path)
# 打印excel所有子表格的名字
form_name = filename.sheet_names()
# 获取选择子表格的位置
subtable_location = form_name.index(subtable)
# 选择子表格为操作对象
sheet = filename.sheet_by_index(subtable_location)
# 获取多行数据
value_library = []
for row_location in range(int(start), int(end)+1):
row_allvalue = sheet.row_values(row_location)
value_library.append(row_allvalue)
return value_library
3.读全部数据
# 读全部数据
# 参数解读:get_all(excel的路径,选择的子表格名字)
def get_all(file_path, subtable):
# 打开excel表格
filename = xlrd.open_workbook(file_path)
# 打印excel所有子表格的名字
form_name = filename.sheet_names()
# 获取选择子表格的位置
subtable_location = form_name.index(subtable)
# 选择子表格为操作对象
sheet = filename.sheet_by_index(subtable_location)
# 获取选取对象的行数
rowNum = sheet.nrows
value_library = []
for row_location in range(rowNum):
row_allvalue = sheet.row_values(row_location)
value_library.append(row_allvalue)
return value_library
4.读一列数据
# 读一列
# 参数解读:get_col(excel的路径,选择的子表格名字,读列的位置)
def get_col(file_path, sheet_name, local):
# 打开excel表格
filename = xlrd.open_workbook(file_path)
# 打印excel所有子表格的名字
form_name = filename.sheet_names()
# 获取选择子表格的位置
subtable_location = form_name.index(sheet_name)
# 选择子表格为操作对象
sheet = filename.sheet_by_index(subtable_location)
cols = sheet.col_values(local)
return cols
5.读多列数据
# 读多列
# 参数解读:get_cols(excel的路径,选择的子表格名字,读列开始的位置,读列结束的位置)
def get_cols(file_path, sheet_name, start, end):
# 打开excel表格
filename = xlrd.open_workbook(file_path)
# 打印excel所有子表格的名字
form_name = filename.sheet_names()
# 获取选择子表格的位置
subtable_location = form_name.index(sheet_name)
# 选择子表格为操作对象
sheet = filename.sheet_by_index(subtable_location)
final_result = []
for i in range(start, end+1):
cols = sheet.col_values(i)
final_result.append(cols)
return final_result
xlsx文件的写操作:
1.写一行数据
# 写一行
# 参数解读:write_data(excel的路径,选择的子表格名字,所在的行位置,写的内容(以列表的形式写入))
def write_data(file_path, subtable, row, value):
xlapp_1 = client.Dispatch("Excel.Application")
xlapp_1.Visible = False
filename = xlapp_1.Workbooks.Open(file_path)
sheet = filename.Worksheets(subtable)
num = 1
for i in value:
sheet.Cells(row, num).value = i
num += 1
filename.Save()
filename.Close(True)
2.写多行数据
# 写多行数据
# 参数解读:write_datas(excel的路径,选择的子表格名字,所在行开始的位置,写的内容(以列表的形式写入))
def write_datas(file_path, subtable, start, value):
xlapp_1 = client.Dispatch("Excel.Application")
xlapp_1.Visible = False
filename = xlapp_1.Workbooks.Open(file_path)
sheet = filename.Worksheets(subtable)
for j in value:
num = 1
for i in j:
sheet.Cells(start, num).value = i
num += 1
start += 1
filename.Save()
filename.Close(True)
以下举一个例子进行说明,新建一个111.xlsx文件,子表格命名为:身份信息,文件信息如下:
对111.xlsx文件进行读操作,命令如下:
if __name__ == '__main__':
# 读一行
print(get_row(r"F:\flask1.xlsx", "身份信息", 1))
# 结果为:['张三', '男', 175.0, 20.0]
# 读多行
print(get_rows(r"F:\flask1.xlsx", "身份信息", 1, 3))
# 结果为:[['张三', '男', 175.0, 20.0], ['李四', '女', 165.0, 23.0], ['王五', '男', 180.0, 33.0]]
# 读全部数据
print(get_all(r"F:\flask1.xlsx", "身份信息"))
# 结果为:[['名字:', '性别:', '身高:', '年龄'], ['张三', '男', 175.0, 20.0], ['李四', '女', 165.0, 23.0], ['王五', '男', 180.0, 33.0], ['赵六', '女', 170.0, 18.0]]
# 读一列
print(get_col(r"F:\flask1.xlsx", "身份信息", 1))
# 结果为:['性别:', '男', '女', '男', '女']
# 读多列
print(get_cols("111.xlsx", "身份信息", 1, 3))
# 结果为:[['性别:', '男', '女', '男', '女'], ['身高:', 175.0, 165.0, 180.0, 170.0], ['年龄', 20.0, 23.0, 33.0, 18.0]]
xlsx的文件进行写操作先新建222.xlsx文件, 引用文件要使用文件的全路径,子表格命名为:新建信息,命令如下:
# 写一行,这里要新建一个222.xlsx文件, 引用文件要使用文件的全路径,子表格命名为:新建信息
value = ['张三', '男', 175.0, 20.0]
write_data(r"F:\flask2.xlsx", "新建信息", 1, value)
# 写多行,这里继续使用222.xlsx文件, 引用文件要使用文件的全路径,子表格命名为:新建信息
value = [['张三', '男', 175.0, 20.0], ['李四', '女', 165.0, 23.0], ['王五', '男', 180.0, 33.0]]
write_datas(r"F:\flask2.xlsx", "新建信息", 3, value)
效果如下:
完整代码如下:
"""
需安装的库文件:
pip install xlrd==1.2.0
pip install pywin32
换源网址:
- 豆瓣:http://pypi.douban.com/simple/
- 中科大:https://pypi.mirrors.ustc.edu.cn/simple/
- 清华:https://pypi.tuna.tsinghua.edu.cn/simple
换源安装,例如:pip install pywin32 -i https://pypi.tuna.tsinghua.edu.cn/simple
"""
import xlrd
from win32com import client
# 读一行
# 参数解读:get_row(excel的路径,选择的子表格名字,所读行的位置)
def get_row(file_path, subtable, row_location):
# 打开excel表格
filename = xlrd.open_workbook(file_path)
# 打印excel所有子表格的名字
form_name = filename.sheet_names()
# 获取选择子表格的位置
subtable_location = form_name.index(subtable)
# 选择子表格为操作对象
sheet = filename.sheet_by_index(subtable_location)
# 获取选取对象的行列值
rowNum = sheet.nrows
colNum = sheet.ncols
# 获取某一行的数据
row_allvalue = sheet.row_values(row_location)
# 返回的结果为列表,例如:[1,2,3,4]
return row_allvalue
# 读多行数据
# 参数解读:get_rows(excel的路径,选择的子表格名字,所读行开始的位置,所读行结束的位置)
def get_rows(file_path, subtable, start, end):
# 打开excel表格
filename = xlrd.open_workbook(file_path)
# 打印excel所有子表格的名字
form_name = filename.sheet_names()
# 获取选择子表格的位置
subtable_location = form_name.index(subtable)
# 选择子表格为操作对象
sheet = filename.sheet_by_index(subtable_location)
# 获取多行数据
value_library = []
for row_location in range(int(start), int(end)+1):
row_allvalue = sheet.row_values(row_location)
value_library.append(row_allvalue)
return value_library
# 读全部数据
# 参数解读:get_all(excel的路径,选择的子表格名字)
def get_all(file_path, subtable):
# 打开excel表格
filename = xlrd.open_workbook(file_path)
# 打印excel所有子表格的名字
form_name = filename.sheet_names()
# 获取选择子表格的位置
subtable_location = form_name.index(subtable)
# 选择子表格为操作对象
sheet = filename.sheet_by_index(subtable_location)
# 获取选取对象的行数
rowNum = sheet.nrows
value_library = []
for row_location in range(rowNum):
row_allvalue = sheet.row_values(row_location)
value_library.append(row_allvalue)
return value_library
# 读一列
# 参数解读:get_col(excel的路径,选择的子表格名字,读列的位置)
def get_col(file_path, sheet_name, local):
# 打开excel表格
filename = xlrd.open_workbook(file_path)
# 打印excel所有子表格的名字
form_name = filename.sheet_names()
# 获取选择子表格的位置
subtable_location = form_name.index(sheet_name)
# 选择子表格为操作对象
sheet = filename.sheet_by_index(subtable_location)
cols = sheet.col_values(local)
return cols
# 读多列
# 参数解读:get_cols(excel的路径,选择的子表格名字,读列开始的位置,读列结束的位置)
def get_cols(file_path, sheet_name, start, end):
# 打开excel表格
filename = xlrd.open_workbook(file_path)
# 打印excel所有子表格的名字
form_name = filename.sheet_names()
# 获取选择子表格的位置
subtable_location = form_name.index(sheet_name)
# 选择子表格为操作对象
sheet = filename.sheet_by_index(subtable_location)
final_result = []
for i in range(start, end+1):
cols = sheet.col_values(i)
final_result.append(cols)
return final_result
# 写一行
# 参数解读:write_data(excel的路径,选择的子表格名字,所在的行位置,写的内容(以列表的形式写入))
def write_data(file_path, subtable, row, value):
xlapp_1 = client.Dispatch("Excel.Application")
xlapp_1.Visible = False
filename = xlapp_1.Workbooks.Open(file_path)
sheet = filename.Worksheets(subtable)
num = 1
for i in value:
sheet.Cells(row, num).value = i
num += 1
filename.Save()
filename.Close(True)
# 写多行数据
# 参数解读:write_datas(excel的路径,选择的子表格名字,所在行开始的位置,写的内容(以列表的形式写入))
def write_datas(file_path, subtable, start, value):
xlapp_1 = client.Dispatch("Excel.Application")
xlapp_1.Visible = False
filename = xlapp_1.Workbooks.Open(file_path)
sheet = filename.Worksheets(subtable)
for j in value:
num = 1
for i in j:
sheet.Cells(start, num).value = i
num += 1
start += 1
filename.Save()
filename.Close(True)
if __name__ == '__main__':
# 读一行
print(get_row(r"F:\flask1.xlsx", "身份信息", 1))
# 结果为:['张三', '男', 175.0, 20.0]
# 读多行
print(get_rows(r"F:\flask1.xlsx", "身份信息", 1, 3))
# 结果为:[['张三', '男', 175.0, 20.0], ['李四', '女', 165.0, 23.0], ['王五', '男', 180.0, 33.0]]
# 读全部数据
print(get_all(r"F:\flask1.xlsx", "身份信息"))
# 结果为:[['名字:', '性别:', '身高:', '年龄'], ['张三', '男', 175.0, 20.0], ['李四', '女', 165.0, 23.0], ['王五', '男', 180.0, 33.0], ['赵六', '女', 170.0, 18.0]]
# 读一列
print(get_col(r"F:\flask1.xlsx", "身份信息", 1))
# 结果为:['性别:', '男', '女', '男', '女']
# 读多列
print(get_cols("111.xlsx", "身份信息", 1, 3))
# 结果为:[['性别:', '男', '女', '男', '女'], ['身高:', 175.0, 165.0, 180.0, 170.0], ['年龄', 20.0, 23.0, 33.0, 18.0]]
# 写一行,这里要新建一个222.xlsx文件, 引用文件要使用文件的全路径,子表格命名为:新建信息
value = ['张三', '男', 175.0, 20.0]
write_data(r"F:\flask2.xlsx", "新建信息", 1, value)
# 写多行,这里继续使用222.xlsx文件, 引用文件要使用文件的全路径,子表格命名为:新建信息
value = [['张三', '男', 175.0, 20.0], ['李四', '女', 165.0, 23.0], ['王五', '男', 180.0, 33.0]]
write_datas(r"F:\flask2.xlsx", "新建信息", 3, value)