pandas 打开有公式的excel表取值错误的解决办法
pandas 打开有公式的表格,如果直接读取,会出现有公式的单元格为空或零的情况,
参见
https://www.cnblogs.com/ubuntu1987/p/11491727.html
https://blog.51cto.com/antidarkness/1974684
wb = openpyxl.load_workbook(‘abc.xlsx’, data_only=True)
当’abc.xlsx’被生成并在Excel程序中打开并保存之后(这个过程Excel会把公式结果计算出来),该文件附带有两套值,一套是公式全都没有计算的(data_only=False(默认)),一套是公式计算了结果的(data_only=True)。(如果没有被Excel打开并保存,则只有一套值(data_only=False的那套,公式没有计算结果的)。
此时,以data_only=True或默认data_only=False打开会得到两种不同的结果,各自独立,即data_only=True状态下打开的,会发现公式结果为None(空值)或者一个计算好的常数,而不会看到它原本的公式是如何。而data_only=False则只会显示公式而已。因此,data_only=True状态下打开,如果最后用save()函数保存了,则原xlsx文件中,公式会被替换为常数结果或空值。而data_only=False状态下打开,最后用save()函数保存了的话,原xlsx文件也会只剩下data_only=False的那套值(即公式),另一套(data_only=True)的值会丢失,如想重新获得两套值,则仍旧需要用Excel程序打开该文件并保存。
from win32com.client import Dispatch
'''
此版带excel的xls转换为xlsx,
'''
tag_year=input('请输入需要导入的年份(默认2020): ')
if tag_year=="":
tag_year=2020
else:
tag_year=int(tag_year)
print('打开.........')
#tag_year=2020
tag_file=str(tag_year)+'年经营数据统计表.xlsx'
#模拟手工打开excel表,不支持wps表格
try:
xlapp=Dispatch("Excel.Application")
xlapp.Visible=False
xlbook=xlapp.Workbooks.Open(os.path.join(os.getcwd(),tag_file))
xlbook.Save()
xlbook.Close()
except:
print('请手工打开 %s 后,随便修改一个空值并保存'%tag_file)
注意Dispathc,Visible Save,Close 是的首字母是大写的