{
"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": [
"