• 使用python读写xlsx格式中的数据【xlrd、pywin32】


    首先需要安装xlsx库:  【注意:不要默认安装xlrd的版本,2.0.1已经不再支持读取xlsx数据。本文需要安装1.2.0的版本】

    pip install xlrd==1.2.0

    excel表格中的数据:  【excel中存在缺失值也是可以读取的】

    示例代码:

    1. import xlrd
    2. file_path = './data/体检表.xlsx'
    3. # 打开excel表格
    4. data = xlrd.open_workbook(file_path)
    5. print(data)
    6. # 打印excel所有子表格的名字
    7. form_name = data.sheet_names()
    8. print(form_name)
    9. # table = data.sheet_by_name(form_name[0])
    10. table = data.sheet_by_name('Sheet1')
    11. print(table)
    12. # 获取总行数
    13. nrows = table.nrows
    14. print(nrows)
    15. # 获取总列数
    16. ncols = table.ncols
    17. print(ncols)
    18. # 获取一行的全部值,例如第四行
    19. row_value = table.row_values(2)
    20. print(row_value)
    21. # 获取一列的全部数值,例如第二列
    22. col_value = table.col_values(1)
    23. print(col_value)
    24. # 获取一个单元格的数值,例如第四行二列
    25. cell_value = table.cell(3, 1).value
    26. print(cell_value)

    运行结果:

    当需要向xlsx格式文件中写入数据时,还需要安装pywin32库:

    pip install pywin32

    示例代码2: 【插入一行数据】

    1. from win32com import client
    2. # 写入一行数据
    3. # 参数解读:write_data(excel的路径,选择的子表格名字,所在的行位置,写的内容(以列表的形式写入))
    4. def write_data(file_path, subtable, row, value):
    5. xlapp_1 = client.Dispatch("Excel.Application")
    6. xlapp_1.Visible = False
    7. filename = xlapp_1.Workbooks.Open(file_path)
    8. sheet = filename.Worksheets(subtable)
    9. num = 1
    10. for i in value:
    11. sheet.Cells(row, num).value = i
    12. num += 1
    13. filename.Save()
    14. filename.Close(True)
    15. if __name__ == '__main__':
    16. # 写一行一行数据,这里需要提前新建一个new_data.xlsx文件, 引用文件要使用文件的全路径,子表格命名为:Sheet1
    17. value = ['序号', '姓名', '性别', '手机号', '体检结果']
    18. write_data(r"E:\代码/111/data/new_data.xlsx", "Sheet1", 1, value) # 这种写法会覆盖之前的数据,相当于写数据的'w'模式

    运行结果:

    示例代码3:  【插入多行数据】

    1. from win32com import client
    2. # 写入多行数据
    3. # 参数解读:write_datas(excel的路径,选择的子表格名字,所在行开始的位置,写的内容(以列表的形式写入))
    4. def write_datas(file_path, subtable, start, value):
    5. xlapp_1 = client.Dispatch("Excel.Application")
    6. xlapp_1.Visible = False
    7. filename = xlapp_1.Workbooks.Open(file_path)
    8. sheet = filename.Worksheets(subtable)
    9. for j in value:
    10. num = 1
    11. for i in j:
    12. sheet.Cells(start, num).value = i
    13. num += 1
    14. start += 1
    15. filename.Save()
    16. filename.Close(True)
    17. if __name__ == '__main__':
    18. # 写入多行数据,这里需要提前新建一个new_data.xlsx文件, 引用文件要使用文件的全路径,子表格命名为:Sheet1
    19. value = [['序号', '姓名', '性别', '手机号', '体检结果'],
    20. ['1', '刘一', '男', '15212365423', '优秀'],
    21. ['2', '陈二', '男', '15212365424', '优秀'],
    22. ['3', '张三', '男', '15212365425', '优秀'],
    23. ['4', '李四', '男', '15212365426', '优秀']]
    24. # 这种写法会覆盖之前的数据,相当于写数据的'w'模式,只是对对应的单元格数据重写,不会对全表进行重写
    25. write_datas(r"E:\代码/111/data/new_data.xlsx", "Sheet1", 1, value)

    运行结果:

    示例代码4:  【读取一行数据】

    1. import xlrd
    2. # 读取一行数据
    3. # 参数解读:get_row(excel的路径,选择的子表格名字,所读行的位置)
    4. def get_row(file_path, subtable, row_location):
    5. # 打开excel表格
    6. filename = xlrd.open_workbook(file_path)
    7. # 打印excel所有子表格的名字
    8. form_name = filename.sheet_names()
    9. print(form_name)
    10. # 获取选择子表格的位置
    11. subtable_location = form_name.index(subtable)
    12. print(subtable_location)
    13. # 选择子表格为操作对象
    14. sheet = filename.sheet_by_index(subtable_location)
    15. # 获取某一行的数据
    16. row_allvalue = sheet.row_values(row_location)
    17. return row_allvalue
    18. if __name__ == '__main__':
    19. # 读取一行数据
    20. data = get_row('./data/new_data.xlsx', 'Sheet1', 1)
    21. print(data)

    运行结果:

    示例代码5:  【读取多行数据】

    1. import xlrd
    2. # 读取多行数据
    3. # 参数解读:get_rows(excel的路径,选择的子表格名字,所读行开始的位置,所读行结束的位置)
    4. def get_rows(file_path, subtable, start, end):
    5. # 打开excel表格
    6. filename = xlrd.open_workbook(file_path)
    7. # 打印excel所有子表格的名字
    8. form_name = filename.sheet_names()
    9. # 获取选择子表格的位置
    10. subtable_location = form_name.index(subtable)
    11. # 选择子表格为操作对象
    12. sheet = filename.sheet_by_index(subtable_location)
    13. # 获取多行数据
    14. value_library = []
    15. for row_location in range(int(start), int(end) + 1):
    16. row_allvalue = sheet.row_values(row_location)
    17. value_library.append(row_allvalue)
    18. return value_library
    19. if __name__ == '__main__':
    20. # 读取多行数据
    21. data = get_rows('./data/new_data.xlsx', 'Sheet1', 1, 3)
    22. print(data)

    运行结果:

    示例代码6:   【读取所有数据】

    1. import xlrd
    2. # 读取全部数据
    3. # 参数解读:get_all(excel的路径,选择的子表格名字)
    4. def get_all(file_path, subtable):
    5. # 打开excel表格
    6. filename = xlrd.open_workbook(file_path)
    7. # 打印excel所有子表格的名字
    8. form_name = filename.sheet_names()
    9. # 获取选择子表格的位置
    10. subtable_location = form_name.index(subtable)
    11. # 选择子表格为操作对象
    12. sheet = filename.sheet_by_index(subtable_location)
    13. # 获取选取对象的行数
    14. rowNum = sheet.nrows
    15. value_library = []
    16. for row_location in range(rowNum):
    17. row_allvalue = sheet.row_values(row_location)
    18. value_library.append(row_allvalue)
    19. return value_library
    20. if __name__ == '__main__':
    21. # 读取全部数据
    22. data = get_all('./data/new_data.xlsx', 'Sheet1')
    23. print(data)

    运行结果:

    示例代码7:   【读取一列数据】

    1. import xlrd
    2. # 读取一列数据
    3. # 参数解读:get_col(excel的路径,选择的子表格名字,读列的位置)
    4. def get_col(file_path, sheet_name, local):
    5. # 打开excel表格
    6. filename = xlrd.open_workbook(file_path)
    7. # 打印excel所有子表格的名字
    8. form_name = filename.sheet_names()
    9. # 获取选择子表格的位置
    10. subtable_location = form_name.index(sheet_name)
    11. # 选择子表格为操作对象
    12. sheet = filename.sheet_by_index(subtable_location)
    13. cols = sheet.col_values(local)
    14. return cols
    15. if __name__ == '__main__':
    16. # 读取一列数据
    17. data = get_col('./data/new_data.xlsx', 'Sheet1', 1)
    18. print(data)

    运行结果:

    示例代码8:   【读取多列数据】

    1. import xlrd
    2. # 读取多列数据
    3. # 参数解读:get_cols(excel的路径,选择的子表格名字,读列开始的位置,读列结束的位置)
    4. def get_cols(file_path, sheet_name, start, end):
    5. # 打开excel表格
    6. filename = xlrd.open_workbook(file_path)
    7. # 打印excel所有子表格的名字
    8. form_name = filename.sheet_names()
    9. # 获取选择子表格的位置
    10. subtable_location = form_name.index(sheet_name)
    11. # 选择子表格为操作对象
    12. sheet = filename.sheet_by_index(subtable_location)
    13. final_result = []
    14. for i in range(start, end + 1):
    15. cols = sheet.col_values(i)
    16. final_result.append(cols)
    17. return final_result
    18. if __name__ == '__main__':
    19. # 读取全部数据
    20. data = get_cols('./data/new_data.xlsx', 'Sheet1', 1, 3)
    21. print(data)

    运行结果:

  • 相关阅读:
    极化雷达回波的Matlab模拟与分析
    【华为OD机试真题 JAVA】根据某条件聚类最少交换次数
    pytorch与keras的相互转换(代码以LeNet-5为例)
    Ubuntu21.10升级22.04操作记录
    排序算法-----归并排序
    携手ChainGPT 人工智能基础设施 波场TRON革新 Web3 版图
    qt窗体永久置顶
    注册Java 引用类型 (class、interface) 用法总结详解
    GoLong的学习之路(一)语法之变量与常量
    ARM CoreSight相关模块简介
  • 原文地址:https://blog.csdn.net/weixin_44799217/article/details/126550401