首先需要安装xlsx库: 【注意:不要默认安装xlrd的版本,2.0.1已经不再支持读取xlsx数据。本文需要安装1.2.0的版本】
pip install xlrd==1.2.0
excel表格中的数据: 【excel中存在缺失值也是可以读取的】
示例代码:
- import xlrd
-
- file_path = './data/体检表.xlsx'
- # 打开excel表格
- data = xlrd.open_workbook(file_path)
- print(data)
-
- # 打印excel所有子表格的名字
- form_name = data.sheet_names()
- print(form_name)
-
- # table = data.sheet_by_name(form_name[0])
- table = data.sheet_by_name('Sheet1')
- print(table)
-
- # 获取总行数
- nrows = table.nrows
- print(nrows)
-
- # 获取总列数
- ncols = table.ncols
- print(ncols)
-
- # 获取一行的全部值,例如第四行
- row_value = table.row_values(2)
- print(row_value)
-
- # 获取一列的全部数值,例如第二列
- col_value = table.col_values(1)
- print(col_value)
-
- # 获取一个单元格的数值,例如第四行二列
- cell_value = table.cell(3, 1).value
- print(cell_value)
运行结果:
当需要向xlsx格式文件中写入数据时,还需要安装pywin32库:
pip install pywin32
示例代码2: 【插入一行数据】
- from win32com import client
-
-
- # 写入一行数据
- # 参数解读: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)
-
-
- if __name__ == '__main__':
- # 写一行一行数据,这里需要提前新建一个new_data.xlsx文件, 引用文件要使用文件的全路径,子表格命名为:Sheet1
- value = ['序号', '姓名', '性别', '手机号', '体检结果']
- write_data(r"E:\代码/111/data/new_data.xlsx", "Sheet1", 1, value) # 这种写法会覆盖之前的数据,相当于写数据的'w'模式
运行结果:
示例代码3: 【插入多行数据】
- from win32com import client
-
-
- # 写入多行数据
- # 参数解读: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__':
- # 写入多行数据,这里需要提前新建一个new_data.xlsx文件, 引用文件要使用文件的全路径,子表格命名为:Sheet1
- value = [['序号', '姓名', '性别', '手机号', '体检结果'],
- ['1', '刘一', '男', '15212365423', '优秀'],
- ['2', '陈二', '男', '15212365424', '优秀'],
- ['3', '张三', '男', '15212365425', '优秀'],
- ['4', '李四', '男', '15212365426', '优秀']]
- # 这种写法会覆盖之前的数据,相当于写数据的'w'模式,只是对对应的单元格数据重写,不会对全表进行重写
- write_datas(r"E:\代码/111/data/new_data.xlsx", "Sheet1", 1, value)
运行结果:
示例代码4: 【读取一行数据】
- import xlrd
-
-
- # 读取一行数据
- # 参数解读:get_row(excel的路径,选择的子表格名字,所读行的位置)
- def get_row(file_path, subtable, row_location):
- # 打开excel表格
- filename = xlrd.open_workbook(file_path)
- # 打印excel所有子表格的名字
- form_name = filename.sheet_names()
- print(form_name)
- # 获取选择子表格的位置
- subtable_location = form_name.index(subtable)
- print(subtable_location)
- # 选择子表格为操作对象
- sheet = filename.sheet_by_index(subtable_location)
- # 获取某一行的数据
- row_allvalue = sheet.row_values(row_location)
- return row_allvalue
-
-
- if __name__ == '__main__':
- # 读取一行数据
- data = get_row('./data/new_data.xlsx', 'Sheet1', 1)
- print(data)
运行结果:
示例代码5: 【读取多行数据】
- import xlrd
-
-
- # 读取多行数据
- # 参数解读: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
-
-
- if __name__ == '__main__':
- # 读取多行数据
- data = get_rows('./data/new_data.xlsx', 'Sheet1', 1, 3)
- print(data)
运行结果:
示例代码6: 【读取所有数据】
- import xlrd
-
-
- # 读取全部数据
- # 参数解读: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
-
-
- if __name__ == '__main__':
- # 读取全部数据
- data = get_all('./data/new_data.xlsx', 'Sheet1')
- print(data)
运行结果:
示例代码7: 【读取一列数据】
- import xlrd
-
-
- # 读取一列数据
- # 参数解读: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
-
-
- if __name__ == '__main__':
- # 读取一列数据
- data = get_col('./data/new_data.xlsx', 'Sheet1', 1)
- print(data)
运行结果:
示例代码8: 【读取多列数据】
- import xlrd
-
-
- # 读取多列数据
- # 参数解读: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
-
-
- if __name__ == '__main__':
- # 读取全部数据
- data = get_cols('./data/new_data.xlsx', 'Sheet1', 1, 3)
- print(data)
运行结果: