虽然平时数据文件读写都是用的.csv,但还是偶然需要把数据写入恶心的excel表格。在CSDN上搜了很多相关的博客,发现都是用的xlutils,xlrd,xlwd三者的结合。直接拿来用了之后,发现写入后的excel表格就会格式错误打不开。
于是又一次去StackoverFlow上转了圈(这个社区真的超赞),发现了很多简单的方法。这里就只提供openpyxl库相关的方法吧。
import openpyxl
xfile = openpyxl.load_workbook('test.xlsx')
sheet = xfile.get_sheet_by_name('Sheet1')
sheet['A1'] = 'hello world'
xfile.save('text1.xlsx')
改写只需要几行,与xlutils相比不知道爽到哪里去啦~
#################################################################################################
不过在处理其他表格时,突然又开始报错:
AttributeError: 'tuple' object has no attribute 'value'
没事,继续在StackoverFlow上找,把对应行列写入数据的那一行换一种写法就好:
##sheet['A1'] = 'hello world'
sheet.cell(row=1, column=1).value = 'hello world'
################################################################################################
因为之前用的xlutils处理并覆盖了测试文件,再用的openpyxl的第一次,出现了另一个Error,一度让我怀疑openpyxl的可行性。
zipfile.BadZipFile: File is not a zip file
继续必应走起(现在还有人用广告满天飞的百度?),发现这与excel文件本身的格式有关:
Excel 2003 format (xls)格式是binary的,而Excel 2007 format(xlsx)不同,是一个zip file。一个正常的excel文件不是binary 的就是zip file,我这个文件后缀是.xlsx,很可能是xlutils把我的测试文件搞坏了。直接试着打开,果不其然。(第三个reference中,后面也有提到一个既不是xlsx也不是xls的文件也是可以被excel读取的。答者相信这可能是XML Spreadsheet 2003 file format格式,这里就不细细追究了)
################################################################################################
reference:
1. https://stackoverflow.com/questions/18849535/how-to-write-update-data-into-cells-of-existing-xlsx-workbook-using-xlsxwriter-i
2. https://stackoverflow.com/questions/48537430/openpyxl-worksheet-object-has-no-attribute-writepython
3. https://stackoverflow.com/questions/31212104/how-to-load-in-python-an-xlsx-that-originally-had-xls-file-extension