904

python操作Excel之xlsxwriter总结

前段时间用python对excel数据写入遇到一个问题,就是用xlsxwriter把公式写入Excel单元格,然后在用pandas读取文件时发现已公式赋值的单元格读取出来的值全为0。本篇文章就针对Excel单元格操作进行笼统的总结一下。

先来对于excel的数据写入,直接上码:

import xlsxwriter
workbook = xlsxwriter.Workbook(path) # 创建文件并打开
each_sheet = workbook.add_worksheet('data') # sheet1
each_sheet_01 = workbook.add_worksheet('data_01') # sheet2
each_sheet.write(0, 0, '测试01')
each_sheet.write(0, 1, '测试02')
each_sheet.write(0, 2, '求和')
each_sheet.write(1, 0, 1)
each_sheet.write(1, 1, 2)
each_sheet.write_formula('C1', '=SUM(A2:B2)'
# 数据写入后记得写上最后一句,释放缓存
workbook.close()

第二种写入方式:

import xlsxwriter
# 创建一个新工作簿文件并添加一个工作表
workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet()
# 写入一些测试数据。
worksheet.write('B1', 500)
worksheet.write('B2', 10)
worksheet.write('B5', 1)
worksheet.write('B6', 2)
worksheet.write('B7', 3)
worksheet.write('C1', 300)
worksheet.write('C2', 15)
worksheet.write('C5', 20234)
worksheet.write('C6', 21003)
worksheet.write('C7', 10000)
# 写入一个返回单个值的数组公式
worksheet.write_formula('A1', '{=SUM(B1:C1*B2:C2)}')
# 和上面的例子一样但更冗长
worksheet.write_array_formula('A2:A2', '{=SUM(B1:C1*B2:C2)}')
# 写入一个返回一系列值的数组公式
worksheet.write_array_formula('A5:A7', '{=TREND(C5:C7,B5:B7)}')
# 数据写入后记得写上最后一句,释放缓存
workbook.close()

以上就可完成写入数据,也能正常把公式写入单元格并求和,细心的人会发现,当你发开该excel文件时是未保存的状态,也就是说这些公式在文件读取是无法读取到值的,为了避免这个问题,我上网了找了相关的解决方案,发现居然有办法模拟打开文件并保存,详情代码如下:

from win32com.client import Dispatch
# 打开excel并保存
def just_open(filename):
    xlApp = Dispatch("Excel.Application")
    xlApp.Visible = False
    xlBook = xlApp.Workbooks.Open(filename)
    xlBook.Save()
    xlBook.Close()

也就是说在写入文件后调用这个打开excel并保存的函数就可以解决读取公式行为0的问题。

发表评论

邮箱地址不会被公开。 必填项已用*标注