Last active
December 20, 2015 06:19
-
-
Save clebio/6085188 to your computer and use it in GitHub Desktop.
Python for Microsoft Office (using Python Tools for Visual Studio)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | |
<head> | |
<title>pythonOfficePresentation.md</title> | |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | |
<script src='style.css'></script> | |
</head> | |
<body> | |
<h1>Python for Microsoft Office Integration</h1> | |
<h2>Motiviation</h2> | |
<ul> | |
<li>Legacy versus Greenfield projects</li> | |
<li>Ubiquity of Microsoft Office</li> | |
</ul> | |
<h2>Prerequisites</h2> | |
<p>Visual Studio Shell is free (gratis).</p> | |
<ul> | |
<li>Python (2.7.5, amd64; <a href="http://www.python.org/download/windows/">CPython</a> )</li> | |
<li><a href="https://pytools.codeplex.com/">Python Tools for Visual Studio</a> (PTVS) | |
<ul> | |
<li><a href="http://www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx">Scott Hanselman's blog</a></li> | |
</ul></li> | |
<li><a href="http://sourceforge.net/projects/pywin32/">Python extensions (win32 COM)</a></li> | |
</ul> | |
<h2>Optional: Versioning with Git</h2> | |
<ul> | |
<li><a href="http://msdn.microsoft.com/en-us/library/hh850437(v=vs.120).aspx">Git for Visual Studio</a> | |
<ul> | |
<li>In Visual Studio, <code>Tools > Options > Source Control > Current source control plug-in</code></li> | |
<li>Also, <code>View menu > Team Explorer</code> (sic)</li> | |
<li>Finally, <em>Team Projects</em> button (looks like a power plug), <em>Clone</em> menu</li> | |
</ul></li> | |
</ul> | |
<h2>Functional Excel</h2> | |
<ul> | |
<li><a href="http://pytools.codeplex.com/wikipage?title=Pyvot">pyvot package on codeplex</a> | |
<ul> | |
<li>Once installed, in Visual Studio, need to run <code>Tools > Python Tools > Samples > Pyvot > Install pyvot...</code></li> | |
</ul></li> | |
<li><a href="http://pythonhosted.org/Pyvot/tutorial.html">Getting started with Pyvot</a></li> | |
</ul> | |
<h2>Programmatic PowerPoint</h2> | |
<ul> | |
<li><a href="http://www.s-anand.net/blog/automating-powerpoint-with-python/">Automating PowerPoint with Python</a> | |
<ul> | |
<li>Run <code>Python/Lib/site-packages/win32com/client/makepy.py</code> for each of 'Microsoft Office 12.0 Object Library' and 'Microsoft PowerPoint 12.0 Object Library'. Move the generated files to MSO.py and MSPPT.py, which have been added to this project.</li> | |
<li>This creates the win32 COM extensions for Microsoft Office, specifically. The generated files</li> | |
</ul></li> | |
</ul> | |
<h2>Final Thoughts</h2> | |
<ul> | |
<li>Full-Stack Analytics | |
<ul> | |
<li>End-to-end python development; process automation and monitoring, data aggregation and statistics, charting, and document preparation and publishing</li> | |
</ul></li> | |
<li>ETL, cron jobs, etc. | |
<ul> | |
<li><a href="http://pandas.pydata.org/">Pandas</a> and <a href="http://www.scipy.org/">SciPy</a> | |
<ul> | |
<li>Precompiled packages for Windows available from <a href="http://www.lfd.uci.edu/~gohlke/pythonlibs/">Christoph Gohlke unofficial page</a></li> | |
</ul></li> | |
<li><a href="http://shop.oreilly.com/product/0636920023784.do">Python for Data Analysis</a></li> | |
<li><a href="http://www-stat.stanford.edu/~tibs/ElemStatLearn/">Elements of Statistical Learning</a> (PDF available there).</li> | |
</ul></li> | |
</ul> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
body{ | |
margin: 0 auto; | |
font-family: Georgia, Palatino, serif; | |
color: #444444; | |
line-height: 1; | |
max-width: 960px; | |
padding: 5px; | |
} | |
h1, h2, h3, h4 { | |
color: #111111; | |
font-weight: 400; | |
} | |
h1, h2, h3, h4, h5, p { | |
margin-bottom: 16px; | |
padding: 0; | |
} | |
h1 { | |
font-size: 28px; | |
} | |
h2 { | |
font-size: 22px; | |
margin: 20px 0 6px; | |
} | |
h3 { | |
font-size: 21px; | |
} | |
h4 { | |
font-size: 18px; | |
} | |
h5 { | |
font-size: 16px; | |
} | |
a { | |
color: #0099ff; | |
margin: 0; | |
padding: 0; | |
vertical-align: baseline; | |
} | |
a:hover { | |
text-decoration: none; | |
color: #ff6600; | |
} | |
a:visited { | |
color: purple; | |
} | |
ul, ol { | |
padding: 0; | |
margin: 0; | |
} | |
li { | |
line-height: 24px; | |
margin-left: 44px; | |
} | |
li ul, li ul { | |
margin-left: 24px; | |
} | |
p, ul, ol { | |
font-size: 14px; | |
line-height: 20px; | |
max-width: 540px; | |
} | |
pre { | |
padding: 0px 24px; | |
max-width: 800px; | |
white-space: pre-wrap; | |
} | |
code { | |
font-family: Consolas, Monaco, Andale Mono, monospace; | |
line-height: 1.5; | |
font-size: 13px; | |
} | |
aside { | |
display: block; | |
float: right; | |
width: 390px; | |
} | |
blockquote { | |
border-left:.5em solid #eee; | |
padding: 0 2em; | |
margin-left:0; | |
max-width: 476px; | |
} | |
blockquote cite { | |
font-size:14px; | |
line-height:20px; | |
color:#bfbfbf; | |
} | |
blockquote cite:before { | |
content: '\2014 \00A0'; | |
} | |
blockquote p { | |
color: #666; | |
max-width: 460px; | |
} | |
hr { | |
width: 540px; | |
text-align: left; | |
margin: 0 auto 0 0; | |
color: #999; | |
} | |
button, | |
input, | |
select, | |
textarea { | |
font-size: 100%; | |
margin: 0; | |
vertical-align: baseline; | |
*vertical-align: middle; | |
} | |
button, input { | |
line-height: normal; | |
*overflow: visible; | |
} | |
button::-moz-focus-inner, input::-moz-focus-inner { | |
border: 0; | |
padding: 0; | |
} | |
button, | |
input[type="button"], | |
input[type="reset"], | |
input[type="submit"] { | |
cursor: pointer; | |
-webkit-appearance: button; | |
} | |
input[type=checkbox], input[type=radio] { | |
cursor: pointer; | |
} | |
/* override default chrome & firefox settings */ | |
input:not([type="image"]), textarea { | |
-webkit-box-sizing: content-box; | |
-moz-box-sizing: content-box; | |
box-sizing: content-box; | |
} | |
input[type="search"] { | |
-webkit-appearance: textfield; | |
-webkit-box-sizing: content-box; | |
-moz-box-sizing: content-box; | |
box-sizing: content-box; | |
} | |
input[type="search"]::-webkit-search-decoration { | |
-webkit-appearance: none; | |
} | |
label, | |
input, | |
select, | |
textarea { | |
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; | |
font-size: 13px; | |
font-weight: normal; | |
line-height: normal; | |
margin-bottom: 18px; | |
} | |
input[type=checkbox], input[type=radio] { | |
cursor: pointer; | |
margin-bottom: 0; | |
} | |
input[type=text], | |
input[type=password], | |
textarea, | |
select { | |
display: inline-block; | |
width: 210px; | |
padding: 4px; | |
font-size: 13px; | |
font-weight: normal; | |
line-height: 18px; | |
height: 18px; | |
color: #808080; | |
border: 1px solid #ccc; | |
-webkit-border-radius: 3px; | |
-moz-border-radius: 3px; | |
border-radius: 3px; | |
} | |
select, input[type=file] { | |
height: 27px; | |
line-height: 27px; | |
} | |
textarea { | |
height: auto; | |
} | |
/* grey out placeholders */ | |
:-moz-placeholder { | |
color: #bfbfbf; | |
} | |
::-webkit-input-placeholder { | |
color: #bfbfbf; | |
} | |
input[type=text], | |
input[type=password], | |
select, | |
textarea { | |
-webkit-transition: border linear 0.2s, box-shadow linear 0.2s; | |
-moz-transition: border linear 0.2s, box-shadow linear 0.2s; | |
transition: border linear 0.2s, box-shadow linear 0.2s; | |
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); | |
-moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); | |
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); | |
} | |
input[type=text]:focus, input[type=password]:focus, textarea:focus { | |
outline: none; | |
border-color: rgba(82, 168, 236, 0.8); | |
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); | |
-moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); | |
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); | |
} | |
/* buttons */ | |
button { | |
display: inline-block; | |
padding: 4px 14px; | |
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; | |
font-size: 13px; | |
line-height: 18px; | |
-webkit-border-radius: 4px; | |
-moz-border-radius: 4px; | |
border-radius: 4px; | |
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); | |
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); | |
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); | |
background-color: #0064cd; | |
background-repeat: repeat-x; | |
background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd)); | |
background-image: -moz-linear-gradient(top, #049cdb, #0064cd); | |
background-image: -ms-linear-gradient(top, #049cdb, #0064cd); | |
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd)); | |
background-image: -webkit-linear-gradient(top, #049cdb, #0064cd); | |
background-image: -o-linear-gradient(top, #049cdb, #0064cd); | |
background-image: linear-gradient(top, #049cdb, #0064cd); | |
color: #fff; | |
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); | |
border: 1px solid #004b9a; | |
border-bottom-color: #003f81; | |
-webkit-transition: 0.1s linear all; | |
-moz-transition: 0.1s linear all; | |
transition: 0.1s linear all; | |
border-color: #0064cd #0064cd #003f81; | |
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); | |
} | |
button:hover { | |
color: #fff; | |
background-position: 0 -15px; | |
text-decoration: none; | |
} | |
button:active { | |
-webkit-box-shadow: inset 0 3px 7px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); | |
-moz-box-shadow: inset 0 3px 7px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); | |
box-shadow: inset 0 3px 7px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); | |
} | |
button::-moz-focus-inner { | |
padding: 0; | |
border: 0; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment