- Tutorial 1: Create a simple XLSX file
- Simple usage¶
- Example: Creating a simple spreadsheet and bar chart¶
- Создание файла excel в Python с помощью openpyxl
- Установка openpyxl
- Создание файла excel в python
- Создание листа
- Доступ к листу
- Доступ к ячейке
- Запись значений в ячейку
- Сохранение списка значений
- Сохранение книги excel в Python
Tutorial 1: Create a simple XLSX file
Let’s start by creating a simple spreadsheet using Python and the XlsxWriter module.
Say that we have some data on monthly outgoings that we want to convert into an Excel XLSX file:
expenses = ( ['Rent', 1000], ['Gas', 100], ['Food', 300], ['Gym', 50], )
To do that we can start with a small program like the following:
import xlsxwriter # Create a workbook and add a worksheet. workbook = xlsxwriter.Workbook('Expenses01.xlsx') worksheet = workbook.add_worksheet() # Some data we want to write to the worksheet. expenses = ( ['Rent', 1000], ['Gas', 100], ['Food', 300], ['Gym', 50], ) # Start from the first cell. Rows and columns are zero indexed. row = 0 col = 0 # Iterate over the data and write it out row by row. for item, cost in (expenses): worksheet.write(row, col, item) worksheet.write(row, col + 1, cost) row += 1 # Write a total using a formula. worksheet.write(row, 0, 'Total') worksheet.write(row, 1, '=SUM(B1:B4)') workbook.close()
If we run this program we should get a spreadsheet that looks like this:
This is a simple example but the steps involved are representative of all programs that use XlsxWriter, so let’s break it down into separate parts.
The first step is to import the module:
The next step is to create a new workbook object using the Workbook() constructor.
Workbook() takes one, non-optional, argument which is the filename that we want to create:
workbook = xlsxwriter.Workbook('Expenses01.xlsx')
XlsxWriter can only create new files. It cannot read or modify existing files.
The workbook object is then used to add a new worksheet via the add_worksheet() method:
worksheet = workbook.add_worksheet()
By default worksheet names in the spreadsheet will be Sheet1 , Sheet2 etc., but we can also specify a name:
worksheet1 = workbook.add_worksheet() # Defaults to Sheet1. worksheet2 = workbook.add_worksheet('Data') # Data. worksheet3 = workbook.add_worksheet() # Defaults to Sheet3.
We can then use the worksheet object to write data via the write() method:
worksheet.write(row, col, some_data)
Throughout XlsxWriter, rows and columns are zero indexed. The first cell in a worksheet, A1 , is (0, 0) .
So in our example we iterate over our data and write it out as follows:
# Iterate over the data and write it out row by row. for item, cost in (expenses): worksheet.write(row, col, item) worksheet.write(row, col + 1, cost) row += 1
We then add a formula to calculate the total of the items in the second column:
worksheet.write(row, 1, '=SUM(B1:B4)')
Finally, we close the Excel file via the close() method:
And that’s it. We now have a file that can be read by Excel and other spreadsheet applications.
In the next sections we will see how we can use the XlsxWriter module to add formatting and other Excel features.
© Copyright 2013-2023, John McNamara.
Created using Sphinx 1.8.6.
Simple usage¶
Example: Creating a simple spreadsheet and bar chart¶
In this example we’re going to create a sheet from scratch and add some data and then plot it. We’ll also explore some limited cell style and formatting.
The data we’ll be entering on the sheet is below:
Species | Leaf Color | Height (cm) |
---|---|---|
Maple | Red | 549 |
Oak | Green | 783 |
Pine | Green | 1204 |
To start, let’s load in openpyxl and create a new workbook. and get the active sheet. We’ll also enter our tree data.
>>> from openpyxl import Workbook
>>> wb = Workbook() >>> ws = wb.active >>> treeData = [["Type", "Leaf Color", "Height"], ["Maple", "Red", 549], ["Oak", "Green", 783], ["Pine", "Green", 1204]]
Next we’ll enter this data onto the worksheet. As this is a list of lists, we can simply use the Worksheet.append() function.
>>> for row in treeData: . ws.append(row)
Now we should make our heading Bold to make it stand out a bit more, to do that we’ll need to create a styles.Font and apply it to all the cells in our header row.
>>> from openpyxl.styles import Font
>>> ft = Font(bold=True) >>> for row in ws["A1:C1"]: . for cell in row: . cell.font = ft
It’s time to make some charts. First, we’ll start by importing the appropriate packages from openpyxl.chart then define some basic attributes
>>> from openpyxl.chart import BarChart, Series, Reference
>>> chart = BarChart() >>> chart.type = "col" >>> chart.title = "Tree Height" >>> chart.y_axis.title = 'Height (cm)' >>> chart.x_axis.title = 'Tree Type' >>> chart.legend = None
That’s created the skeleton of what will be our bar chart. Now we need to add references to where the data is and pass that to the chart object
>>> data = Reference(ws, min_col=3, min_row=2, max_row=4, max_col=3) >>> categories = Reference(ws, min_col=1, min_row=2, max_row=4, max_col=1)
>>> chart.add_data(data) >>> chart.set_categories(categories)
Finally we can add it to the sheet.
>>> ws.add_chart(chart, "E1") >>> wb.save("TreeData.xlsx")
And there you have it. If you open that doc now it should look something like this
© Copyright 2010 — 2023, See AUTHORS Revision 4212e3e95a42 .
Versions latest stable 3.1.2 3.1.1 3.1.0 3.1 3.0 2.6 2.5.14 2.5 2.4 Downloads html On Read the Docs Project Home Builds Free document hosting provided by Read the Docs.
Создание файла excel в Python с помощью openpyxl
В этом уроке я расскажу, как создать файл excel в Python с помощью библиотеки openpyxl.
Многие приложения, работающие с данными, нуждаются в экспорте этих данных в различные форматы. Очень распространенным и широко используемым форматом являются электронные таблицы.
В Python существуют различные библиотеки для создания файлов excel, одной из самых популярных является openpyxl благодаря простоте использования и тому, что она позволяет как читать, так и записывать электронные таблицы.
Установка openpyxl
Поскольку это внешняя библиотека, первое, что вы должны сделать для использования openpyxl, это установить ее.
Создайте новый каталог для вашего проекта, получите к нему доступ и запустите виртуальную среду.
После активации виртуальной среды выполните следующую команду из терминала для установки openpyxl:
Создание файла excel в python
Как вы, возможно, знаете электронные таблицы группируются в книги. Книга – это родительская сущность электронной таблицы (обычно соответствующая файлу excel). В свою очередь, она состоит из одного или нескольких листов.
Книга Excel состоит как минимум из одного листа. Лист, с которым вы работаете, называется активным листом.
Для начала работы с openpyxl вам не нужно сохранять какой-либо файл в файловой системе. Вы просто создаете книгу.
В приведенном ниже коде вы узнаете, как создать книгу в openpyxl:
Code language: JavaScript (javascript)import openpyxl wb = openpyxl.Workbook()
Переменная wb является экземпляром пустой книги. Вновь созданная книга содержит один лист, который является активным. Доступ к нему можно получить через активный атрибут.
Одним из основных свойств листа является его имя, поскольку, как мы увидим в следующем разделе, это позволяет нам обращаться к нему непосредственно через его имя.
В следующем примере показано, как получить доступ к имени активного листа и как его изменить:
Code language: PHP (php)>>> import openpyxl >>> wb = openpyxl.Workbook() >>> hoja = wb.active >>> print(f'Active list: ') Active list: Sheet >>> list.title = "Values" >>> print(f'Active list: ') Active list: Values
Создание листа
Помимо листа по умолчанию, с помощью openpyxl можно создать несколько листов в книге, используя метод create_sheet() у workbook как показано ниже (продолжение предыдущего примера):
Code language: PHP (php)# Добавление листа 'Sheet' в конец (по умолчанию). >>> list1 = wb.create_sheet("List") # Добавим лист 'Sheet' в первую позицию. # Если "List" существует, добавим цифру 1 в конец имени >>> list2 = wb.create_sheet("List", 0) # Добавим лист "Another list" на позицию 1 >>> wb.create_sheet(index=1, title="Another list") # Вывод на экран названий листов >>> print(wb.sheetnames) ['List1', 'Another list', 'Values', 'List']
Также можно создать копию листа с помощью метода copy_worksheet():
Code language: JavaScript (javascript)>>> sourse = wb.active >>> new = wb.copy_worksheet(sourse)
Доступ к листу
Как я уже говорил в предыдущем разделе, имена листов являются очень важным свойством, поскольку они позволяют нам обращаться к ним напрямую, рассматривая workbook как словарь. Продолжаем пример:
Code language: PHP (php)>>> list = wb.active # Это лист, который находится в индексе 0 >>> print(f'Active list: ') Active list: list1 >>> list = wb['Another list'] >>> wb.active = list >>> print(f'Active list: ') Active list: Another list
С другой стороны, как мы видели в предыдущем разделе, можно получить список с именами всех листов, обратившись к свойству sheetnames у workbook. Также можно перебирать все листы:
Code language: PHP (php)>>> print(wb.sheetnames) ['List1', 'Another list', 'Values', 'List'] >>> for list in wb: . print(list.title) List1 Another list Values List
Доступ к ячейке
До сих пор мы видели, как создать книгу, листы и как получить к ним доступ. Теперь перейдем к самому главному – как получить доступ к значению ячейки и как сохранить данные.
Можно получить доступ к ячейке, рассматривая лист как словарь, где имя ячейки используется в качестве ключа. Это происходит в результате комбинации имени столбца и номера строки.
Вот как получить доступ к ячейке в столбце A и строке 1:
Code language: PHP (php)>>> wb = openpyxl.Workbook() >>> hoja = wb.active >>> a1 = list["A1"] >>> print(a1.value) None
Также можно получить доступ к ячейке, используя обозначения строк и столбцов, с помощью метода cell() следующим образом:
Code language: PHP (php)>>> b2 = list.cell(row=2, column=2) >>> print(b2.value)
ВАЖНО: Когда создается книга, она не содержит ячеек. Ячейки создаются в памяти по мере обращения к ним, даже если они не содержат никакого значения.
Запись значений в ячейку
В предыдущем разделе вы могли заметить, что при выводе содержимого ячейки (print(a1.value)) всегда возвращалось None. Это происходит потому, что ячейка не содержит никакого значения.
Чтобы присвоить значение определенной ячейке, вы можете сделать это тремя различными способами:
Code language: PHP (php)# 1.- Присвоение значения непосредственно ячейке >>> list["A1"] = 10 >>> a1 = list["A1"] >>> print(a1.value) 10 # 2.- Использование обозначения строки, столбца со значением аргумента >>> b1 = list.cell(row=1, column=2, value=20) >>> print(b1.value) 20 # 3.- Обновление свойства значения ячейки >>> c1 = list.cell(row=1, column=3) >>> c1.value = 30 >>> print(c1.value) 30
Сохранение списка значений
Присвоение значения ячейке может быть использовано в отдельных ситуациях. Однако в Python часто бывает так, что данные хранятся в списках или кортежах. Для таких случаев, когда вам нужно экспортировать такие данные, я покажу вам более оптимальный способ создания excel-файла с помощью openpyxl.
Представьте, что у вас есть список товаров с названием, артикулом, количеством и ценой, как показано ниже:
Code language: JavaScript (javascript)products = [ ('product_1', 'a859', 1500, 9.95), ('product_2', 'b125', 600, 4.95), ('product_3', 'c764', 200, 19.95), ('product_4', 'd399', 2000, 49.95) ]
Как мы можем экспортировать эти данные в excel с помощью openpyxl? Самый простой способ – использовать метод append() объекта листа.
Вот как это можно сделать:
Code language: PHP (php)products = [ ('product_1', 'a859', 1500, 9.95), ('product_2', 'b125', 600, 4.95), ('product_3', 'c764', 200, 19.95), ('product_4', 'd399', 2000, 49.95) ] wb = openpyxl.Workbook() list = wb.active # Создание строки с заголовками list.append(('Название', 'Артикул', 'Количество', 'Цена')) for product in products: # продукт - кортеж со значениями продукта list.append(product)
Сохранение книги excel в Python
В завершение этогй статьи я покажу вам, как сохранить файл excel в Python с помощью openpyxl.
Чтобы сохранить файл excel с помощью openpyxl, достаточно вызвать метод save() у workbook с именем файла. Это позволит сохранить рабочую книгу со всеми листами и данными в каждом из них.
Если мы сделаем это на предыдущем примере , то получим следующий результат:
Code language: JavaScript (javascript)wb.save('products.xlsx')