python读写excel时遇到的问题合集

pandas与excel

pd.DataFrame()写出到excel问题

ValueError: Append mode is note supported with xlsxwriter

对于pd.ExcelWriter,现有的的写入excel模块包含openpyxlxlsxwriter,pd.ExcelWriter方法中默认的模块是xlsxwriter,但此模块不支持append追加操作。改成openpyxl即可。在0.24.2中要指明,0.25.3则不需要。

openpyxl不支持写出xls格式

with pd.ExcelWriter(outfile_name,mode='a',engine="openpyxl")aswriter:

报错

openpyxl.utils.exceptions.InvalidFileException: openpyxl does not support the old .xls file format, please use xlrd to read this file, or convert it to the more recent .xlsx file format.

不指定这个engine的时候用的是xlwt,而这个不支持后面插入

ValueError: Append mode is not supported with xlwt!

pd读取问题

excel另存为

pandas读取会忽略格式,如果用pandas读入再写出,被隐藏的列会展示出来,日期也会变成完整形式。

但是如果用openpyxl删除某些sheet再保存的话,会很方便。格式完整,所见即所得。

wb = openpyxl.load_workbook(file_path)
print("openpyxl load ok!")
for i in use_less:
    wb.remove(wb[i])
result_name = cur_year + '-orderlist.xlsx'
wb.save(result_name)

xlrd、xlwt和openpyxl的比较

1)xlrd:对xls、xlsx、xlsm文件进行读操作–读操作效率较高,推荐
2)xlwt:对xls文件进行写操作–写操作效率较高,但是不能执行xlsx文件
3)openpyxl:对xlsx、xlsm文件进行读、写操作–xlsx写操作推荐使用

xlwings处理xls格式的缺点

xlwings也很好用,还可以处理xls格式。当前的问题是:

  1. 文件有密码,需要用只读模式打开,而xlwings会打开excel进程,询问是否输入密码。
  2. xlwings结束后需要杀死excel进程,避免卡死。那么什么时间kill呢?需要考虑会不会影响在用的人。
  3. xlwings需要有excel安装
    xlwings requires an installation of Excel and therefore only works on 
    Windows and macOS. To enable the installation on Linux nevertheless, do: 
    export INSTALL_ON_LINUX=1; pip install xlwings
    

xlrd

xlrd适合读整列或者整行。

xlrd:对xls、xlsx文件进行读操作

  1. 获取工作簿对象:xlrd.open_workbook()

    workBook = xlrd.open_workbook(filemname)
    

    打开Excel文件读取数据
    注:filemname为文件名以及路径,如果路径或者文件名有中文给前面加一个r表示原生字符。

  2. 获取工作表(sheet)对象
    1)workBook.sheet_names():获取所有sheet页的名字

    2)sheetName = workBook.sheet_by_name(‘sheet1’):根据sheet页的名字获取指定表名的表

    3)sheetName = workbook.sheet_by_index(0):根据sheet索引获取对应sheet表

  3. 获取sheet的名称:name
    sheetName.name:获取sheet的名称

  4. 获取行数和列数:nrowsncols
    sheetName.nrows:获取表格的总行数
    sheetName.ncols:获取表格的总列数

  5. 获取整行或整列的值(数组):row_valuescol_values
    rows = sheetName.row_values(0)# 获取第一行内容
    cols = sheetName.col_values(0) # 获取第一列内容

  6. 获取指定单元格的值:cell(a,b).valuerow(1)[0].value
    sheetName.cell(1,0).value:获取第2行第一列的单元格数据
    sheetName.row(1)[0].value:获取第2行第一列的单元格数据

  7. 获取单元格内容的数据类型:ctype
    sheetName.cell(1,0).ctype
    注:ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error

    原文链接:https://blog.csdn.net/y2Candice/article/details/100581454/

读取日期变float问题

日期会变成float,建议测一下:

# 3 means 'xldate' , 1 means 'text'
if sheet.cell(5, 19).ctype == 3: 
	ms_date_number = sheet.cell(5, 19).value 
	year, month, day, hour, minute, second = xlrd.xldate_as_tuple(ms_date_number, book.datemode)
	py_date = datetime.datetime(year, month, day, hour, minute, nearest_second)

相关推荐

  1. pythonexcel遇到问题

    2024-03-10 20:16:06       22 阅读
  2. Python 将Influxdb时序数据写入mysql库遇到问题

    2024-03-10 20:16:06       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-10 20:16:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-10 20:16:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-10 20:16:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-10 20:16:06       20 阅读

热门阅读

  1. P8651 [蓝桥杯 2017 省 B] 日期问题---洛谷(题解)

    2024-03-10 20:16:06       23 阅读
  2. 蓝桥杯---列名

    2024-03-10 20:16:06       20 阅读
  3. 【数据结构】栈和队列

    2024-03-10 20:16:06       23 阅读
  4. Ubuntu 20.04 ROS1 与 ROS2 通讯

    2024-03-10 20:16:06       19 阅读
  5. 理工笔记本配置之ubuntu 锐捷认证

    2024-03-10 20:16:06       19 阅读
  6. redis20240306

    2024-03-10 20:16:06       16 阅读
  7. Vue.js 绑定容器

    2024-03-10 20:16:06       20 阅读
  8. 7、Copmose自定义颜色和主题切换

    2024-03-10 20:16:06       20 阅读
  9. SOC设计:关于reset的细节

    2024-03-10 20:16:06       21 阅读
  10. 字符集&字符编码

    2024-03-10 20:16:06       23 阅读
  11. 2024年及未来: AI辅助研发的革新之旅

    2024-03-10 20:16:06       19 阅读