在邮件中查看时,包含由python openpyxl创建的公式的单元格显示为空
我需要做一个周报,我选择使用openpyxl python模块创建它,并通过邮件发送,在邮件中查看时,包含由python openpyxl创建的公式的单元格显示为空,python,excel,email,outlook,openpyxl,Python,Excel,Email,Outlook,Openpyxl,我需要做一个周报,我选择使用openpyxl python模块创建它,并通过邮件发送,当我打开收到的邮件(outlook)时,带有公式的单元格显示为空,但是当下载文件并打开它时,数据显示,OS fedora 20。部分守则: # imported modules from openpyxl ... wb = Workbook() ws = wb.active counter = 3 ws.append(row) for day in data : row = ['']*(len(host
当我打开收到的邮件(outlook)时,带有公式的单元格显示为空,
但是当下载文件并打开它时,数据显示,
OS fedora 20。部分守则:
# imported modules from openpyxl ...
wb = Workbook()
ws = wb.active
counter = 3
ws.append(row)
for day in data :
row = ['']*(len(hosts)*2 +5)
row[0] = day.dayDate
row[1] ='=SUM(F'+str(counter)+':'+get_column_letter(len(hosts)+5)+str(counter)+\
')/(COUNT(F'+str(counter)+':'+get_column_letter(len(hosts)+5)+str(counter)+'))'
row[2] = '=SUM('+get_column_letter(len(hosts)+6)+str(counter)+':'+\
get_column_letter(len(hosts)*2+5)+str(counter)+')/COUNT('+\
get_column_letter(len(hosts)+6)+str(counter)+':'+\
get_column_letter(len(hosts)*2+5)+str(counter)+')'
row[3] = '=MAX('+get_column_letter(len(hosts)+6)+str(counter)+':'+\
get_column_letter(len(hosts)*2+5)+str(counter)+')'
row[4] = '=_xlfn.STDEV.P('+get_column_letter(len(hosts)+6)+str(counter)\
+':'+get_column_letter(len(hosts)*2+5)+str(counter)+')'
counter += 1
然后,我根据日期创建一些图表等。。并保存,然后通过邮件发送:
wb.save(pathToFile+fileName+'.xlsx')
os.system('echo -e "'+msg+'" | mail -s "'+fileName+'" -a '+\
pathToFile+fileName+'.xlsx -r '+myUsr+' '+ppl2send2)
这些都是实际代码的一部分,有人知道为什么电子邮件没有在单元格中显示公式的结果吗
提前感谢:)
openpyxl不会为插入电子表格的公式计算结果;如果使用excel打开并保存工作表,则结果中会填入值。opepyxl的公式有问题,更新excel文件后,需要打开并保存它以获得生成的值。有两种方法可以解决这个问题
import win32com.client
wb.save('PUT YOUR FILE PATH HERE')
ab = win32com.client.Dispatch("Excel.Application")
wb2 = ab.Workbooks.Open('PUT YOUR FILE PATH HERE')
ws = ab.Sheets('PUT THE SHEET NAME HERE')
ab.DisplayAlerts = False
wb2.Save()
wb2.Close()
ab.Application.Quit()
#Now you can read from the file and you can see the values generated from the formula
import xlwings
wb= xlwings.Book('PUT YOUR FILE PATH HERE')
ws = wb.sheets[0]
#Do your update here example ws.range(2, 8).value = 34
wb.save()
wb.close()
好啊我可以通过脚本解决这个问题吗?!。。p、 在美国,运行脚本的操作系统没有Microsoft office,我在保存文件(第一次)后尝试重新打开并再次保存。。但是它没有帮助我看不到openpyxl的方法(我可能会错过它),但是我认为xlsxwriter允许您提供一个值来显示公式。您必须自己计算该值,但对于您的示例来说,这似乎没问题。