See More

{ "metadata": { "name": "", "signature": "sha256:466a82b8ea161829f59db1ffd9e6fd397e7ef48acf32fe5d0b1113e05d50451a" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "from IPython.display import Image" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c, \u0443\u0432\u0430\u0436\u0430\u0435\u043c\u044b\u0435 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0438." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0412 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 **Python** \u0438 **MS Excel**. \u0414\u0430\u043d\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u043d\u043b\u0430\u0439\u043d \u043e\u0442\u0447\u0435\u0442\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u043e\u0431\u0449\u0435\u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u043d\u0443 \u0438\u043b\u0438 \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u0434\u0440\u0443\u0433\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438. \u0422\u0430\u043a\u0436\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e, \u0442.\u0435. \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u043d\u0430 python \u0432 Excel, \u0447\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0442\u0447\u0435\u0442\u043e\u0432." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 MS Excel \u043d\u0430 Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Excel \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0438\u0437 Python \u043c\u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b 2 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430:\n", "1. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a [xlrd, xlwt, xlutils](http://www.python-excel.org/) \u0438\u043b\u0438 [openpyxl](https://pythonhosted.org/openpyxl/index.html)\n", "2. \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 com-\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u044d\u0442\u0438\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b excel \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438, \u0430 \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0438\u0445 \u0432\u043e \u0432\u0442\u043e\u0440\u0443\u044e. \u0422\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f." ] }, { "cell_type": "heading", "level": 6, "metadata": {}, "source": [ "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0418\u0442\u0430\u043a, \u043f\u0435\u0440\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u043f\u0438\u0441\u0430\u043d. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f [\u0441\u0442\u0430\u0442\u044c\u044f](http://habrahabr.ru/post/99923/) \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b c **xlrd, xlwt, xlutils**. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u0443\u0441\u043e\u043a \u043a\u043e\u0434\u0430 \u0441 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u043e\u0442\u043a\u0440\u043e\u0435\u043c \u0444\u0430\u0439\u043b *xls* \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0439 \u043b\u0438\u0441\u0442 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import xlrd, xlwt\n", "#\u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0444\u0430\u0439\u043b\n", "rb = xlrd.open_workbook('../ArticleScripts/ExcelPython/xl.xls',formatting_info=True)\n", "\n", "#\u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043b\u0438\u0441\u0442\n", "sheet = rb.sheet_by_index(0)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 19 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u043d\u0443\u0436\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 A1\n", "val = sheet.row_values(0)\n", "\n", "#\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u0438\u0439 \u0438\u0437 \u0432\u0441\u0435\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439\n", "vals = [sheet.row_values(rownum) for rownum in range(sheet.nrows)]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 193 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0440\u0443\u0434\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0438\u0445 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0430\u0439\u043b." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043c\u0438 \u043d\u043e\u0432\u044b\u0439 excel \u0444\u0430\u0439\u043b \u0441 \u043d\u043e\u0432\u043e\u0439 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043a\u043d\u0438\u0433\u043e\u0439:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "wb = xlwt.Workbook()\n", "ws = wb.add_sheet('Test')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 194 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0440\u0430\u043d\u0435\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#\u0432 A1 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u044f\u0447\u0435\u0439\u043a\u0438 A1 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430\n", "ws.write(0, 0, val[0])\n", "\n", "#\u0432 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 B \u0437\u0430\u043f\u0438\u0448\u0438\u043c \u043d\u0430\u0448\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 A \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430\n", "i = 0\n", "for rec in vals:\n", " ws.write(i,1,rec[0])\n", " i =+ i\n", "\n", "#\u0441\u043e\u0445\u0440\u0430\u0435\u043c \u0440\u0430\u0431\u043e\u0447\u0438\u044e \u043a\u043d\u0438\u0433\u0443\n", "wb.save('../ArticleScripts/ExcelPython/xl_rec.xls')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 29 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0418\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b\u0448\u0435 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u043a\u0430 **xlrd** \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 **xlwt** - \u0437\u0430 \u0437\u0430\u043f\u0438\u0441\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u043d\u0435\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u043a\u043d\u0438\u0433\u0443 \u0431\u0435\u0437 \u0435\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043d\u043e\u0432\u0443\u044e. \u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 *xls* (Excel 2003) \u0438 \u0443 \u043d\u0438\u0445 \u043d\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 *xlsx* (Excel 2007 \u0438 \u0432\u044b\u0448\u0435)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0427\u0442\u043e\u0431\u044b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c xlsx, \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 **openpyxl**. \u0414\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u0435\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u043d\u0443\u0436\u043d\u0443\u044e \u043a\u043d\u0438\u0433\u0443 \u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043b\u0438\u0441\u0442:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import openpyxl\n", "wb = openpyxl.load_workbook(filename = '../ArticleScripts/ExcelPython/openpyxl.xlsx')\n", "sheet = wb['test']" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 30 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0432\u044b\u0448\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u044c\u043e \u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u043e. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438\n", "val = sheet['A1'].value\n", "\n", "#\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\n", "vals = [v[0].value for v in sheet.range('A1:A2')]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e *openpyxl* \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0436\u0430\u0442\u0441\u044f \u043a \u044f\u0447\u0435\u0439\u043a\u0430\u043c \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044f\u043c \u0447\u0435\u0440\u0435\u0437 \u0438\u0445 \u0438\u043c\u0435\u043d\u0430, \u0447\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0422\u0435\u043f\u0435\u0440\u0435\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u043d\u0430\u043c \u043f\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443\n", "sheet['B1'] = val\n", "\n", "#\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\n", "i = 0\n", "for rec in vals:\n", " sheet.cell(row=i, column=2).value = rec\n", " i =+ 1\n", "\n", "# \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435\n", "wb.save('../ArticleScripts/ExcelPython/openpyxl.xlsx')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 102 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0437\u0430\u043f\u0438\u0441\u044c, \u0442\u043e\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 \u043a\u043e\u0434\u0435 \u0432\u044b\u0448\u0435, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e *openpyxl* \u043a\u0440\u043e\u043c\u0435 \u0438\u043c\u0435\u043d \u044f\u0447\u0435\u0435\u043a \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0441 \u0438\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041a \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430\u043c \u0434\u0430\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043d\u0435\u0441\u0442\u0438, \u0442\u043e \u0447\u0442\u043e, \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u043a\u043d\u0438\u0433\u0438." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 excel \u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043d\u0443\u0436\u043d\u043e 4 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0438 \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u0434\u043e\u0431\u043d\u043e. \u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0443\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a VBA (\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0434\u043b\u044f \u043a\u0430\u043a\u043e\u0439 \u043b\u0438\u0431\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438) \u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041e\u0434\u043d\u0430\u043a\u043e, \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u044d\u0442\u0438\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u043a\u0435\u043a\u0430\u043c\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430 \u0438 \u0443\u0434\u043e\u0431\u043d\u0430 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f Excel \u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u043e \u0435\u0441\u043b\u0438 \u0412\u0430\u043c \u043d\u0430\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439, \u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u043e\u0434\u043f\u0443\u043d\u043a\u0442 \u0434\u043b\u044f \u0412\u0430\u0441." ] }, { "cell_type": "heading", "level": 6, "metadata": {}, "source": [ "\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 com-\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0412 \u0441\u0432\u043e\u0438\u0445 \u043e\u0442\u0447\u0435\u0442\u0430\u0445 \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 Excel \u0447\u0435\u0440\u0435\u0437 com-\u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 **win32com**. \u0415\u0433\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0432\u044b\u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441 \u0444\u0430\u0439\u043b\u043e\u043c \u0432\u0441\u0435 \u043e\u043f\u0440\u0435\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 Excel \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c VBA." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041f\u0440\u043e\u0438\u043b\u043b\u044e\u0441\u0442\u0438\u0440\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u043e \u043d\u0430 \u0442\u043e\u0439 \u0436\u0435 \u0437\u0430\u0434\u0430\u0447\u0435, \u0447\u0442\u043e \u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u043d\u0443\u0436\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c COM \u043e\u0431\u044a\u0435\u043a\u0442:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import win32com.client\n", "Excel = win32com.client.Dispatch(\"Excel.Application\")" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 187 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 *Excel* \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u043e \u0432\u0441\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c VBA. \u0414\u0430\u0432\u0430\u0439\u0442\u0435, \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u043e\u0442\u043a\u0440\u043e\u0435\u043c \u043b\u044e\u0431\u0443\u044e \u043a\u043d\u0438\u0433\u0443 \u0438 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043b\u0438\u0441\u0442. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "wb = Excel.Workbooks.Open(u'D:\\\\Scripts\\\\DataScience\\\\ArticleScripts\\\\ExcelPython\\\\xl.xls')\n", "sheet = wb.ActiveSheet" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 188 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438\n", "val = sheet.Cells(1,1).value\n", "\n", "#\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0438 A1:A2\n", "vals = [r[0].value for r in sheet.Range(\"A1:A2\")]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 189 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u043c\u044b \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0437\u0434\u0435\u0441\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0447\u0438\u0441\u0442\u043e\u0433\u043e VBA. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043e\u043d\u043e \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Python \u043f\u0440\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0442\u0440\u0430\u0442\u0430\u0445 \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u043a\u0443 \u043a\u043e\u0434\u0430." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443\n", "sheet.Cells(1,2).value = val\n", "\n", "#\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\n", "i = 1\n", "for rec in vals:\n", " sheet.Cells(i,3).value = rec\n", " i = i + 1\n", "\n", "#\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0440\u0430\u0431\u043e\u0447\u0438\u044e \u043a\u043d\u0433\u0438\u0443 \n", "wb.Save()\n", "\n", "#\u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0435\u0435\n", "wb.Close()\n", "\n", "#\u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c COM \u043e\u0431\u044a\u0435\u043a\u0442\n", "Excel.Quit()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 190 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0442\u043e\u0436\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f. \u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0438 \u0432 \u0442\u043e\u0439 \u0436\u0435 \u043a\u043d\u0438\u0433\u0435, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u0442\u043a\u0440\u044b\u043b\u0438 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041e\u0434\u043d\u0430\u043a\u043e, \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c, \u043e\u0431\u0440\u0430\u0442\u0438\u0442 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e *i*, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0435 0, \u043a\u0430\u043a \u043f\u0440\u0438\u043d\u044f\u0442\u043e python, \u0430 1. \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438 \u044f\u0447\u0435\u0435\u043a \u043a\u0430\u043a \u0438\u0437 VBA, \u0430 \u0442\u0430\u043c \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0441 0, \u0430 \u0441 1." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041d\u0430 \u044d\u0442\u043e\u043c \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043c \u0440\u0430\u0437\u0431\u043e\u0440 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 excel \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0432 python \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 Python \u0438\u0437 MS Excel" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0442\u0430\u043a\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 python, \u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0435\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432 Excel. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0435 \u043d\u0430 VBA, \u043d\u043e \u0437\u0430\u0447\u0435\u043c?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 python \u0432 Excel \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u0430\u044f \u043d\u0430\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0430 [ExcelPython](http://sourceforge.net/projects/excelpython/). \u0421 \u0435\u0435 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 python \u043f\u0440\u044f\u043c\u043e \u0438\u0437 Excel, \u043f\u0440\u0430\u0432\u0434\u0430 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0435\u0449\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043e\u0431\u0435\u0440\u043a\u0443 \u043d\u0430 VBA, \u0438 \u0432\u0441\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0438\u0436\u0435." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0418\u0442\u0430\u043a, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043d\u0430 python, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def get_unique(lists):\n", " sm = 0\n", " for i in lists:\n", " sm = sm + int(i.pop()) \n", " return sm" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 192 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041d\u0430 \u0432\u0445\u043e\u0434 \u0435\u0439 \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u043e\u0432, \u044d\u0442\u043e \u043e\u0434\u043d\u043e \u0438\u0437 \u0443\u0441\u043b\u043e\u0432\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 Excel." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u0444\u0430\u0439\u043b\u0435 *plugin.py*. \u0418 \u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0435\u0433\u043e \u0432 \u0442\u0443 \u0436\u0435 \u0434\u0438\u0440\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u043d\u0430\u0448 excel \u0444\u0430\u0439\u043b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0422\u0435\u043f\u0440\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c [ExcelPython](http://sourceforge.net/projects/excelpython/). \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u0443\u0441\u043a exe-\u0444\u0430\u0439\u043b\u0430 \u0438 \u043d\u0435 \u0432\u044b\u0432\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d\u0438\u0439." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b excel \u0438 \u0432\u044b\u0437\u043e\u0432\u0435\u043c *\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 VBA* (Alt+F11). \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u044b\u0448\u0435\u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043d\u0430\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0435\u0435 \u043f\u043e\u043a\u0434\u043b\u044e\u0447\u0438\u0442\u044c, \u0447\u0435\u0440\u0435\u0437 *Tools->References*, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435: " ] }, { "cell_type": "code", "collapsed": false, "input": [ "Image('D:\\Scripts\\DataScience\\ArticleScripts\\ExcelPython\\ExcelPython1.png')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "png": "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\n", "prompt_number": 4, "text": [ "" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041d\u0443 \u0447\u0442\u043e \u0436\u0435, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438-\u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e Python-\u043c\u043e\u0434\u0443\u043b\u044f *plugin.py*. \u0412\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " Function sr(lists As Range)\n", " On Error GoTo do_error\n", " Set plugin = PyModule(\"plugin\", AddPath:=ThisWorkbook.Path)\n", " Set result = PyCall(plugin, \"get_unique\", PyTuple(lists.Value2))\n", " sr = WorksheetFunction.Transpose(PyVar(result))\n", " Exit Function\n", " do_error:\n", " sr = Err.Description\n", " End Function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0418\u0442\u0430\u043a, \u0447\u0442\u043e \u0436\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438? \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e **```PyModule```**, \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0435\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0438\u043c\u044f \u043c\u043e\u0434\u0443\u043b\u044f \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f, \u0438 \u043f\u0443\u0442\u044c \u0434\u043e \u043f\u0430\u043f\u043a\u0438 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f. \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0440\u0430\u0431\u043e\u0442\u044b **```PyModule```** \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u043e\u0434\u0443\u043b\u0435\u043c." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0417\u0430\u0442\u0435\u043c, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e **```PyCall```**, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u0443\u044e \u043d\u0430\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f. \u0412 \u043a\u0430\u0447\u0435\u0441\u0447\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 **```PyCall```** \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:\n", "1. \u041e\u0431\u044a\u0435\u043a\u0442 \u043c\u043e\u0434\u0443\u043b\u044f, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0448\u0430\u0433\u0435\n", "2. \u0418\u043c\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438\n", "3. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0441\u043f\u0438\u0441\u043a\u0430)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0424\u0443\u043d\u043a\u0446\u0438\u044f **```PyTuple```**, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0438\u0445 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 tuple \u044f\u0437\u044b\u043a\u0430 Python." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041d\u0443 \u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, **```PyVar```** \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u043f\u0440\u0435\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 python, \u043a \u0442\u0438\u043f\u0443 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u043c\u0443 Excel." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0422\u0435\u043f\u0435\u0440\u044c, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0448\u0435\u0439 \u0441\u0432\u044f\u0437\u043a\u0438, \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u043d\u0430\u0448\u0443 \u0441\u0432\u0435\u0436\u0435\u0438\u0441\u043f\u0435\u0447\u0435\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043d\u0430 \u043b\u0438\u0441\u0442\u0435 \u0432 Excel:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "Image('D:\\Scripts\\DataScience\\ArticleScripts\\ExcelPython\\ExcelPython2.png')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "png": "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\n", "prompt_number": 5, "text": [ "" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0440\u0438\u0441\u0443\u043d\u043a\u0430 \u0432\u0441\u0435 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041d\u0430\u0434\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f *ExcelPython*, \u0438 \u043d\u0430 [GitHub'e](https://github.com/ericremoreynolds/excelpython) \u0430\u0432\u0442\u043e\u0440\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u043d\u0430\u0434\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0441\u0430\u043c\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0438 \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0432\u0443\u044e\u0449\u0438\u043c \u043f\u0430\u043a\u0435\u0442\u0430\u043c." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u0422\u0430\u043a\u0436\u0435 \u0445\u043e\u0447\u0443 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043f\u0443\u0449\u0435\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435, \u0442\u0430\u043a\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043a\u0430\u043a [xlwings](http://xlwings.org/), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 Excel \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \"\u043d\u0430 \u043b\u0435\u0442\u0443\" \u0438\u043b\u0438 \u0436\u0435 [PyXLL](https://www.pyxll.com/index.html), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 *ExcelPython*. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043f\u0432\u0442\u0430\u043b\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u043e\u0431\u0449\u0438\u0442\u044c \u0440\u0430\u0437\u0431\u043e\u0440\u0430\u0441\u0430\u043d\u043d\u044b\u0439 \u043f\u043e \u0441\u0435\u0442\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b, \u0442.\u043a. \u0442\u0430\u043a\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0447\u0430\u0441\u0442\u043e \u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u044e\u0442 \u043d\u0430 \u0444\u043e\u0440\u043c\u0443\u0445 \u0438 \u0434\u0443\u043c\u0430\u044e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0438\u043c\u0435\u0442\u044c, \u0442\u0430\u043a\u0443\u044e \"\u0448\u043f\u0430\u0440\u0433\u0430\u043b\u043a\u0443\" \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439." ] } ], "metadata": {} } ] }