码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【python VS vba】(5) 在python中使用xlwt操作Excel(待完善ing)


    目录

    1 什么是xlrd 和 xlwt

    2 导入xlwt

    3 xlwt相关语法

    3.1 创建新的workbook

    3.2 创建新的sheet

    3.3 保存workbook

    4 python里表格的形式

    4.1 矩阵

    4.2 EXCEL的数据形式== 完全等于矩阵的数字结构

    4.3 python里矩阵

    5 xlwt相关的具体代码

    5.1 代码

    5.2 结果

    5.3 要注意的问题

    5.3.1 不能是已有的表,会报错:权限拒绝

    5.3.2 保存的格式

    5.3.3 路径的方式

    6 导入xlrd

    6.1 可能的问题

    6.2 安装xlrd后,可以查看安装的版本号

    7 xlrd的相关语法

    7.1  获取现有的EXCEL文件workbook

    7.2 获取wb下的sheets表的信息

    7.2.1 逐级获得wb的下级对象数组,sheets对象数组

    7.2.2 直接获得wb的下级sheets对象的一些属性,用特定方法

    7.2.3 获取某个具体的sheet

    7.2.4 获取某个具体的sheet 里的行数列数等

    7.2.5 获取某个具体的sheet 里的单元格,范围内容呢?

    8  xlrd相关的具体代码

    8.1 一段试验代码


    1 什么是xlrd 和 xlwt

    • 一般来说
    • xlrd是用来读取excel的模块
    • xlwt是用来写入excel的模块

    2 导入xlwt

    import xlwt

    3 xlwt相关语法

    3.1 创建新的workbook

    wb = xlwt.Workbook(encoding='utf-8')

    3.2 创建新的sheet

    sh = wb.add_sheet("test")

    3.3 保存workbook

    一定要保存后才能看到修改的结果

    savePath = r'C:\Users\Administrator\Desktop\1002.xls'
    wb.save(savePath)

    4 python里表格的形式

    4.1 矩阵

    先回忆下数学里的矩阵   Ai*j

    4.2 EXCEL的数据形式== 完全等于矩阵的数字结构

    行=矩阵的行

    列=矩阵的列

    4.3 python里矩阵

    矩阵的保存形式是这样的

    列表:一般是指矩阵里的1行,

    因此列表的长度:一般是指矩阵的行数

    列表的某1个元素的长度:一般是指矩阵的列数

    head = ['列1','列2','列3']
    data = [['a11','a12','a13'],['a22','a22','a23']]

    5 xlwt相关的具体代码

    5.1 代码

    1. import xlwt
    2. wb = xlwt.Workbook(encoding='utf-8')
    3. sh = wb.add_sheet("test")
    4. head = ['列1','列2','列3']
    5. data = [['a11','a12','a13'],['a22','a22','a23']]
    6. for i in head:
    7. sh.write(0,head.index(i),i)
    8. for i in range(len(data)):
    9. for j in range(len(data[i])):
    10. sh.write(i+1,j,data[i][j])
    11. savePath = r'C:\Users\Administrator\Desktop\1002.xls'
    12. wb.save(savePath)

    5.2 结果

    5.3 要注意的问题

    5.3.1 不能是已有的表,会报错:权限拒绝

    5.3.2 保存的格式

    • 只能是xls
    • 不能是xlsx
    • 不能是xlsm
    • 后面2种保存后会打不开

    5.3.3 路径的方式

    • savePath = r'C:\Users\Administrator\Desktop\1002.xls'
    • savePath = 'C:\\Users\\Administrator\\Desktop\\1002.xls'

    6 导入xlrd

    • import xlrd

    6.1 可能的问题

    • 这里可能会有问题,比如我用的anaconda,默认只安装了xlwt,但是没有安装xlrd
    • import xlrd 会报错,找不到 xlrd模块
    • 然后呢
    • 你需要在anaconda里用cmd或者powershell,去运行命令行
    • 输入 conda list  或者 pip show xlrd 可以发现没有xlrd
    • 安装:pip install xlrd 即可

    6.2 安装xlrd后,可以查看安装的版本号

    import xlrd
    print(xlrd.__version__)

    7 xlrd的相关语法

    7.1  获取现有的EXCEL文件workbook

    • xlrd.open_workbook(path) 返回的就是对应的wb文件的对象

    import xlrd
    print(xlrd.__version__)

    ##创建wb对象,打开对应的wb表对象
    wb=xlrd.open_workbook(r'C:\Users\Administrator\Desktop\2001.xls')

     
    

    7.2 获取wb下的sheets表的信息

    7.2.1 逐级获得wb的下级对象数组,sheets对象数组

    • 首先,和EXCEL本身的结构一样
    • workbook的下级对象是sheets 对象
    • sheets=wb.sheets()  返回的是一个对象数组 [Sheet 0:, Sheet 1:, Sheet 2:]
    • 取得数组长度, len(sheets) ,而不是sheets.count

    #获取wb对象下的,sheet对象,且是个对象数组
    sheets=wb.sheets()
    print(sheets)
    print(len(sheets))  
    print(sheets.count) #错误sheets.count

    • 取得sheets对象后,也可以取得其中sheet对象的属性,比如sheet.name等

    #直接获取sheet对象的.属性呢?可以么?可以,但只能是 sheet.name 没有 sheets.name
    sheets=wb.sheets()
    for sh in sheets:
        print(sh.name)

    7.2.2 直接获得wb的下级sheets对象的一些属性,用特定方法

    • 也可以直接去获取wb对象下的sheets对象的名字数组,这不是对象数组,而是字符串数组
    • sheetnames=wb.sheet_names()
    • 直接获得是字符串数组  ['sheet101', 'sheet102', 'sheet103']

    #也可以直接去获取wb对象下的sheets对象的名字数组,这不是对象数组,而是字符串数组
    sheetnames=wb.sheet_names()
    print(sheetnames)

    7.2.3 获取某个具体的sheet

    获取某个具体的sheet有3种方法

    • 方法1#取wb得sheet对象数组里得某一个
    • sh1=wb.sheets()[0]

    • 方法2#根据sheet的次序去取
    • sh2=wb.sheet_by_index(1)

    • 方法3 #根据具体的sheet显示名去取
    • EXCEL里sheet的显示名不同于程序内部的真实name或者index
    • sh3=wb.sheet_by_name("sheet101")

    • 报错处理
    • 但是要注意,按照这些方法查找,需要确实有对应的sheet否则报错
    • #sh4=wb.sheet_by_name("sheet1001")   #错误sheet名会引起报错

    • 返回内容
    • #要注意一般取得都是sheet对象,取得对象属性还需要用 sh1.name等

    7.2.4 获取某个具体的sheet 里的行数列数等

    • rows=sh1.nrows
    • columns=sh1.ncols   #写sh1.ncolumns报错...


    rows=sh1.nrows
    columns=sh1.ncols   #写sh1.ncolumns报错...
    print(rows)
    print(columns)

    print("{0}这个表有{1}行{2}列".format(sh1.name,rows,columns))
    print(sh1.name,"这个表有",rows,"行",columns,"列")
    print(f"sh1.name这个表有rows行columns列")
    print("%s这个表有%d行%d列"  %(sh1,rows,columns))

    7.2.5 获取某个具体的sheet 里的单元格,范围内容呢?

    8  xlrd相关的具体代码

    8.1 一段试验代码

    • 打开EXCEL的workbook
    • 找到sheets, sheet_names(),或者具体的sheet
    • 取得sheet内的内容
    1. import xlrd
    2. print(xlrd.__version__)
    3. ##创建wb对象,打开对应的wb表对象
    4. wb=xlrd.open_workbook(r'C:\Users\Administrator\Desktop\2001.xls')
    5. #获取wb对象下的,sheet对象,且是个对象数组
    6. sheets=wb.sheets()
    7. print(sheets)
    8. print(len(sheets))
    9. print(sheets.count) #错误sheets.count
    10. #也可以直接去获取wb对象下的sheets对象的名字数组,这不是对象数组,而是字符串数组
    11. sheetnames=wb.sheet_names()
    12. print(sheetnames)
    13. #直接获取sheet对象的.属性呢?可以么?可以,但只能是 sheet.name 没有 sheets.name
    14. sheets=wb.sheets()
    15. for sh in sheets:
    16. print(sh.name)
    17. print()
    18. ##获取某个具体的sheet
    19. #取wb得sheet对象数组里得某一个
    20. sh1=wb.sheets()[0]
    21. #根据sheet的次序去取
    22. sh2=wb.sheet_by_index(1)
    23. #根据具体的sheet显示名去取(EXCEL里sheet的显示名不同于程序内部的真实name或者index)
    24. sh3=wb.sheet_by_name("sheet101")
    25. #sh4=wb.sheet_by_name("sheet1001") #错误sheet名会引起报错
    26. #从wb的sheet数组里取得是对象,取得对象属性还需要用 sh1.name等
    27. print(sh1)
    28. print(sh1.name)
    29. print(sh2)
    30. print(sh3)
    31. print()
    32. ##获取sheet里的内容
    33. rows=sh1.nrows
    34. columns=sh1.ncols #写sh1.ncolumns报错...
    35. print(rows)
    36. print(columns)
    37. print("{0}这个表有{1}行{2}列".format(sh1.name,rows,columns))
    38. print(sh1.name,"这个表有",rows,"行",columns,"列")
    39. print(f"sh1.name这个表有rows行columns列")
    40. print("%s这个表有%d行%d列" %(sh1,rows,columns))
    41. #sheet1=sheetname[0]
    42. #print(sheet1)
    43. #获得sheet内的内容
    44. #sheet1_data=sheet1.sheet_by_name("sheet101")
    45. #print(sheet1.data.name)
    46. #print(f"表:{sheet1_data.name} \n 行数:" sheet1_data.nrows \n 列数:" sheet1_data.ncolumns)
    47. #关于xlrd,xlwt的格式设置,我觉得并不重要,需要用的时候再查把

  • 相关阅读:
    第五届传智杯【初赛】- F-二人的大富翁游戏
    基于mindspore的大模型llama2-7b---微调/推理
    世界上最伟大的女程序员
    Excel 公式&函数:学习基本示例
    树莓派忘记密码重置密码的方法
    java计算机毕业设计网上报名及成绩查询系统源码+数据库+系统+lw文档+mybatis+运行部署
    【django-vue】封装logger 封装全局异常 封装response 数据库配置 用户表继承AbstractUser配置
    【Azure Developer】使用 adal4j(Azure Active Directory authentication library for Java)如何来获取Token呢 (通过用户名和密码方式获取Access Token)
    微信小程序开发01 双线程模型:为什么小程序不用浏览器的线程模型?
    stable diffusion Temporal-kit和EbSynth视频转动画学习笔记
  • 原文地址:https://blog.csdn.net/xuemanqianshan/article/details/134208852
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号