Python+xlwings制作天气预报表

  • Post category:Python

下面是Python+xlwings制作天气预报表的完整实例教程。

1.安装xlwings

在命令行中使用以下代码安装xlwings模块:

pip install xlwings

2.在Excel中添加Python解释器

打开Excel,进入xlwings选项卡,点击add ins,在弹出的Excel插件管理器中勾选Python插件。

3.创建Excel文件

在Excel中新建一个工作簿,并将工作表重命名为“天气预报”。

4.添加Python代码

在Excel工作簿中的“天气预报”工作表中,按下Alt+F11,打开VBA编辑器。在编辑器中添加以下Python代码:

import requests
import xlwings as xw

def get_weather():
    url = 'https://free-api.heweather.net/s6/weather/now'
    params = {
        'location': '北京',
        'key': 'your_key'
         }
    response = requests.get(url, params=params)
    response.encoding = 'utf-8'
    weather = response.json()['HeWeather6'][0]['now']['cond_txt']
    return weather

@xw.func
def weather_report():
    weather = get_weather()
    return f"今天北京天气{weather}"

在上述代码中,get_weather()函数通过调用和风天气的API获取北京的天气情况,weather_report()函数通过xlwings装饰器@xw.func把函数转化为Excel的自定义函数,具体返回值格式如”今天北京天气晴”。

5.在Excel中使用自定义函数

在Excel工作簿中的第一个单元格输入“=weather_report()”然后按下Enter。等待函数执行完毕,即可在此单元格中看到当前北京的天气情况。

示例1:批量查询多城市的天气

在get_weather()函数中添加城市名称参数,稍微修改返回值,得到以下代码:

import requests
import xlwings as xw

def get_weather(city):
    url = 'https://free-api.heweather.net/s6/weather/now'
    params = {
        'location': city,
        'key': 'your_key'
         }
    response = requests.get(url, params=params)
    response.encoding = 'utf-8'
    weather = response.json()['HeWeather6'][0]['now']['cond_txt']
    return weather

@xw.func
def weather_report(city):
    weather = get_weather(city)
    return f"{city}今天天气{weather}"

在Excel的第一个工作表中输入所需城市名称列表,再新增一个工作表用于生成天气报告,之后在该工作表的第一个单元格中输入“=weather_report(A1)” (A1为所需城市名称单元格) 然后按下Enter即可批量查询多城市的天气情况。

示例2:自动刷新天气

修改Excel工作簿中的VBA编辑器代码,增加自动刷新功能,即自动更新天气预报在Excel中显示。示例代码如下:

import requests
import xlwings as xw

def get_weather(city):
    url = 'https://free-api.heweather.net/s6/weather/now'
    params = {
        'location': city,
        'key': 'your_key'
         }
    response = requests.get(url, params=params)
    response.encoding = 'utf-8'
    weather = response.json()['HeWeather6'][0]['now']['cond_txt']
    return weather

@xw.func
def weather_report(city):
    weather = get_weather(city)
    return f"{city}今天天气{weather}"

@xw.sub
def refresh_weather():
    wb = xw.Book.caller()
    for sht in wb.sheets:
        sht.calculate()

修改weather_report()函数的输入参数,添加自动化代码refresh_weather()函数,其中@sbt标记表示该函数是Excel的宏。

在Excel文件中,选择“天气预报”工作表,然后单击“激活宏”按钮来刷新天气预报。

至此,我们已经完成了Python+xlwings制作天气预报表的完整实例教程,以上示例可以根据实际需求进行修改和适应。