出现 "At least one sheet must be visible" 错误通常是因为你在创建 Excel 文件时,没有指定任何一个 sheet 为可见。这个错误通常发生在使用 openpyxl 引擎时。
要解决这个问题,你可以在创建 ExcelWriter 对象时,将参数 engine
设置为 'xlsxwriter'。这样做可以使用 xlsxwriter 引擎来处理 Excel 文件,而不会出现上述错误。
下面是一个修改后的示例代码:
writer = pd.ExcelWriter('{}~{}溶解氧数据异常设备报警次数.xlsx'.format(starttime, endtime), engine='xlsxwriter')
for imei in imei_list:
# 其他代码保持不变
writer.save()
使用xlsxwriter 引擎,自己没有创建sheet,它会默认给你创建一个sheet,保证excl保存时至少存在一个可见sheet
通过将引擎设置为 'xlsxwriter',你应该能够成功创建 Excel 文件并写入数据,同时避免 "At least one sheet must be visible" 错误的出现。
也有可能是 代码有问题:
writer = pd.ExcelWriter('{}~{}溶解氧数据异常设备报警次数.xlsx'.format(starttime, endtime), engine='openpyxl')
for imei in imei_list:
url = xxxx
headers1 = {
'Content-type': 'application/json',
'Accept': 'application/json',
'Token': "{}".format(token),
}
data1 = {"createFrom": "{}".format(starttime),
"createTo": "{} 23:59:59".format(endtime),
"alarmConditionName": xxxxxx,
"imei": imei,
}
response = requests.post(headers=headers1, json=data1, url=url)
rows = response.json().get('data').get('rows')
a = [ime.get('createTime')[0:10] for ime in rows]
counter = Counter(a)
data = {'imei': list(counter.keys()), '次数': list(counter.values())}
df = pd.DataFrame(data)
df.to_excel(writer, sheet_name=imei, index=False)
writer.close()
上述代码一看是没有问题的,发送请求,获取数据,新建表格保存数据
但是有一个问题:
假如:imei_list 为空的话,就代表没有sheet被创建(没有指定任何一个 sheet 为可见),然后writer.close() 保存,
就会报:
At least one sheet must be visible
在前面加一个判断:
from openpyxl import Workbook
if len(imei_list) == 0:
wb = Workbook()
# 保存工作簿
wb.save('{}~{}溶解氧数据异常设备报警次数.xlsx'.format(starttime, endtime))
else:
pass