📄 Page
1
Felix Zumstein Python for Excel A Modern Environment for Automation and Data Analysis
📄 Page
2
DATA / PY THON “This book explains how you can integrate Python into Excel and free yourself from the inevitable disaster of huge workbooks, thousands of formulas, and ugly VBA hacks. Python for Excel is probably the single most useful book on Excel that I have read and an absolute must- read for any advanced Excel user.” —Andreas F. Clenow CIO, Acies Asset Management, and author of international best-sellers Following the Trend, Stocks on the Move, and Trading Evolved Python for Excel ISBN: 978-1-492-08100-5 US $59.99 CAN $79.99 Twitter: @oreillymedia facebook.com/oreilly While Excel remains ubiquitous in the business world, recent Microsoft feedback forums are full of requests to include Python as an Excel scripting language. In fact, it’s the top feature requested. What makes this combination so compelling? In this hands-on guide, Felix Zumstein—creator of xlwings, a popular open source package for automating Excel with Python—shows experienced Excel users how to integrate these two worlds efficiently. Excel has added quite a few new capabilities over the past couple of years, but its automation language, VBA, stopped evolving a long time ago. Many Excel power users have already adopted Python for daily automation tasks. This guide gets you started. • Use Python without extensive programming knowledge • Get started with modern tools, including Jupyter notebooks and Visual Studio Code • Use pandas to acquire, clean, and analyze data and replace typical Excel calculations • Automate tedious tasks like consolidation of Excel workbooks and production of Excel reports • Use xlwings to build interactive Excel tools that use Python as a calculation engine • Connect Excel to databases and CSV les and fetch data from the internet using Python code • Use Python as a single tool to replace VBA, Power Query, and Power Pivot Felix Zumstein is creator and maintainer of xlwings, a popular open source package that allows the automation of Excel with Python on Windows and macOS. As CEO of xltrail, a version control system for Excel les, he’s gained deep insight into the typical use cases and issues with Excel across various industries. Python for Excel Python for Excel
📄 Page
3
Praise for Python for Excel What can Python do for Excel? If you’ve ever dealt with unexpected workbook crashes, broken calculations, and tedious manual processes, you’ll want to find out. Python for Excel is a comprehensive and succinct overview to getting started with Python as a spreadsheet user, and building powerful data products using both. Don’t let the fear of learning to code keep you away: Felix provides an exceptional foundation for learning Python that even experienced programmers could benefit from. Moreover, he frames this information in a way that is quickly accessible and applicable to you as an Excel user. You can quickly tell reading this book that it was written by someone with years of experience teaching and working with clients on how to use Excel to its fullest extent with the help of Python programming. Felix is uniquely suited to show you the possibilities of learning Python for Excel; I hope you enjoy the master class as much as I did. —George Mount, Founder, Stringfest Analytics Python is the natural progression from Excel and it’s tempting to simply discard Excel all together. Tempting, but hardly realistic. Excel is here, and here to stay, both in the corporate world and as a useful desktop tool at home and in the office. This book provides the much needed bridge between these two worlds. It explains how you can integrate Python into Excel and free yourself from the inevitable disaster of huge workbooks, thousands of formulas, and ugly VBA hacks. Python for Excel is probably the single most useful book on Excel that I have read and an absolute must-read for any advanced Excel user. A highly recommended book! —Andreas F. Clenow, CIO Acies Asset Management and author of international best-sellers Following the Trend, Stocks on the Move, and Trading Evolved
📄 Page
4
Excel remains a cornerstone tool of the financial world, but a vast amount of these Excel applications are an irresponsible mess. This book does an excellent job of showing you how to build better, more robust applications with the help of xlwings. —Werner Brönnimann, Derivatives and DeFi practitioner and cofounder, Ubinetic AG Excel and Python are two of the most important tools in the Business Analytics toolbox, and together they are far greater than the sum of their parts. In this book, Felix Zumstein lays out his unparalleled mastery of the many ways to connect Python and Excel using open source, cross-platform solutions. It will be an invaluable tool for business analysts and data scientists alike, and any Python user looking to harness the power of Excel in their code. —Daniel Guetta, Associate Professor of Professional Practice and Director of the Business Analytics Initiative at Columbia Business School and coauthor of Python for MBAs
📄 Page
5
Felix Zumstein Python for Excel A Modern Environment for Automation and Data Analysis Boston Farnham Sebastopol TokyoBeijing
📄 Page
6
978-1-492-08100-5 [LSI] Python for Excel by Felix Zumstein Copyright © 2021 Zoomer Analytics LLC. All rights reserved. Printed in the United States of America. Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472. O’Reilly books may be purchased for educational, business, or sales promotional use. Online editions are also available for most titles (http://oreilly.com). For more information, contact our corporate/institutional sales department: 800-998-9938 or corporate@oreilly.com. Acquisitions Editor: Michelle Smith Development Editor: Melissa Potter Production Editor: Daniel Elfanbaum Copyeditor: Piper Editorial Consulting, LLC Proofreader: nSight Inc. Indexer: nSight Inc. Interior Designer: David Futato Cover Designer: Karen Montgomery Illustrator: Kate Dullea March 2021: First Edition Revision History for the First Edition 2021-03-04: First Release See http://oreilly.com/catalog/errata.csp?isbn=9781492081005 for release details. The O’Reilly logo is a registered trademark of O’Reilly Media, Inc. Python for Excel, the cover image, and related trade dress are trademarks of O’Reilly Media, Inc. The views expressed in this work are those of the author, and do not represent the publisher’s views. While the publisher and the author have used good faith efforts to ensure that the information and instructions contained in this work are accurate, the publisher and the author disclaim all responsibility for errors or omissions, including without limitation responsibility for damages resulting from the use of or reliance on this work. Use of the information and instructions contained in this work is at your own risk. If any code samples or other technology this work contains or describes is subject to open source licenses or the intellectual property rights of others, it is your responsibility to ensure that your use thereof complies with such licenses and/or rights.
📄 Page
7
Table of Contents Preface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi Part I. Introduction to Python 1. Why Python for Excel?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Excel Is a Programming Language 4 Excel in the News 5 Programming Best Practices 6 Modern Excel 11 Python for Excel 12 Readability and Maintainability 13 Standard Library and Package Manager 14 Scientific Computing 15 Modern Language Features 16 Cross-Platform Compatibility 17 Conclusion 17 2. Development Environment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 The Anaconda Python Distribution 20 Installation 20 Anaconda Prompt 21 Python REPL: An Interactive Python Session 24 Package Managers: Conda and pip 25 Conda Environments 27 Jupyter Notebooks 27 Running Jupyter Notebooks 28 Notebook Cells 29 v
📄 Page
8
Edit vs. Command Mode 31 Run Order Matters 32 Shutting Down Jupyter Notebooks 33 Visual Studio Code 34 Installation and Configuration 36 Running a Python Script 37 Conclusion 41 3. Getting Started with Python. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Data Types 43 Objects 44 Numeric Types 45 Booleans 47 Strings 49 Indexing and Slicing 50 Indexing 51 Slicing 52 Data Structures 52 Lists 53 Dictionaries 55 Tuples 57 Sets 57 Control Flow 58 Code Blocks and the pass Statement 58 The if Statement and Conditional Expressions 59 The for and while Loops 60 List, Dictionary, and Set Comprehensions 63 Code Organization 64 Functions 65 Modules and the import Statement 66 The datetime Class 69 PEP 8: Style Guide for Python Code 70 PEP 8 and VS Code 73 Type Hints 73 Conclusion 74 Part II. Introduction to pandas 4. NumPy Foundations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Getting Started with NumPy 77 NumPy Array 77 vi | Table of Contents
📄 Page
9
Vectorization and Broadcasting 79 Universal Functions (ufunc) 80 Creating and Manipulating Arrays 81 Getting and Setting Array Elements 82 Useful Array Constructors 83 View vs. Copy 83 Conclusion 84 5. Data Analysis with pandas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 DataFrame and Series 85 Index 88 Columns 90 Data Manipulation 91 Selecting Data 92 Setting Data 97 Missing Data 100 Duplicate Data 102 Arithmetic Operations 103 Working with Text Columns 105 Applying a Function 105 View vs. Copy 107 Combining DataFrames 107 Concatenating 108 Joining and Merging 109 Descriptive Statistics and Data Aggregation 111 Descriptive Statistics 111 Grouping 112 Pivoting and Melting 113 Plotting 115 Matplotlib 115 Plotly 117 Importing and Exporting DataFrames 119 Exporting CSV Files 120 Importing CSV Files 121 Conclusion 123 6. Time Series Analysis with pandas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 DatetimeIndex 126 Creating a DatetimeIndex 126 Filtering a DatetimeIndex 128 Working with Time Zones 129 Common Time Series Manipulations 131 Table of Contents | vii
📄 Page
10
Shifting and Percentage Changes 131 Rebasing and Correlation 133 Resampling 136 Rolling Windows 137 Limitations with pandas 138 Conclusion 139 Part III. Reading and Writing Excel Files Without Excel 7. Excel File Manipulation with pandas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Case Study: Excel Reporting 143 Reading and Writing Excel Files with pandas 147 The read_excel Function and ExcelFile Class 147 The to_excel Method and ExcelWriter Class 152 Limitations When Using pandas with Excel Files 154 Conclusion 154 8. Excel File Manipulation with Reader and Writer Packages. . . . . . . . . . . . . . . . . . . . . . 155 The Reader and Writer Packages 155 When to Use Which Package 156 The excel.py Module 157 OpenPyXL 159 XlsxWriter 163 pyxlsb 165 xlrd, xlwt, and xlutils 166 Advanced Reader and Writer Topics 169 Working with Big Excel Files 169 Formatting DataFrames in Excel 173 Case Study (Revisited): Excel Reporting 178 Conclusion 179 Part IV. Programming the Excel Application with xlwings 9. Excel Automation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 Getting Started with xlwings 184 Using Excel as Data Viewer 184 The Excel Object Model 186 Running VBA Code 193 Converters, Options, and Collections 194 Working with DataFrames 195 viii | Table of Contents
📄 Page
11
Converters and Options 196 Charts, Pictures, and Defined Names 198 Case Study (Re-Revisited): Excel Reporting 202 Advanced xlwings Topics 204 xlwings Foundations 204 Improving Performance 206 How to Work Around Missing Functionality 207 Conclusion 208 10. Python-Powered Excel Tools. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Using Excel as Frontend with xlwings 209 Excel Add-in 210 Quickstart Command 212 Run Main 212 RunPython Function 213 Deployment 218 Python Dependency 218 Standalone Workbooks: Getting Rid of the xlwings Add-in 219 Configuration Hierarchy 220 Settings 221 Conclusion 222 11. The Python Package Tracker. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 What We Will Build 223 Core Functionality 226 Web APIs 226 Databases 229 Exceptions 238 Application Structure 240 Frontend 241 Backend 245 Debugging 248 Conclusion 250 12. User-Defined Functions (UDFs). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 Getting Started with UDFs 252 UDF Quickstart 252 Case Study: Google Trends 257 Introduction to Google Trends 257 Working with DataFrames and Dynamic Arrays 258 Fetching Data from Google Trends 263 Plotting with UDFs 267 Table of Contents | ix
📄 Page
12
Debugging UDFs 269 Advanced UDF Topics 271 Basic Performance Optimization 272 Caching 274 The Sub Decorator 276 Conclusion 277 A. Conda Environments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 B. Advanced VS Code Functionality. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 C. Advanced Python Concepts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 x | Table of Contents
📄 Page
13
Preface Microsoft is running a feedback forum for Excel on UserVoice where everybody can submit a new idea for others to vote on. The top voted feature request is “Python as an Excel scripting language,” and it has roughly twice as many votes as the second most voted feature request. Though nothing really happened since the idea was added in 2015, Excel users were fueled with new hope at the end of 2020 when Guido van Rossum, the creator of Python, tweeted that his “retirement was boring” and he would join Microsoft. If his move has any influence on the integration of Excel and Python, I don’t know. I do know, however, what makes this combination so compel‐ ling and how you can start using Excel and Python together—today. And this is, in a nutshell, what this book is about. The main driving force behind the Python for Excel story is the fact that we are living in a world of data. Nowadays, huge datasets are available to everybody and about everything. Often, these datasets are so big that they don’t fit into a spreadsheet any‐ more. A few years ago, this may have been referred to as big data, but nowadays, a dataset of a few million rows is really nothing special. Excel has evolved to cope with that trend: it introduced Power Query to load and clean datasets that don’t fit into a spreadsheet and Power Pivot, an add-in to perform data analysis on these datasets and present the results. Power Query is based on the Power Query M formula lan‐ guage (M), while Power Pivot defines formulas by using Data Analysis Expressions (DAX). If you also want to automate a few things in your Excel file, then you would use Excel’s built-in automation language, Visual Basic for Applications (VBA). That is, for something fairly simple, you can end up using VBA, M, and DAX. One issue with this is that all these languages only serve you in the Microsoft world, most prominently in Excel and Power BI (I will introduce Power BI briefly in Chapter 1). Python, on the other hand, is a general-purpose programming language that has become one of the most popular choices amongst analysts and data scientists. If you use Python with Excel, you are able to use a programming language that is good at all aspects of the story, whether that’s automating Excel, accessing and preparing data‐ sets, or performing data analysis and visualization tasks. Most importantly, you can xi
📄 Page
14
reuse your Python skills outside of Excel: if you need to scale up your computing power, you could easily move your quantitative model, simulation, or machine learn‐ ing application to the cloud, where practically unconstrained computing resources are waiting for you. Why I Wrote This Book Through my work on xlwings, the Excel automation package that we will meet in Part IV of this book, I am in close contact with many users who use Python for Excel —whether that’s via the issue tracker on GitHub, a question on StackOverflow or at a physical event like a meetup or a conference. On a regular basis, I am asked to recommend resources to get started with Python. While there is certainly no shortage of Python introductions, they are often either too general (nothing about data analysis) or too specific (full scientific introductions). However, Excel users tend to be somewhere in the middle: they certainly work with data, but a full scientific introduction may be too technical. They also often have spe‐ cific requirements and questions that aren’t answered in any of the existing material. Some of these questions are: • Which Python-Excel package do I need for which task? • How do I move my Power Query database connection over to Python? • What’s the equivalent of Excel’s AutoFilter or pivot table in Python? I wrote this book to get you from zero Python knowledge to be able to automate your Excel-centric tasks and leverage Python’s data analysis and scientific computing tools in Excel without any detours. Who This Book Is For If you are an advanced Excel user who wants to beat the limits of Excel with a modern programming language, this book is for you. Most typically, this means that you spend hours every month downloading, cleaning, and copy/pasting big amounts of data into mission-critical spreadsheets. While there are different ways to overcome Excel’s limits, this book will focus on how to use Python for this task. You should have a basic understanding of programming: it helps if you have already written a function or a for loop (no matter in which programming language) and have an idea about what an integer or a string is. You might even be able to master this book if you are used to writing complex cell formulas or have experience with tweaking recorded VBA macros. You are not expected to have any Python-specific experience, though, as there are introductions to all the tools that we will use includ‐ ing an introduction to Python itself. xii | Preface
📄 Page
15
If you are a seasoned VBA developer, you will find regular comparisons between Python and VBA that will allow you to ship around the common gotchas and hit the ground running. This book can also be helpful if you are a Python developer and need to learn about the different ways that Python can deal with the Excel application and Excel files to be able to pick the right package given the requirements of your business users. How This Book Is Organized In this book, I will show you all aspects of the Python for Excel story split into four parts: Part I: Introduction to Python This part starts by looking into the reasons why Python is such an enjoyable companion for Excel before introducing the tools we’ll be using in this book: the Anaconda Python distribution, Visual Studio Code, and Jupyter notebooks. This part will also teach you enough Python to be able to master the rest of this book. Part II: Introduction to pandas pandas is Python’s go-to library for data analysis. We will learn how to replace Excel workbooks with a combination of Jupyter notebooks and pandas. Usually, pandas code is both easier to maintain and more efficient than an Excel work‐ book, and you can work with datasets that don’t fit into a spreadsheet. Unlike Excel, pandas allows you to run your code wherever you want, including the cloud. Part III: Reading and Writing Excel Files without Excel This part is about manipulating Excel files by using one of the following Python packages: pandas, OpenPyXL, XlsxWriter, pyxlsb, xlrd, and xlwt. These packages are able to read and write Excel workbooks directly on disk and as such replace the Excel application: as you don’t require an installation of Excel, they work on any platform that Python supports, including Windows, macOS, and Linux. A typical use case for a reader package is to read in data from Excel files that you receive every morning from an external company or system and store their con‐ tents in a database. A typical use case for a writer package is to provide the func‐ tionality behind the famous “Export to Excel” button that you find in almost every application. Part IV: Programming the Excel Application with xlwings In this part, we’ll see how we can use Python with the xlwings package to auto‐ mate the Excel application rather than reading and writing Excel files on disk. Therefore, this part requires you to have a local installation of Excel. We will learn how to open Excel workbooks and manipulate them in front of our eyes. In addition to reading and writing files via Excel, we will build interactive Excel Preface | xiii
📄 Page
16
1 Microsoft has started to use the term custom functions instead of UDFs. In this book, I will continue to call them UDFs. tools: these allow us to click a button to have Python perform something that you may have done previously with VBA macros, such as a computationally expen‐ sive calculation. We’ll also learn how to write user-defined functions1 (UDFs) in Python instead of VBA. It’s important to understand the fundamental difference between reading and writing Excel files (Part III) and programming the Excel application (Part IV) as visualized in Figure P-1. Figure P-1. Reading and writing Excel files (Part III) vs. programming Excel (Part IV) Since Part III doesn’t require an installation of Excel, everything works on all plat‐ forms that Python supports, mainly Windows, macOS, and Linux. Part IV, however, will only work on those platforms that Microsoft Excel supports, i.e., Windows and macOS, as the code relies on a local installation of Microsoft Excel. Python and Excel Versions This book is based on Python 3.8, which is the Python version that comes with the latest version of the Anaconda Python distribution at the time of this writing. If you want to use a newer version of Python, follow the instructions on the book’s home page, but make sure that you don’t use an older version. I will occasionally make a comment if something changes with Python 3.9. This book also expects you to use a modern version of Excel, meaning at least Excel 2007 on Windows and Excel 2016 on macOS. The locally installed version of Excel that comes with the Microsoft 365 subscription will also work perfectly—in fact, I even recommend it, as it has the latest features that you won’t find in other versions of Excel. It was also the version I used to write this book, so if you use another version of Excel, you might sometimes see a small difference in the name or location of a menu item. xiv | Preface
📄 Page
17
Conventions Used in This Book The following typographical conventions are used in this book: Italic Indicates new terms, URLs, email addresses, filenames, and file extensions. Constant width Used for program listings, as well as within paragraphs to refer to program ele‐ ments such as variable or function names, databases, data types, environment variables, statements, and keywords. Constant width bold Shows commands or other text that should be typed literally by the user. Constant width italic Shows text that should be replaced with user-supplied values or by values deter‐ mined by context. This element signifies a tip or suggestion. This element signifies a general note. This element indicates a warning or caution. Using Code Examples I am maintaining a web page with additional information to help you with this book. Make sure to check it out, especially if you run into an issue. Supplemental material (code examples, exercises, etc.) is available for download at https://github.com/fzumstein/python-for-excel. To download this companion reposi‐ tory, click on the green Code button, then select Download ZIP. Once downloaded, right-click the file on Windows and select Extract All to unzip the contained files into a folder. On macOS, simply double-click the file to unzip. If you know how to work Preface | xv
📄 Page
18
with Git, you could also use Git to clone the repository to your local hard disk. You can put the folder anywhere you want, but I will refer to it occasionally as follows in this book: C:\Users\username\python-for-excel By simply downloading and unzipping the ZIP file on Windows, you’ll end up with a folder structure similar to this one (note the repeated folder names): C:\...\Downloads\python-for-excel-1st-edition\python-for-excel-1st-edition Copying the contents of this folder into one you create under C:\Users\<username> \python-for-excel might make it easier for you to follow along. The same remarks are true for macOS, i.e., copy the files to /Users/<username>/python-for-excel. If you have a technical question or a problem using the code examples, please send an email to bookquestions@oreilly.com. This book is here to help you get your job done. In general, if example code is offered with this book, you may use it in your programs and documentation. You do not need to contact us for permission unless you’re reproducing a significant portion of the code. For example, writing a program that uses several chunks of code from this book does not require permission. Selling or distributing examples from O’Reilly books does require permission. Answering a question by citing this book and quoting example code does not require permission. Incorporating a significant amount of example code from this book into your product’s documentation does require per‐ mission. We appreciate, but generally do not require, attribution. An attribution usually includes the title, author, publisher, and ISBN. For example: “Python for Excel by Felix Zumstein (O’Reilly). Copyright 2021 Zoomer Analytics LLC, 978-1-492-08100-5.” If you feel your use of code examples falls outside fair use or the permission given above, feel free to contact us at permissions@oreilly.com. O’Reilly Online Learning For more than 40 years, O’Reilly Media has provided technol‐ ogy and business training, knowledge, and insight to help companies succeed. Our unique network of experts and innovators share their knowledge and expertise through books, articles, and our online learning platform. O’Reilly’s online learning platform gives you on-demand access to live training courses, in-depth learning paths, interactive coding environments, and a vast collection of text and video from O’Reilly and 200+ other publishers. For more information, visit http://oreilly.com. xvi | Preface
📄 Page
19
How to Contact Us Please address comments and questions concerning this book to the publisher: O’Reilly Media, Inc. 1005 Gravenstein Highway North Sebastopol, CA 95472 800-998-9938 (in the United States or Canada) 707-829-0515 (international or local) 707-829-0104 (fax) We have a web page for this book, where we list errata, examples, and any additional information. You can access this page at https://oreil.ly/py4excel. Email bookquestions@oreilly.com to comment or ask technical questions about this book. For more information about our books, courses, conferences, and news, see our web‐ site at http://www.oreilly.com. Find us on Facebook: http://facebook.com/oreilly. Follow us on Twitter: http://twitter.com/oreillymedia. Watch us on YouTube: http://www.youtube.com/oreillymedia. Acknowledgments As a first-time author, I am incredibly grateful for the help I got from so many people along the way—they made this journey a lot easier for me! At O’Reilly, I would like to thank my editor, Melissa Potter, who did a great job in keeping me motivated and on schedule and who helped me to bring this book into a readable form. I’d also like to thank Michelle Smith, who worked with me on the ini‐ tial book proposal, and Daniel Elfanbaum, who never tired of answering my technical questions. A big thank you goes to all my colleagues, friends, and clients who invested many hours in reading the earliest forms of my drafts. Their feedback was crucial to making the book easier to understand, and some of the case studies are inspired by real-world Excel problems that they shared with me. My thanks go to Adam Rodriguez, Mano Beeslar, Simon Schiegg, Rui Da Costa, Jürg Nager, and Christophe de Montrichard. I also got helpful feedback from readers of the Early Release version that was pub‐ lished on the O’Reilly online learning platform. Thank you Felipe Maion, Ray Doue, Kolyu Minevski, Scott Drummond, Volker Roth, and David Ruggles! Preface | xvii
📄 Page
20
I was very lucky that the book got reviewed by highly qualified tech reviewers and I really appreciate the hard work they put in under a lot of time pressure. Thanks for all your help, Jordan Goldmeier, George Mount, Andreas Clenow, Werner Brönni‐ mann, and Eric Moreira! Special thanks go to Björn Stiel, who wasn’t just a tech reviewer, but from whom I also learned many of the things I am writing about in this book. I’ve enjoyed working with you these past few years! Last but not least, I’d like to extend my gratitude to Eric Reynolds, who merged his ExcelPython project into the xlwings code base in 2016. He also redesigned the whole package from scratch, making my horrible API from the early days a thing of the past. Thank you very much! xviii | Preface