zoukankan      html  css  js  c++  java
  • openpyxl

    首先确保你已经导入openpyxl包,使用安装包import openpyxl;如若没有,去cmd窗口pip install openpyxl;若在.pip install openpyxl出现问题:Command “python setup.py egg_info” failed with error code 1,可以参考 使用:
    python -m pip install --upgrade --force pip pip install setuptools==33.1.1
    相关注意事项:

    excel表的文字编码如果是“gb2312” 读取后就会显示乱码,需要转成Unicode
    workbook:工作簿,一个Excel文件,可以包含多个工作表
    sheet:工作表,默认表明为sheet1,sheet2…
    cell:单元格,存储数据对象(这个需要主意)
    新建Excel文件
    wb = openpyxl.Workbook() # 同时默认创建一个sheet
    wb.save("501.xlsx")
    #激活新建的文件501.xlsx
    1
    2
    3
    新建数据表
    # 新建sheet表
    wb.create_sheet(index=2, title="sheet2") # 可通过index控制创建的表的位置
    1
    2
    打开已有的excel
    wb = openpyxl.load_workbook("501.xlsx")
    1
    根据表名打开sheet表
    sheet1 = wb[sheet_names[0]] # 打开第一个 sheet 工作表
    1
    获取所有表名
    sheet_names = wb.sheetnames
    1
    根据表名删除sheet表
    wb.remove(wb[sheet_names[2]])
    #下表从零开始,此时删除的是第三张表
    1
    2
    获取最大列数
    sheet1_max_colum = sheet1.max_column
    1
    获取最大行数
    sheet1_max_row = sheet1.max_row
    1
    获取单元格A1值
    A1_value = sheet1['A1'].value
    #不区分大小写
    1
    2
    获取单元格A1列值
    A1_column = sheet1['A1'].column
    1
    获取单元格A1行号
    A1_row = sheet1['A1'].row
    1
    获取第x行第y列的单元格值
    A1 = sheet1.cell(row=x, column=y).value # 获取第一行第一列的单元格值
    1
    修改第x行第y列的单元格的值
    sheet1.cell(row=x, column=y, value="12") # 修改第一行第二列的单元格的值为B1
    sheet1["A1"] = "12"#修改A1单元格值为12
    sheet1["B11"] = "11" # 新增B11单元格的值为B11
    1
    2
    3
    修改数据表名称
    sheet1.title = "sheet_501"
    1
    保存文件
    #注意不保存文件,文件打开时文件保存会出错
    #一定要牢记这一点,就这一点卡了我一个多小时
    wb.save("test.xlsx")
    1
    2
    3
    #另附上读取指纹考勤表的脚本
    #from openpyxl import load_workbook
    import openpyxl

    def get_sheet():
    wb = openpyxl.load_workbook('501.xlsx')
    # 打开已有文件
    print( "已新建表单" )
    # 新建表单,储存最终信息
    sheet_names = wb.sheetnames
    # 列表,获得所有表单名
    sheet = wb[sheet_names[0]]
    # 打开sheet表
    sheet2 = wb[sheet_names[1]]
    sheet2.cell( row=1, column=3 ).value
    name = sheet['c1'].value
    old = sheet['d1'].value[7:9]
    row1,column1,all = 1,1,0
    sheet2.cell(row=1,column=1,value=name)
    # 写入第一个人的姓名
    result = 0
    row1 = row1 + 1
    # 获取c列所有数据
    for i in range(sheet.max_row):
    day = sheet.cell(row=i+1, column=4).value[7:9]
    if old == day and name == sheet.cell(row=i+1, column=3).value:
    result = result + 1
    if result > 6:
    result = 6
    elif old != day and name == sheet.cell(row=i+1, column=3).value:
    all = all + result
    old = sheet.cell(row=i+1, column=4).value[7:9]
    result = 1
    else:
    name = sheet.cell(row=i+1, column=3).value
    sheet2.cell(row=row1-1, column=2).value = all + result
    sheet2.cell(row=row1, column=1).value = name
    #print(all+result,name)
    all,result = 0,1
    row1 += 1
    sheet2.cell( row=row1 - 1, column=2 ).value = all + result
    wb.save( '501.xlsx' )
    return sheet2
    # 获取c列所有数据

    def main():
    sheet2 = get_sheet()
    for i in range(sheet2.max_row ):
    all = sheet2.cell( row=i+1, column=2 ).value
    name = sheet2.cell( row=i+1, column=1 ).value
    print(name,all)
    print("共计 %d 人" % sheet2.max_row)

    main()
    ————————————————
    版权声明:本文为CSDN博主「秋瑾先生」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/dldl1718/article/details/87645480

  • 相关阅读:
    OpenStack 多节点纳管 vCenter 5.5
    OpenStack 多节点纳管 vCenter 5.5
    java.utils.UUID类介绍
    BeanUtils工具类
    Request笔记
    JavaEE_XMind总结
    JavaSE_XMind总结
    完成页面的定时跳转
    使用jsp完成商品列表的动态显示
    Respone笔记
  • 原文地址:https://www.cnblogs.com/valorchang/p/11585708.html
Copyright © 2011-2022 走看看