Создать файл excel через python

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    XlsxWriter is a Python module for writing files in the XLSX file format. It can be used to write text, numbers, and formulas to multiple worksheets. Also, it supports features such as formatting, images, charts, page setup, auto filters, conditional formatting and many others.
    Use this command to install xlsxwriter module: 
     

     pip install xlsxwriter 

      
    Note: Throughout XlsxWriter, rows and columns are zero indexed. The first cell in a worksheet, A1 is (0, 0), B1 is (0, 1), A2 is (1, 0), B2 is (1, 1) ..similarly for all.
    Let’s see how to create and write to an excel-sheet using Python.
    Code #1 : Using A1 notation(cell name) for writing data in the specific cells.
     

    Python3

    import xlsxwriter

    workbook = xlsxwriter.Workbook('hello.xlsx')

    worksheet = workbook.add_worksheet()

    worksheet.write('A1', 'Hello..')

    worksheet.write('B1', 'Geeks')

    worksheet.write('C1', 'For')

    worksheet.write('D1', 'Geeks')

    workbook.close()

    Output: 
     

      
    Code #2 : Using the row-column notation(indexing value) for writing data in the specific cells.
     

    Python3

    import xlsxwriter

    workbook = xlsxwriter.Workbook('Example2.xlsx')

    worksheet = workbook.add_worksheet()

    row = 0

    column = 0

    content = ["ankit", "rahul", "priya", "harshita",

                        "sumit", "neeraj", "shivam"]

    for item in content :

        worksheet.write(row, column, item)

        row += 1

    workbook.close()

    Output: 
     

      
    Code #3 : Creating a new sheet with the specific name 
     

    Python3

    import xlsxwriter

    workbook = xlsxwriter.Workbook('Example3.xlsx')

    worksheet = workbook.add_worksheet("My sheet")

    scores = (

        ['ankit', 1000],

        ['rahul',   100],

        ['priya'300],

        ['harshita',    50],

    )

    row = 0

    col = 0

    for name, score in (scores):

        worksheet.write(row, col, name)

        worksheet.write(row, col + 1, score)

        row += 1

    workbook.close()

    Output: 
     

    output3

      
    XlsxWriter has some advantages and disadvantages over the alternative Python modules for writing Excel files.
    Advantages: 
     

    • It supports more Excel features than any of the alternative modules.
    • It has a high degree of fidelity with files produced by Excel. In most cases the files produced are 100% equivalent to files produced by Excel.
    • It has extensive documentation, example files and tests.
    • It is fast and can be configured to use very little memory even for very large output files.

    Disadvantages: 
     

    • It cannot read or modify existing Excel XLSX files.

    Like Article

    Save Article

    В этом уроке я расскажу, как создать файл excel в Python с помощью библиотеки openpyxl.

    Многие приложения, работающие с данными, нуждаются в экспорте этих данных в различные форматы. Очень распространенным и широко используемым форматом являются электронные таблицы.

    В Python существуют различные библиотеки для создания файлов excel, одной из самых популярных является openpyxl благодаря простоте использования и тому, что она позволяет как читать, так и записывать электронные таблицы.

    Содержание

    • 1 Установка openpyxl
    • 2 Создание файла excel в python
    • 3 Создание листа
    • 4 Доступ к листу
    • 5 Доступ к ячейке
    • 6 Запись значений в ячейку
    • 7 Сохранение списка значений
    • 8 Сохранение книги excel в Python
      • 8.1 Похожие записи

    Поскольку это внешняя библиотека, первое, что вы должны сделать для использования openpyxl, это установить ее.

    Создайте новый каталог для вашего проекта, получите к нему доступ и запустите виртуальную среду.

    После активации виртуальной среды выполните следующую команду из терминала для установки openpyxl:

    $> pip install openpyxl

    Создание файла excel в python

    Как вы, возможно, знаете электронные таблицы группируются в книги. Книга – это родительская сущность электронной таблицы (обычно соответствующая файлу excel). В свою очередь, она состоит из одного или нескольких листов.

    Книга Excel состоит как минимум из одного листа. Лист, с которым вы работаете, называется активным листом.

    Для начала работы с openpyxl вам не нужно сохранять какой-либо файл в файловой системе. Вы просто создаете книгу.

    В приведенном ниже коде вы узнаете, как создать книгу в openpyxl:

    import openpyxl wb = openpyxl.Workbook()

    Code language: JavaScript (javascript)

    Переменная wb является экземпляром пустой книги. Вновь созданная книга содержит один лист, который является активным. Доступ к нему можно получить через активный атрибут.

    Одним из основных свойств листа является его имя, поскольку, как мы увидим в следующем разделе, это позволяет нам обращаться к нему непосредственно через его имя.

    В следующем примере показано, как получить доступ к имени активного листа и как его изменить:

    >>> import openpyxl >>> wb = openpyxl.Workbook() >>> hoja = wb.active >>> print(f'Active list: {list.title}') Active list: Sheet >>> list.title = "Values" >>> print(f'Active list: {wb.active.title}') Active list: Values

    Code language: PHP (php)

    Создание листа

    Помимо листа по умолчанию, с помощью openpyxl можно создать несколько листов в книге, используя метод create_sheet() у workbook как показано ниже (продолжение предыдущего примера):

    # Добавление листа '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']

    Code language: PHP (php)

    Также можно создать копию листа с помощью метода copy_worksheet():

    >>> sourse = wb.active >>> new = wb.copy_worksheet(sourse)

    Code language: JavaScript (javascript)

    Доступ к листу

    Как я уже говорил в предыдущем разделе, имена листов являются очень важным свойством, поскольку они позволяют нам обращаться к ним напрямую, рассматривая workbook как словарь. Продолжаем пример:

    >>> list = wb.active # Это лист, который находится в индексе 0 >>> print(f'Active list: {list.title}') Active list: list1 >>> list = wb['Another list'] >>> wb.active = list >>> print(f'Active list: {wb.active.title}') Active list: Another list

    Code language: PHP (php)

    С другой стороны, как мы видели в предыдущем разделе, можно получить список с именами всех листов, обратившись к свойству sheetnames у workbook. Также можно перебирать все листы:

    >>> print(wb.sheetnames) ['List1', 'Another list', 'Values', 'List'] >>> for list in wb: ... print(list.title) List1 Another list Values List

    Code language: PHP (php)

    Доступ к ячейке

    До сих пор мы видели, как создать книгу, листы и как получить к ним доступ. Теперь перейдем к самому главному – как получить доступ к значению ячейки и как сохранить данные.

    Можно получить доступ к ячейке, рассматривая лист как словарь, где имя ячейки используется в качестве ключа. Это происходит в результате комбинации имени столбца и номера строки.

    Вот как получить доступ к ячейке в столбце A и строке 1:

    >>> wb = openpyxl.Workbook() >>> hoja = wb.active >>> a1 = list["A1"] >>> print(a1.value) None

    Code language: PHP (php)

    Также можно получить доступ к ячейке, используя обозначения строк и столбцов, с помощью метода cell() следующим образом:

    >>> b2 = list.cell(row=2, column=2) >>> print(b2.value)

    Code language: PHP (php)

    ВАЖНО: Когда создается книга, она не содержит ячеек. Ячейки создаются в памяти по мере обращения к ним, даже если они не содержат никакого значения.

    Запись значений в ячейку

    В предыдущем разделе вы могли заметить, что при выводе содержимого ячейки (print(a1.value)) всегда возвращалось None. Это происходит потому, что ячейка не содержит никакого значения.

    Чтобы присвоить значение определенной ячейке, вы можете сделать это тремя различными способами:

    # 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

    Code language: PHP (php)

    Сохранение списка значений

    Присвоение значения ячейке может быть использовано в отдельных ситуациях. Однако в Python часто бывает так, что данные хранятся в списках или кортежах. Для таких случаев, когда вам нужно экспортировать такие данные, я покажу вам более оптимальный способ создания excel-файла с помощью openpyxl.

    Представьте, что у вас есть список товаров с названием, артикулом, количеством и ценой, как показано ниже:

    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) ]

    Code language: JavaScript (javascript)

    Как мы можем экспортировать эти данные в excel с помощью openpyxl? Самый простой способ – использовать метод append() объекта листа.

    Вот как это можно сделать:

    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)

    Code language: PHP (php)

    Сохранение книги excel в Python

    В завершение этогй статьи я покажу вам, как сохранить файл excel в Python с помощью openpyxl.

    Чтобы сохранить файл excel с помощью openpyxl, достаточно вызвать метод save() у workbook с именем файла. Это позволит сохранить рабочую книгу со всеми листами и данными в каждом из них.

    Если мы сделаем это на предыдущем примере , то получим следующий результат:

    wb.save('products.xlsx')

    Code language: JavaScript (javascript)

    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:

    _images/tutorial01.png

    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')
    

    Note

    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)
    

    Note

    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.

    Время на прочтение
    6 мин

    Количество просмотров 349K

    Добрый день, уважаемые читатели.

    В сегодняшней статье я хотел бы, как можно подробнее, рассмотреть интеграцию приложений Python и MS Excel. Данные вопрос может возникнуть, например, при создании какой-либо системы онлайн отчетности, которая должна выгружать результаты в общепринятый формат ну или какие-либо другие задачи. Также в статье я покажу и обратную интеграцию, т.е. как использовать функцию написанную на python в Excel, что также может быть полезно для автоматизации отчетов.

    Работаем с файлами MS Excel на Python

    Для работы с Excel файлами из Python мне известны 2 варианта:

    1. Использование библиотек, таких как xlrd, xlwt, xlutils или openpyxl
    2. Работа с com-объектом

    Рассмотрим работу с этими способами подробнее. В качестве примера будем использовать готовый файл excel из которого мы сначала считаем данные из первой ячейки, а затем запишем их во вторую. Таких простых примеров будет достаточно для первого ознакомления.

    Использование библиотек

    Итак, первый метод довольно простой и хорошо описан. Например, есть отличная статья для описания работы c xlrd, xlwt, xlutils. Поэтому в данном материале я приведу небольшой кусок кода с их использованием.

    Для начала загрузим нужные библиотеки и откроем файл xls на чтение и выберем
    нужный лист с данными:

    import xlrd, xlwt
    #открываем файл
    rb = xlrd.open_workbook('../ArticleScripts/ExcelPython/xl.xls',formatting_info=True)
    
    #выбираем активный лист
    sheet = rb.sheet_by_index(0)
    

    Теперь давайте посмотрим, как считать значения из нужных ячеек:

    #получаем значение первой ячейки A1
    val = sheet.row_values(0)[0]
    
    #получаем список значений из всех записей
    vals = [sheet.row_values(rownum) for rownum in range(sheet.nrows)]
    

    Как видно чтение данных не составляет труда. Теперь запишем их в другой файл. Для этого создам новый excel файл с новой рабочей книгой:

    wb = xlwt.Workbook()
    ws = wb.add_sheet('Test')
    

    Запишем в новый файл полученные ранее данные и сохраним изменения:

    #в A1 записываем значение из ячейки A1 прошлого файла
    ws.write(0, 0, val[0])
    
    #в столбец B запишем нашу последовательность из столбца A исходного файла
    i = 0
    for rec in vals:
        ws.write(i,1,rec[0])
        i =+ i
    
    #сохраняем рабочую книгу
    wb.save('../ArticleScripts/ExcelPython/xl_rec.xls')
    

    Из примера выше видно, что библиотека xlrd отвечает за чтение данных, а xlwt — за запись, поэтому нет возможности внести изменения в уже созданную книгу без ее копирования в новую. Кроме этого указанные библиотеки работают только с файлами формата xls (Excel 2003) и у них нет поддержки нового формата xlsx (Excel 2007 и выше).

    Чтобы успешно работать с форматом xlsx, понадобится библиотека openpyxl. Для демонстрации ее работы проделаем действия, которые были показаны для предыдущих библиотек.

    Для начала загрузим библиотеку и выберем нужную книгу и рабочий лист:

    import openpyxl
    wb = openpyxl.load_workbook(filename = '../ArticleScripts/ExcelPython/openpyxl.xlsx')
    sheet = wb['test']
    

    Как видно из вышеприведенного листинга сделать это не сложно. Теперь посмотрим как можно считать данные:

    #считываем значение определенной ячейки
    val = sheet['A1'].value
    
    #считываем заданный диапазон
    vals = [v[0].value for v in sheet.range('A1:A2')]
    

    Отличие от прошлых библиотек в том, что openpyxl дает возможность отображаться к ячейкам и последовательностям через их имена, что довольно удобно и понятно при чтении программы.

    Теперь посмотрим как нам произвести запись и сохранить данные:

    #записываем значение в определенную ячейку
    sheet['B1'] = val
    
    #записываем последовательность
    i = 0
    for rec in vals:
        sheet.cell(row=i, column=2).value = rec
        i =+ 1
    
    # сохраняем данные
    wb.save('../ArticleScripts/ExcelPython/openpyxl.xlsx')
    

    Из примера видно, что запись, тоже производится довольно легко. Кроме того, в коде выше, можно заметить, что openpyxl кроме имен ячеек может работать и с их индексами.

    К недостаткам данной библиотеки можно отнести, то что, как и в предыдущем примере, нет возможности сохранить изменения без создания новой книги.

    Как было показано выше, для более менее полноценной работы с excel файлами, в данном случае, нужно 4 библиотеки, и это не всегда удобно. Кроме этого, возможно нужен будет доступ к VBA (допустим для какой-либо последующей обработки) и с помощью этих библиотек его не получить.

    Однако, работа с этими библиотеками достаточно проста и удобна для быстрого создания Excel файлов их форматирования, но если Вам надо больше возможностей, то следующий подпункт для Вас.

    Работа с com-объектом

    В своих отчетах я предпочитаю использовать второй способ, а именно использование файла Excel через com-объект с использованием библиотеки win32com. Его преимуществом, является то, что вы можете выполнять с файлом все операции, которые позволяет делать обычный Excel с использованием VBA.

    Проиллюстрируем это на той же задаче, что и предыдущие примеры.

    Для начала загрузим нужную библиотеку и создадим COM объект.

    import win32com.client
    Excel = win32com.client.Dispatch("Excel.Application")
    

    Теперь мы можем работать с помощью объекта Excel мы можем получить доступ ко всем возможностям VBA. Давайте, для начала, откроем любую книгу и выберем активный лист. Это можно сделать так:

    wb = Excel.Workbooks.Open(u'D:\Scripts\DataScience\ArticleScripts\ExcelPython\xl.xls')
    sheet = wb.ActiveSheet
    

    Давайте получим значение первой ячейки и последовательности:

    #получаем значение первой ячейки
    val = sheet.Cells(1,1).value
    
    #получаем значения цепочки A1:A2
    vals = [r[0].value for r in sheet.Range("A1:A2")]
    

    Как можно заметить, мы оперируем здесь функциями чистого VBA. Это очень удобно если у вас есть написанные макросы и вы хотите использовать их при работе с Python при минимальных затратах на переделку кода.

    Посмотрим, как можно произвести запись полученных значений:

    #записываем значение в определенную ячейку
    sheet.Cells(1,2).value = val
    
    #записываем последовательность
    i = 1
    for rec in vals:
        sheet.Cells(i,3).value = rec
        i = i + 1
    
    #сохраняем рабочую книгу
    wb.Save()
    
    #закрываем ее
    wb.Close()
    
    #закрываем COM объект
    Excel.Quit()
    

    Из примера видно, что данные операции тоже довольно просто реализовываются. Кроме этого, можно заметить, что изменения мы сохранили в той же книге, которую открыли для чтения, что достаточно удобно.

    Однако, внимательный читатель, обратит внимание на переменную i, которая инициализируется не 0, как принято python, а 1. Это связано с тем, что мы работаем с индексами ячеек как из VBA, а там нумерация начинается не с 0, а с 1.

    На этом закончим разбор способов работы с excel файлами в python и перейдем к обратной задаче.

    Вызываем функции Python из MS Excel

    Может возникнуть такая ситуация, что у вас уже есть какой-либо функция, которая обрабатывает данные на python, и нужно перенести ее функциональность в Excel. Конечно же можно переписать ее на VBA, но зачем?

    Для использования функций python в Excel есть прекрасная надстройка ExcelPython. С ее помощью вы сможете вызывать функции написанные на python прямо из Excel, правда придется еще написать небольшую обертку на VBA, и все это будет показано ниже.

    Итак, предположим у нас есть функция, написанная на python, которой мы хотим воспользоваться:

    def get_unique(lists):
        sm = 0
        for i in lists:
            sm = sm + int(i.pop()) 
        return sm
    

    На вход ей подается список, состоящий из списков, это одно из условий, которое должно выполняться для работы данной функции в Excel.

    Сохраним функцию в файле plugin.py и положим его в ту же директорию, где будет лежать наш excel файл, с которым мы будем работать.

    Теперь установим ExcelPython. Установка происходит через запуск exe-файла и не вызывает затруднений.

    Когда все приготовления выполнены, открываем тестовый файл excel и вызовем редактор VBA (Alt+F11). Для работы с вышеуказанной надстройкой необходимо ее подключить, через Tools->References, как показано на рисунке:

    Ну что же, теперь можно приступить к написанию функции-обертки для нашего Python-модуля plugin.py. Выглядеть она будет следующим образом:

    Function sr(lists As Range)
        On Error GoTo do_error
            Set plugin = PyModule("plugin", AddPath:=ThisWorkbook.Path)
            Set result = PyCall(plugin, "get_unique", PyTuple(lists.Value2))
            sr = WorksheetFunction.Transpose(PyVar(result))
            Exit Function
    do_error:
            sr = Err.Description
    End Function
    

    Итак, что же происходит в данной функции?

    Для начала, с помощью PyModule, мы подключаем нужный модуль. Для этого в качестве параметров ей передается имя модуля без расширения, и путь до папки в которой он находится. На выходе работы PyModule мы получаем объект для работы с модулем.

    Затем, с помощью PyCall, вызываем нужную нам функцию из указанного модуля. В качестве параметров PyCall получает следующее:

    1. Объект модуля, полученный на предыдущем шаге
    2. Имя вызываемой функции
    3. Параметры, передаваемые функции (передаются в виде списка)

    Функция PyTuple, получает на вход какие-либо значения и преобразует их в объект tuple языка Python.
    Ну и, соответственно, PyVar выполняет операцию преобразования результата функции python, к типу понятному Excel.

    Теперь, чтобы убедиться в работоспособности нашей связки, вызовем нашу свежеиспеченую функцию на листе в Excel:

    Как видно из рисунка все отработало правильно.

    Надо отметить, что в данном материале используется старая версия ExcelPython, и на GitHub’e автора доступна новая версия.

    Заключение

    В качестве заключения, надо отметить, примеры в данной статье самые простые и для более глубоко изучения данных методов, я рекомендую обратиться к
    документации по нужным пакетам.

    Также хочу заметить, что указанные пакеты не являются единственными и в статье опущено рассмотрение, таких пакетов как xlsxwriter для генерации excel файлов или xlwings, который может работать с Excel файлами «на лету», а также же PyXLL, который выполняет аналогичные функции ExcelPython.

    Кроме этого в статье я попытался несколько обобщить разборасанный по сети материал, т.к. такие вопросы часто фигурируют на форумах и думаю некоторым будет полезно иметь, такую «шпаргалку» под рукой.

    Документ электронной таблицы Excel называется рабочей книгой. Каждая книга может хранить некоторое количество листов. Лист, просматриваемый пользователем в данный момент, называется активным. Лист состоит из из столбцов (адресуемых с помощью букв, начиная с A) и строк (адресуемых с помощью цифр, начиная с 1).

    Модуль OpenPyXL не поставляется вместе с Python, поэтому его предварительно нужно установить:

    > pip install openpyxl

    Чтение файлов Excel

    Начинаем работать:

    >>> import openpyxl
    >>> wb = openpyxl.load_workbook('example.xlsx')
    >>> type(wb)
    <class 'openpyxl.workbook.workbook.Workbook'>
    >>> wb.sheetnames
    ['Лист1', 'Лист2', 'Лист3']
    >>> sheet = wb.active
    >>> sheet
    <Worksheet "Лист1">
    >>> sheet['A1']
    <Cell Лист1.A1>

    А теперь небольшой скрипт:

    import openpyxl
    
    # читаем excel-файл
    wb = openpyxl.load_workbook('example.xlsx')
    
    # печатаем список листов
    sheets = wb.sheetnames
    for sheet in sheets:
        print(sheet)
    
    # получаем активный лист
    sheet = wb.active
    
    # печатаем значение ячейки A1
    print(sheet['A1'].value)
    # печатаем значение ячейки B1
    print(sheet['B1'].value)

    Результат работы:

    Лист1
    Лист2
    Лист3
    
    2015-04-05 13:34:02
    Яблоки

    Как получить другой лист книги:

    # получаем другой лист
    sheet2 = wb['Лист2']
    # печатаем значение ячейки A1
    print(sheet2['A2'].value)

    Как сделать лист книги активным:

    # делаем третий лист активным
    wb.active = 2

    Как задать имя листа:

    sheet.title = 'Третий лист'

    Объект Cell имеет атрибут value, который содержит значение, хранящееся в ячейке. Объект Cell также имеет атрибуты row, column и coordinate, которые предоставляют информацию о расположении данной ячейки в таблице.

    # получаем ячейку листа B2
    cell = sheet['B2']
    print('Строка: ' + str(cell.row))
    print('Столбец: ' + cell.column)
    print('Ячейка: ' + cell.coordinate)
    print('Значение: ' + cell.value)
    Строка: 2
    Столбец: B
    Ячейка: B2
    Значение: Вишни

    К отдельной ячейке можно также обращаться с помощью метода cell() объекта Worksheet, передавая ему именованные аргументы row и column. Первому столбцу или первой строке соответствует число 1, а не 0:

    # получаем ячейку листа B2
    cell = sheet.cell(row = 2, column = 2)
    print(cell.value)
    Вишни

    Размер листа можно получить с помощью атрибутов max_row и max_column объекта Worksheet:

    rows = sheet.max_row
    cols = sheet.max_column
    
    for i in range(1, rows + 1):
        string = ''
        for j in range(1, cols + 1):
            cell = sheet.cell(row = i, column = j)
            string = string + str(cell.value) + ' '
        print(string)
    2015-04-05 13:34:02 Яблоки 73 
    2015-04-05 03:41:23 Вишни 85 
    2015-04-06 12:46:51 Груши 14 
    2015-04-08 08:59:43 Апельсины 52 
    2015-04-10 02:07:00 Яблоки 152 
    2015-04-10 18:10:37 Бананы 23 
    2015-04-10 02:40:46 Земляника 98

    Чтобы преобразовать буквенное обозначение столбца в цифровое, следует вызвать функцию

    openpyxl.utils.column_index_from_string()

    Чтобы преобразовать цифровое обозначение столбуа в буквенное, следует вызвать функцию

    openpyxl.utils.get_column_letter()

    Для вызова этих функций загружать рабочую книгу не обязательно.

    >>> from openpyxl.utils import get_column_letter, column_index_from_string
    >>> get_column_letter(1)
    'A'
    >>> get_column_letter(27)
    'AA'
    >>> column_index_from_string('A')
    1
    >>> column_index_from_string('AA')
    27

    Используя срезы объектов Worksheet, можно получить все объекты Cell, принадлежащие определенной строке, столбцу или прямоугольной области.

    >>> sheet['A1':'C3']
    ((<Cell 'Лист1'.A1>, <Cell 'Лист1'.B1>, <Cell 'Лист1'.C1>),
     (<Cell 'Лист1'.A2>, <Cell 'Лист1'.B2>, <Cell 'Лист1'.C2>),
     (<Cell 'Лист1'.A3>, <Cell 'Лист1'.B3>, <Cell 'Лист1'.C3>))
    for row in sheet['A1':'C3']:
        string = ''
        for cell in row:
            string = string + str(cell.value) + ' '
        print(string)
    2015-04-05 13:34:02 Яблоки 73 
    2015-04-05 03:41:23 Вишни 85 
    2015-04-06 12:46:51 Груши 14 

    Выводим значения второй колонки:

    >>> sheet['B']
    (<Cell 'Лист1'.B1>, <Cell 'Лист1'.B2>, <Cell 'Лист1'.B3>, <Cell 'Лист1'.B4>, ..., <Cell 'Лист1'.B7>)
    for cell in sheet['B']:
        print(cell.value)
    Яблоки
    Вишни
    Груши
    Апельсины
    Яблоки
    Бананы
    Земляника

    Выводим строки с первой по третью:

    >>> sheet[1:3]
    ((<Cell 'Лист1'.A1>, <Cell 'Лист1'.B1>, <Cell 'Лист1'.C1>),
     (<Cell 'Лист1'.A2>, <Cell 'Лист1'.B2>, <Cell 'Лист1'.C2>),
     (<Cell 'Лист1'.A3>, <Cell 'Лист1'.B3>, <Cell 'Лист1'.C3>))
    for row in sheet[1:3]:
        string = ''
        for cell in row:
            string = string + str(cell.value) + ' '
        print(string)
    2015-04-05 13:34:02 Яблоки 73 
    2015-04-05 03:41:23 Вишни 85 
    2015-04-06 12:46:51 Груши 14 

    Для доступа к ячейкам конкретной строки или столбца также можно воспользоваться атрибутами rows и columns объекта Worksheet.

    >>> list(sheet.rows)
    [(<Cell 'Лист1'.A1>, <Cell 'Лист1'.B1>, <Cell 'Лист1'.C1>),
     (<Cell 'Лист1'.A2>, <Cell 'Лист1'.B2>, <Cell 'Лист1'.C2>),
     ..........
     (<Cell 'Лист1'.A6>, <Cell 'Лист1'.B6>, <Cell 'Лист1'.C6>),
     (<Cell 'Лист1'.A7>, <Cell 'Лист1'.B7>, <Cell 'Лист1'.C7>)]
    for row in sheet.rows:
        print(row)
    (<Cell 'Лист1'.A1>, <Cell 'Лист1'.B1>, <Cell 'Лист1'.C1>)
    (<Cell 'Лист1'.A2>, <Cell 'Лист1'.B2>, <Cell 'Лист1'.C2>)
    ..........
    (<Cell 'Лист1'.A6>, <Cell 'Лист1'.B6>, <Cell 'Лист1'.C6>)
    (<Cell 'Лист1'.A7>, <Cell 'Лист1'.B7>, <Cell 'Лист1'.C7>)
    >>> list(sheet.columns)
    [(<Cell 'Лист1'.A1>, <Cell 'Лист1'.A2>, <Cell 'Лист1'.A3>, <Cell 'Лист1'.A4>, ..., <Cell 'Лист1'.A7>),
     (<Cell 'Лист1'.B1>, <Cell 'Лист1'.B2>, <Cell 'Лист1'.B3>, <Cell 'Лист1'.B4>, ..., <Cell 'Лист1'.B7>),
     (<Cell 'Лист1'.C1>, <Cell 'Лист1'.C2>, <Cell 'Лист1'.C3>, <Cell 'Лист1'.C4>, ..., <Cell 'Лист1'.C7>)]
    for column in sheet.columns:
        print(column)
    (<Cell 'Лист1'.A1>, <Cell 'Лист1'.A2>, <Cell 'Лист1'.A3>, <Cell 'Лист1'.A4>, ..., <Cell 'Лист1'.A7>)
    (<Cell 'Лист1'.B1>, <Cell 'Лист1'.B2>, <Cell 'Лист1'.B3>, <Cell 'Лист1'.B4>, ..., <Cell 'Лист1'.B7>)
    (<Cell 'Лист1'.C1>, <Cell 'Лист1'.C2>, <Cell 'Лист1'.C3>, <Cell 'Лист1'.C4>, ..., <Cell 'Лист1'.C7>)

    Выводим значения всех ячеек листа:

    for row in sheet.rows:
        string = ''
        for cell in row:
            string = string + str(cell.value) + ' '
        print(string)
    2015-04-05 13:34:02 Яблоки 73 
    2015-04-05 03:41:23 Вишни 85 
    2015-04-06 12:46:51 Груши 14 
    2015-04-08 08:59:43 Апельсины 52 
    2015-04-10 02:07:00 Яблоки 152 
    2015-04-10 18:10:37 Бананы 23 
    2015-04-10 02:40:46 Земляника 98 

    Выводим значения второй строки (индекс 1):

    for cell in list(sheet.rows)[1]:
        print(str(cell.value))
    2015-04-05 03:41:23
    Вишни
    85

    Выводим значения второй колонки (индекс 1):

    for row in sheet.rows:
        print(str(row[1].value))
    Яблоки
    Вишни
    Груши
    Апельсины
    Яблоки
    Бананы
    Земляника

    Запись файлов Excel

    >>> import openpyxl
    >>> wb = openpyxl.Workbook()
    >>> wb.sheetnames
    ['Sheet']
    >>> wb.create_sheet(title = 'Первый лист', index = 0)
    <Worksheet "Первый лист">
    >>> wb.sheetnames
    ['Первый лист', 'Sheet']
    >>> wb.remove(wb['Первый лист'])
    >>> wb.sheetnames
    ['Sheet']
    >>> wb.save('example.xlsx')

    Метод create_sheet() возвращает новый объект Worksheet, который по умолчанию становится последним листом книги. С помощью именованных аргументов title и index можно задать имя и индекс нового листа.

    Метод remove() принимает в качестве аргумента не строку с именем листа, а объект Worksheet. Если известно только имя листа, который надо удалить, используйте wb[sheetname]. Еще один способ удалить лист — использовать инструкцию del wb[sheetname].

    Не забудьте вызвать метод save(), чтобы сохранить изменения после добавления или удаления листа рабочей книги.

    Запись значений в ячейки напоминает запись значений в ключи словаря:

    >>> import openpyxl
    >>> wb = openpyxl.Workbook()
    >>> wb.create_sheet(title = 'Первый лист', index = 0)
    >>> sheet = wb['Первый лист']
    >>> sheet['A1'] = 'Здравствуй, мир!'
    >>> sheet['A1'].value
    'Здравствуй, мир!'

    Заполняем таблицу 3×3:

    import openpyxl
    
    # создаем новый excel-файл
    wb = openpyxl.Workbook()
    
    # добавляем новый лист
    wb.create_sheet(title = 'Первый лист', index = 0)
    
    # получаем лист, с которым будем работать
    sheet = wb['Первый лист']
    
    for row in range(1, 4):
        for col in range(1, 4):
            value = str(row) + str(col)
            cell = sheet.cell(row = row, column = col)
            cell.value = value
    
    wb.save('example.xlsx')

    Можно добавлять строки целиком:

    sheet.append(['Первый', 'Второй', 'Третий'])
    sheet.append(['Четвертый', 'Пятый', 'Шестой'])
    sheet.append(['Седьмой', 'Восьмой', 'Девятый'])

    Стилевое оформление

    Для настройки шрифтов, используемых в ячейках, необходимо импортировать функцию Font() из модуля openpyxl.styles:

    from openpyxl.styles import Font

    Ниже приведен пример создания новой рабочей книги, в которой для шрифта, используемого в ячейке A1, устанавливается шрифт Arial, красный цвет, курсивное начертание и размер 24 пункта:

    import openpyxl
    from openpyxl.styles import Font
    
    # создаем новый excel-файл
    wb = openpyxl.Workbook()
    # добавляем новый лист
    wb.create_sheet(title = 'Первый лист', index = 0)
    # получаем лист, с которым будем работать
    sheet = wb['Первый лист']
    
    font = Font(name='Arial', size=24, italic=True, color='FF0000')
    sheet['A1'].font = font
    sheet['A1'] = 'Здравствуй мир!'
    
    # записываем файл
    wb.save('example.xlsx')

    Именованные стили применяются, когда надо применить стилевое оформление к большому количеству ячеек.

    import openpyxl
    from openpyxl.styles import NamedStyle, Font, Border, Side
    
    # создаем новый excel-файл
    wb = openpyxl.Workbook()
    # добавляем новый лист
    wb.create_sheet(title = 'Первый лист', index = 0)
    # получаем лист, с которым будем работать
    sheet = wb['Первый лист']
    
    # создаем именованный стиль
    ns = NamedStyle(name='highlight')
    ns.font = Font(bold=True, size=20)
    border = Side(style='thick', color='000000')
    ns.border = Border(left=border, top=border, right=border, bottom=border)
    
    # вновь созданный именованный стиль надо зарегистрировать
    # для дальнейшего использования
    wb.add_named_style(ns)
    
    # теперь можно использовать именованный стиль
    sheet['A1'].style = 'highlight'
    
    # записываем файл
    wb.save('example.xlsx')

    Добавление формул

    Формулы, начинающиеся со знака равенства, позволяют устанавливать для ячеек значения, рассчитанные на основе значений в других ячейках.

    sheet['B9'] = '=SUM(B1:B8)'

    Эта инструкция сохранит =SUM(B1:B8) в качестве значения в ячейке B9. Тем самым для ячейки B9 задается формула, которая суммирует значения, хранящиеся в ячейках от B1 до B8.

    Формула Excel — это математическое выражение, которое создается для вычисления результата и которое может зависеть от содержимого других ячеек. Формула в ячейке Excel может содержать данные, ссылки на другие ячейки, а также обозначение действий, которые необходимо выполнить.

    Использование ссылок на ячейки позволяет пересчитывать результат по формулам, когда происходят изменения содержимого ячеек, включенных в формулы. Формулы Excel начинаются со знака =. Скобки () могут использоваться для определения порядка математических операции.

    Примеры формул Excel: =27+36, =А1+А2-АЗ, =SUM(А1:А5), =MAX(АЗ:А5), =(А1+А2)/АЗ.

    Хранящуюся в ячейке формулу можно читать, как любое другое значение. Однако, если нужно получить результат расчета по формуле, а не саму формулу, то при вызове функции load_workbook() ей следует передать именованный аргумент data_only со значением True.

    Настройка строк и столбцов

    С помощью модуля OpenPyXL можно задавать высоту строк и ширину столбцов таблицы, закреплять их на месте (чтобы они всегда были видны на экране), полностью скрывать из виду, объединять ячейки.

    Настройка высоты строк и ширины столбцов

    Объекты Worksheet имеют атрибуты row_dimensions и column_dimensions, которые управляют высотой строк и шириной столбцов.

    sheet['A1'] = 'Высокая строка'
    sheet['B2'] = 'Широкий столбец'
    
    sheet.row_dimensions[1].height = 70
    sheet.column_dimensions['B'].width = 30

    Атрибуты row_dimensions и column_dimensions представляют собой значения, подобные словарю. Атрибут row_dimensions содержит объекты RowDimensions, а атрибут column_dimensions содержит объекты ColumnDimensions. Доступ к объектам в row_dimensions осуществляется с использованием номера строки, а доступ к объектам в column_dimensions — с использованием буквы столбца.

    Для указания высоты строки разрешено использовать целые или вещественные числа в диапазоне от 0 до 409. Для указания ширины столбца можно использовать целые или вещественные числа в диапазоне от 0 до 255. Столбцы с нулевой шириной и строки с нулевой высотой невидимы для пользователя.

    Объединение ячеек

    Ячейки, занимающие прямоугольную область, могут быть объединены в одну ячейку с помощью метода merge_cells() рабочего листа:

    sheet.merge_cells('A1:D3')
    sheet['A1'] = 'Объединены двенадцать ячеек'
    
    sheet.merge_cells('C5:E5')
    sheet['C5'] = 'Объединены три ячейки'

    Чтобы отменить слияние ячеек, надо вызвать метод unmerge_cells():

    sheet.unmerge_cells('A1:D3')
    sheet.unmerge_cells('C5:E5')

    Закрепление областей

    Если размер таблицы настолько велик, что ее нельзя увидеть целиком, можно заблокировать несколько верхних строк или крайних слева столбцов в их позициях на экране. В этом случае пользователь всегда будет видеть заблокированные заголовки столбцов или строк, даже если он прокручивает таблицу на экране.

    У объекта Worksheet имеется атрибут freeze_panes, значением которого может служить объект Cell или строка с координатами ячеек. Все строки и столбцы, расположенные выше и левее, будут заблокированы.

    Значение атрибута freeze_panes Заблокированные строки и столбцы
    sheet.freeze_panes = 'A2' Строка 1
    sheet.freeze_panes = 'B1' Столбец A
    sheet.freeze_panes = 'C1' Столбцы A и B
    sheet.freeze_panes = 'C2' Строка 1 и столбцы A и B
    sheet.freeze_panes = None Закрепленные области отсутствуют

    Диаграммы

    Модуль OpenPyXL поддерживает создание гистогорамм, графиков, а также точечных и круговых диаграмм с использование данных, хранящихся в электронной таблице. Чтобы создать диаграмму, необходимо выполнить следующие действия:

    1. создать объект Reference на основе ячеек в пределах выделенной прямоугольной области;
    2. создать объект Series, передав функции Series() объект Reference;
    3. создать объект Chart;
    4. дополнительно можно установить значения переменных drawing.top, drawing.left, drawing.width, drawing.height объекта Chart, определяющих положение и размеры диаграммы;
    5. добавить объект Chart в объект Worksheet.

    Объекты Reference создаются путем вызова функции openpyxl.charts.Reference(), принимающей пять аргуменов:

    1. Объект Worksheet, содержащий данные диаграммы.
    2. Два целых числа, представляющих верхнюю левую ячейку выделенной прямоугольной области, в которых содержатся данные диаграммы: первое число задает строку, второе — столбец; первой строке соответствует 1, а не 0.
    3. Два целых числа, представляющих нижнюю правую ячейку выделенной прямоугольной области, в которых содержатся данные диаграммы: первое число задает строку, второе — столбец.
    from openpyxl import Workbook
    from openpyxl.chart import BarChart, Reference
    
    # создаем новый excel-файл
    wb = Workbook()
    # добавляем новый лист
    wb.create_sheet(title = 'Первый лист', index = 0)
    # получаем лист, с которым будем работать
    sheet = wb['Первый лист']
    
    sheet['A1'] = 'Серия 1'
    # это колонка с данными
    for i in range(1, 11):
        cell = sheet.cell(row = i + 1, column = 1)
        cell.value = i * i
    
    # создаем диаграмму
    chart = BarChart()
    chart.title = 'Первая серия данных'
    data = Reference(sheet, min_col = 1, min_row = 1, max_col = 1, max_row = 11)
    chart.add_data(data, titles_from_data = True)
    
    # добавляем диаграмму на лист
    sheet.add_chart(chart, 'C2')
    
    # записываем файл
    wb.save('example.xlsx')

    Аналогично можно создавать графики, точечные и круговые диаграммы, вызывая методы:

    • openpyxl.chart.LineChart()
    • openpyxl.chart.ScatterChart()
    • openpyxl.chart.PieChart()

    Поиск:
    Excel • MS • Python • Web-разработка • Модуль

    Понравилась статья? Поделить с друзьями:
  • Создать файл excel только
  • Создать текстовый документ word онлайн без регистрации
  • Создать файл excel который будет вычислять столбец таблицы умножения на любое число пересчет должен
  • Создать текстовый документ word 2007
  • Создать файл excel который будет вычислять площадь трапеции по формуле где