Skip to content

Instantly share code, notes, and snippets.

@varnav
Created January 24, 2021 20:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save varnav/68b303ab10d32fb88483ed5f2f2856a9 to your computer and use it in GitHub Desktop.
Save varnav/68b303ab10d32fb88483ed5f2f2856a9 to your computer and use it in GitHub Desktop.
Подстановка курсов валют ЦБ на заданную дату в xlsx файле
#!/usr/bin/env python3
import datetime
import click
import requests
import xmltodict
from openpyxl import load_workbook
@click.command()
@click.argument('file', type=click.Path(exists=True))
@click.argument('scol', default='A')
@click.argument('dcol', default='B')
def main(file, scol='A', dcol='B'):
"""
Подстановка курсов валют ЦБ на заданную дату в xlsx файле
Скрипт прочитает даты в столбце scol, и подставит для них курс валют в столбец dcol
Используется активный лист
:param file: Путь к файлу
:param scol: Исходный столбец (A если не указан)
:param dcol: Столбец назначения (B если не указан)
"""
wb = load_workbook(filename=file, data_only=True)
ws = wb.active
for cell in ws[scol]:
# print(cell.value)
# print(type(cell.value))
if type(cell.value) is datetime.datetime:
d = cell.value.strftime("%d/%m/%Y")
else:
print("Тип ячейки " + str(cell.row) + " не дата.")
continue
url = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=" + d
print(url)
response = requests.get(url)
data = xmltodict.parse(response.content)
if data['ValCurs']['Valute'][10]['CharCode'] == 'USD':
rate = data['ValCurs']['Valute'][10]['Value']
# rate = str(rate.replace(',', '.'))
print(rate)
ws[dcol + str(cell.row)] = rate
else:
print('Получен курс не USD')
exit(1)
wb.save(filename=file)
wb.close()
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment