Работа с файлами excel в python: Работа с Excel из Python: Полное руководство с примерами

Содержание

Автоматизация Excel с помощью Python | by Anastasia Shu | Sep, 2020 | Medium

Часть 1

Начну пожалуй свою самую долгожданную серию статей про автоматизацию Excel с помощью Python. Долгожданная, потому что сейчас Excel повсеместно. Ну, и потому что я долго тянула 🙈

Уверенное владение Excel уже принято за норму, чем за исключение. И бизнес зачастую просто ни в каких других программах не работает с цифрами. Открыть excel-файл на телефоне в чате или гугл таблицах (тоже, кстати, отлично работает) намного проще, чем думать как запустить тетрадку jupyter notebook или целую программу на python.

(думается мне, после того как я разберусь с excel, напишу еще и про google sheets)

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

И вот проходя множество курсов по анализу данных вы вряд ли найдете помимо экскурса в Python и SQL еще и Excel — все так стремительно хотят от него уйти, будто вы и так в нём хорошо работали.

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

Excel сейчас — это стандартная программа, которая ставится в комплекте Microsoft Office и есть на каждом ноутбуке (если её нет, найдется Libre, но смысл останется).

Там удобно посмотреть данные сразу, прокрутить, вставить один раз формулу и “протянуть” дальше. Построить быстренько несложные диаграммы из самостоятельно выбранных данных.

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

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

Но бывает и такое, что ты сидишь и думаешь “это можно сделать проще”, но, увы, не знаешь как.

Все эти “можно сделать проще” возможны с помощью макросов или power query, но это может быть слишком сложно или наоборот долго, ну, и я зачем мы владеем python? 😃

Прежде чем мы перейдем к конкретной задаче, расскажу, что в Python с excel-документами можно и нужно работать с помощью pandas, openpyxl, xlrd, xlutils и pyexcel.

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

Объединение нескольких excel-файлов

Да, эту задачу можно решить ручками или power query, где несколько таблиц передаете в запрос и объединяете.

Например, на работе вы можете работать с ежемесячными отчётами о продажах, и с 90% вероятностью вы будете заниматься консолидацией региональных отчётов. Однажды вас попросят подготовить не только сконсолидированный отчёт, но и найти/подсчитать общее количество продаж по всем этим отчетам — и всё как можно быстрее.

Вариант номер 1, описан выше. Excel, Power Query, добавляете отчёты, объединяете, открываете, смотрите.

Вариант номер 2. Excel, несколько таблиц, переносим вкладки в один документ, создаете еще одну вкладку с шаблоном, делаете подсчёты с помощью формул. Смотрите.

А можно Вариант номер 3. Объединить все excel-файлы в python, используя библиотеку pandas (да-да, pandas).

Устанавливаем pandas используя pip или conda в терминале:

pip install pandas
###
conda install pandas

И рассмотрим вариант работы с отчетом, который сделан по одному шаблону (например, придумаем самый простеньких отчёт о продажах фруктов).

Можно заметить, что наш отчёт начинается не с первой ячейки, а только с 4-й строчки, поэтому нам понадобятся данные для импорта, начиная с этой строки (мне кажется, здорово такоё вариант учесть, потому что в работе часто такое встречается). В приведенном ниже коде мы будем использовать функции read_excel и append.

# часть первая
import pandas as pd
files = ['https://github.com/asaydn/test/raw/master/january.xlsx',
'https://github.com/asaydn/test/raw/master/february.xlsx',
'https://github.com/asaydn/test/raw/master/march.xlsx']
merger = pd.DataFrame()# часть вторая
for file in files:
df = pd.read_excel(file, skiprows = 3)
merger = merger.append(df, ignore_index = True)

# сохраняем
merger.to_excel('merger.xlsx')

Давайте посмотрим на то, что мы сделали здесь:

  1. В первой части мы импортировали pandas, создали список со всеми url-адресами и сгенерировали пустой фрейм данных под названием merger
  2. Во второй части мы просмотрели каждый элемент списка (url-адрес) в files, чтобы прочитать каждый файл, пропустив первые три строчки (skiprows = 3) и добавив его в объединенный датафрейм(merger).
  3. В третьей части мы генерируем новый excel-файл с именем merger.xlsx, содержащий наши объединенные файлы!

Получение значений нескольких файлов

Давайте посмотрим на другой пример.

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

Для этого примера мы будем использовать другую библиотеку — openpyxl. Вы можете установить её с помощью pip или conda, используя код ниже:

pip install openpyxl
###
conda install openpyxl

А теперь посмотрим код и что он выполняет:

Если вы хотите выполнить код ниже, то запускайте код после сохранения файлов, сохраните файлы по ссылкам выше на свой компьютер.

# импортируем библиотеку и создаем переменные
import openpyxlfiles = [] #укажите здесь путь к файлам
values = []# пишем цикл
for file in files:
wb = openpyxl.load_workbook(file)
sheet = wb['Sheet1']
value = sheet['F5'].value
values.append(value)

Давайте разберем это шаг за шагом, сначала мы:

  • Создаем список (files), который содержит ссылки на все наши файлы. В Windows мы можем нажать Shift + правой кнопкой мыши и использовать Копировать как путь (или, Copy as Path), чтобы получить путь к файлу.
  • И создаем пустой список для хранения наших значений (values)
  • Пишем цикл, который будет выполнять нужные нам манипуляции с каждым файлом:

— с помощью метода .load_workbook() загружаем файл

— используем ['Sheet1'] и ['F5'] для ссылки на имя листа, так и на ссылки на ячейки таблицы (на нужном нам листе в рабочей книге)

Если у вас Excel на русском языке, то вместо 'Sheet1' указывайте 'Лист1' .

— и используем атрибут .value, чтобы извлечь значение ячейки и добавить его в список values методом .append()

Применение формул в книгах

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

Мы снова будем использовать openpyxl. Если вам нужно установить его, сделайте это по инструкции выше.

import openpyxl  
files = [] # указываем здесь путь к файлам for file in files:
wb = openpyxl.load_workbook(file)
sheet = wb['Sheet1']
sheet['F9'] = '=SUM(F5:F8)'
sheet['F9'].style = 'Currency'
wb.save(file)
  • В этом фрагменте кода мы снова заполняем список файлов. Цикл for открывает каждый файл и присваивает соответствующее название листа.
  • Затем мы присваиваем строку = SUM(F5: F8) ячейке F9 и используем атрибут style для назначения стиля ячейки. Больше стилей ячеек можно найти в официальной документации.

Если у вас Excel на русском языке, то вместо 'Sheet1' указывайте 'Лист1' и записывайте формулы соответственно на русском, например, =СУММ(F5:F8) .

А теперь я дополню эту связку, вот таким вот открытием — автоматизировать Excel, и по сути заменить VBA (в моём понимании) можно библиотекой xlwings.

Автор xlwings говорит, что библиотека “Make Excel Fly!”. Вы можете использовать xlwings + Python для следующих задач:

  1. Автоматизируйте Excel с помощью Python, например, создавая отчеты (другой пример описала выше)
  2. Напишите макросы на Python и запустите их из Excel, нажав на кнопку
  3. Напишите пользовательские функции в Python и вызовите эти функции из Excel так же, как и любую другую функцию Excel

Попробуем установить и рассмотреть несложный первый пункт. Пункты 2 и 3 рассмотрим в следующей серии.

Существует две части для установки xlwings: библиотека Python и надстройка Excel. Давайте начнем с установки библиотеки Python через командную строку:

pip install xlwings

Затем загрузите надстройку Excel из официального репозитория xlwings на Github. Это xlwings.xlam файл на странице (если вы вдруг будете читать эту статью через год, берите последнюю версию)

Положите xlwings.xlam-файл в папку надстройки Excel, которая является:

C:\Users\xxxx\AppData\Roaming\Microsoft\AddIns

Xxxx — это ваше собственное имя пользователя на вашем компьютере.

У меня получилось так, что я могу сейчас показать как это работает в английской и в русской версии Excel.

Затем откройте Excel, Файл -> Параметры -> Надстройки (или File -> Options -> Add-ins), нажимаем кнопку “Перейти..” (Go..) выбирая Надстройки Excel (Excel Add-ins).

в русскоязычном Excelв английской версии

Когда появится окно надстроек, нажмите на кнопку “Обзор” (Browse..).

Это приведет вас непосредственно к папке Addins (куда вы добавили файл), просто выберите xlwings.xlam файл из папки и нажмите кнопку “ОК”. Надстройка xlwings теперь добавлена в ваш Excel, она будет автоматически включена всякий раз, когда вы запускаете приложение Excel.

русская версияанглийская версия

Теперь вкладка xlwings должна появиться на ленте Excel.

ruen

На этом настройка завершена!

С интерпретатором кода Python можно работать через командную строку/терминал. Если в консоли выполнить команду python (или python3 , в зависимости от того как у вас настроено) без параметров, то интерпретатор Python запустится здесь и сейчас.

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

Символы >>> — это приглашение для ввода команд, то же, что и знак в командной строке.

python

Запустите следующий скрипт Python, который откроет новый экземпляр Excel.

import xlwings as xw
wb = xw.Book()

Затем у вас откроется новый файл.

Здесь, wb относится к новому (и открытому) файлу Excel, и это также объект Python в то же время, что означает, что мы можем манипулировать им (файлом Excel) в Python!

Попробуйте следующий код, который позволит вам вводить значения из Python в Excel.

sheet = wb.sheets['Sheet1']
sheet.range('A1').value = "Hello Excel from Python"

Если у вас Excel на русском языке, то вместо 'Sheet1' указывайте 'Лист1' .

Мы также будем использовать .range((x,y))для обозначения отдельных ячеек в Excel. Где x относится к строке, а y относится к столбцу.

Так .range((3, 2))значит клетка B3 (это на случай если вы отключили стиль ссылок R1C1) или R3C2.

Кроме того, можно писать формулы в Excel с помощью Python. В основном мы записываем строку в ячейку. Здесь мы хотим вычислить экспоненциальные значения оси x в другом столбце. В приведенном ниже коде мы используем “f-string”, который является улучшенным синтаксисом форматирования строк, начиная с Python 3.6.

sheet.range((3,2)).value = 'x-axis'
sheet.range((3,3)).value = 'y-axis'
for i in range(5):
sheet.range((i+4, 2)).value = i
sheet.range((i+4,3)).value = f'=exp(B{i+4})'

Сохранение данных из Excel в датафрейм так же просто, как и само создание документа выше. Прочитаем данные Excel в Python в виде списка.

data = sheet.range('B3:C8').value

Попробуйте следующий код, если вы хотите прочитать данные excel в python в pandasвиде датафрейма. .expand() автоматически определяет размер данных и .options()указывает, что нам нужен pandas.

Мы сбрасываем индекс в конце, так что ось x будет рассматриваться как столбец, а не в качестве индекса.

import pandas as pd
df = xw.Range('B3').expand().options(pd.DataFrame).value
df.reset_index(inplace=True)

Теперь можно построить и график! Поскольку данные уже в python, мы можем создать график, а затем поместить его в excel-файл.

Для построения графика мы будем использовать matplotlib.

import matplotlib.pyplot as pltfig = plt.figure()
plt.plot(df['x-axis'],df['y-axis'])
plt.xlabel('x-axis')
plt.ylabel('y-axis')
sheet.pictures.add(fig, name='MyPlot', update=True)

Собственно как и всегда, мы должны сохранить и закрыть файл! Вспоминаем, что wb относится к рабочей книге.

wb.save('automate_excel_with_python.xlsx')
wb.close()

В заключение

Python делает работу с excel-файлами довольно простой. Мы рассмотрели, как объединять различные excel-файлы, получать конкретные значения и добавлять формулы сразу в несколько файлов одновременно, а также поставили надстройку в excel и попробовали создать простенький файл.

Несмотря на то, что на работе порой вы можете застрять в excel на целый день, а то и вся рутина у вас в нём, python поможет автоматизировать какие-нибудь простенькие задачки (для начала).

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

Интеграция MS Excel и Python / Хабр

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

В сегодняшней статье я хотел бы, как можно подробнее, рассмотреть интеграцию приложений 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 и Python. Основы взаимодействия.

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

Итак, начнем по этапам:

1. Устанавливаем Python.
Для этого нам понадобится замечательный продукт Anaconda, который включает в себя как сам Python, так и необходимы нам для работы пакеты, такие как Pandas, Xlwings, NumPy и другие.
Для того, что бы установить Anaconda, заходим на официальный сайт в раздел Download и скачиваем инсталлятор для Вашей операционной системы.  
Настоятельно рекомендую брать дистрибутив с версией Python 3.*, так как Python 2.* морально устарел и все реже используется в новых продуктах. Ссылка на Anaconda здесь.

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


Прописываем команду python . Если у Вас все получилось, то должна отобразиться версия установленного у вас интерпритатора Python, наподобие сообщения ниже.
Поздравляю, Python Вы установили, можно двигаться дальше.


2. Выбираем IDE для написания кода.
IDE — это интерактивная среда для написания кода. Код можно писать хоть в блокноте, хоть в командной строке интерпритатора, но это очень неудобно. Поэтому все используют IDE. Для Python их создано множество, но я остановлюсь на двух из них, а именно Jupyter Notebook и Spider, так как они идут в комплекте поставки Anaconda.

Jupyter Notebook — это интерактивная среда разработки, которая позволяет выполнять код программы построчно и тем самым наблюдать за тем, что делает программа и какие выдает результаты.

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

Мне больше понравился Spyder и дальше примеры будут с его использованием, но выбор IDE — это личное дело каждого пользователя и настаивать на своем выборе я не буду.

3. Импорт необходимых пакетов Python.
Для экспорта данных из Excel в Python и их дальнейшей обработки, нам понадобятся два пакета: Pandas и Xlwings. Они оба уже включены в состав Anaconda, поэтому никаких дополнительных действий по их установки от Вас не потребуется.

Pandas — это дополнительный пакет к Python, который позволяет работать с данными, как с двумерными таблицами (Excel — это как раз и есть такая таблица).

Xlwings — также дополнительный пакет к Python, который отвечает за получение/сохранение данных из Excel файлов. Отличительными особенностями данного пакета является возможность не только редактировать  данные в Excel, но также стиль оформления ячеек, создавать дополнительные листы и т.п. Супер-фишкой является возможность запускать Python скрипты прямо из Excel файлов, но об этой особенности поговорим в других уроках.

Итак, что бы импортировать Pandas и Xlwings, проделаем следующие операции: 1. Запустить Spyder. 2. Удаляем в появившемся окне кода, все что туда программа написала по умолчанию, так как это нам не нужно. 3. Вставляем слудеющий код:

import xlwings as xw
import pandas as pd

print (xw.__version__)
print (pd.__version__)

Объясню, что делает этот фрагмент кода. Первые две строки, которые начинаются со слова import, импортируют нужные нам пакеты,  вторые две строки выводят их текущие версии в консоль Python. Это нужно, что бы проверить что все корректно работает.

Сохраняем скрипт в удобное Вам место и запускаем, если все сделали правильно в консоли будет выведены версии пакетов. В моем случае это 0.15.10, 0.25.1.

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

4. Чтение данных из Excel файла Python.
Мы добрались до самой важной части, а именно как прочитать данные из Excel файла. Для примера я создал файл с названием Excel_Python-1.xlsx и поместил в туже папку, куда сохранил скрипт из шага 3. В этом файле создал лист «Данные» и туда внес следующую информацию:
Для того, что бы прочитать эти данные, давайте внесем в скрипт изменения. Теперь наш скрипт будет выглядеть следующим образом:
import xlwings as xw
import pandas as pd

wb = xw.Book(‘Excel_Python-1.xlsx’) # Открываем книгу
data_excel = wb.sheets[‘Данные’] # Читаем лист Данные
data_pd = data_excel.range(‘A1:C4’).options(pd.DataFrame, header = 1, index = False).value # Создаем DataFrame
print(data_pd)

Запускаем скрипт, если все сделали правильно, то в консоли Python Вы увидите содержание Excel файла. Ура!!! Данные прочитаны. Теперь давайте остановимся подробнее на каждой из новых строк скрипта.

wb = xw.Book(‘Excel_Python-1.xlsx’) — Открываем Excel файл с именем Excel_Python-1.xlsx и присваиваем его переменной wb.

data_excel = wb.sheets[‘Данные’] — Получаем доступ к листу Данные из файла, записанного в переменную wb и присваиваем его переменной data_excel.

data_pd = data_excel.range(‘A1:C4’).options(pd.DataFrame, header = 1, index = False).value — Читаем данные с области листа A1:C4 и создаем переменную типа Pandas DataFrame (pd.DataFrame), при этом говорим что первая строка таблицы содержит заголовки (header = 1), а номеров по порядку или так называемых индексов у строк нет (index = False).

print(data_pd) — Выводим в консоль Python содержимого созданого нами DataFrame с именем data_pd.

5. Сохранение данных из Python в Excel. 

Великолепно! Данные мы прочитали, теперь давайте их немного отредактируем и сохраним назад в Excel файл.

Сначало добавим в наш DataFrame data_pd еще один столбец Пол. Это можно сделать при помощи следующей команды:

data_pd[‘Пол’] = [‘Мужской’,’Мужской’,’Мужской’]

Отлично, а теперь давайте запишем эти модифицированные данные назад в наш Excel файл:

data_excel.range(‘A1’).options(index = False).value = data_pd

Размерем эту команду чуть подробнее. Мы говорим что в лист data_excel, который мы создали ранее, с ячейки A1 надо внести данные из нашего DataFrame data_pd, при этом индексы строк записывать не надо (index = False). Полностью код выглядит следующим образом:

import xlwings as xw
import pandas as pd

wb=xw.Book(‘Excel_Python-1.xlsx’) # Открываем книгу
data_excel = wb.sheets[‘Данные’] # Читаем лист Данные
data_pd = data_excel.range(‘A1:C4’).options(pd.DataFrame, header = 1, index = False).value # Создаем DataFrame
data_pd[‘Пол’] = [‘Мужской’,’Мужской’,’Мужской’]
data_excel.range(‘A1’).options(index = False).value = data_pd

Запустите скрипт и посмотрите Ваш Excel файл, в нем Вы увидете, что появился новый заполненный данными столбец «Пол».

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

Python — работа с Excel — Алексей Лавриненко | Oleksiy Lavrynenko

Python — работа с Excel. Ввел я в Google что бы найти хоть что-то, что поможет решить мне задачу, суть которой сводится к получению всех номеров мобильных телефонов из некоторого количества файлов Excel. Конечно, можно было вспомнить Zennoposter, о котором писал ранее, и методику работы которого с Excel описывал тут, но раз я изучаю Python — то почему бы не реализовать задачу на Python?
Более конкретно задача выглядит следующим образом: имеется 23 экселевских файла, в которых имеются полные адреса и телефоны ВСЕХ 😉 аптек в Украине (не факт, что информация слишком уж актуальная, учитывая, что взяты эти файлы с государственного сайта Министерства здравоохранения — а ведь все знают, как работают госслужащие, правда? 🙂 ).

Как бы там не было — нужно сделать что-то, что позволит получить номера всех мобильных телефонов, имеющихся в данных файлах. Конечно, можно сделать это и в ручном режиме. Всего-то и дел — открыть файл, просмотреть, и выписать номера мобильных. А что, если все автоматизировать с учетом нашей темы: Python — работа с Excel? Начнем!

Для примера откроем файл с адресами и телефонами аптек, расположенных в Ивано-Франковской области. Сам файл для примера доступен по ссылке. Если вы откроете файл, то увидите, что все номера телефонов расположены в колонке D, и начинаются с номера 2 (поверьте, остальные файлы построены по такой же схеме):

Т.е. нам нужно — открыть файл, и прочитать все номера телефонов, которые имеются в колонке D. Причем — если номер — мобильный — нужно сохранить его в файл (т.е. используем регулярные выражения). Кстати, было бы неплохо не вводить название обрабатываемого файла в ручном режиме (хорошо, когда файлов штук 30, а если их десять тысяч?) — а сделать цикл, который будет обрабатывать файлы в автоматизированном режиме: взял один файл — обработал, взял другой файл — обработал, и так до конца).

Прежде всего — подключаем необходимые для работы библиотеки:
import os #библиотека для работы с файлами и каталогами
import openpyxl #библиотека для обработки Excel-файлов
import re #библиотека для парсинга с помощью регулярных выражений

Теперь создаем переменную, отвечающую за путь к папке с файлами:
path = os.chdir(‘c:\\Users\\Oleksiy\\Desktop\\Полный список аптек в Украине\\’) #важно — слеши идут двойные, в формате, необходимом для Python, путь загнали в переменную

Теперь нам необходимо получить полный список файлов, находящихся в указанном каталоге:
list_directory = os.listdir(path) #т.е. переменная list_directory состоит из списка всех файлов, которые находятся в директории, находящейся в переменной path

А теперь переходим к коду — описывать его построчно смысла нет, потому читайте комментарии:
for i in list_directory:
print(‘Начинаем обработку файла:’, i)
wb = openpyxl.load_workbook(i)
sheets = wb.get_sheet_names() # Получили полный список листов в файле и загнали в список
sheet = wb.get_sheet_by_name(sheets[0])
row_count = sheet.max_row # Определили количество строк
column_count = sheet.max_column # Определили количество колонок

print(‘В документе’, i, ‘\n — строк: ‘, row_count, ‘\n — колонок:’, column_count)
print(‘\n’)

number_row = 2 #Вводим переменную, отвечающую за начальный номер строки
letter_colomn = ‘D’ #Вводим переменную, отвечающую за колонку

while number_row < row_count:
regxp = ‘((067|098|050|066|097|068|099|093|096)\d{7})’ #Регулярное выражение для поиска мобильных номеров
number_row = str(number_row)
row = letter_colomn + number_row #Создаем переменную ячейки, с которой будем работать
row = str(row) #Конвертируем ее в строковую
temp_number = sheet[row].value #В переменную загоняем значение ячейки
temp_number = str(temp_number) #Конвертируем это значение в строковую

temp_number = temp_number.replace(‘(‘, »).replace(‘)’, »).replace(‘ ‘, »).replace(‘-‘, »).replace(‘.’, »).replace(‘,’, ») #Обрезали все лишнее в номере — тире, точки, скобочки

result_number = re.findall(regxp, temp_number) #Начинаем парсить по номеру (напоминаю, номер уже окультурили)

lens = len(result_number) #Вводим переменную, отвечающую за количество элементов после парсинга
result_number = str(result_number)
if lens == 1: #Если элемент один
number_to_file = result_number[3:12] #Берем все цифры в указанном промежутке
with open(‘number.txt’, ‘a’, encoding=’utf8′) as f: #Создаем файл — если его не было раньше — в режиме дозаписи
f.write(number_to_file + ‘\n’) #Сохраняем в файл найденный и очищенный номер мобильного телефона
elif lens == 2: #Если элементов два
number_to_file = result_number[3:12] # Берем все цифры в указанном промежутке
number_to_file2 = result_number[26:35] #Берем все цифры в указанном промежутке
with open(‘number.txt’, ‘a’, encoding=’utf8′) as f: #Создаем файл — если его не было раньше — в режиме дозаписи
f.write(number_to_file + ‘\n’ + number_to_file2 + ‘\n’) #Сохраняем в файл найденный и очищенный номер мобильного телефона

number_row = int(number_row) #Конвертируем переменную в инт
number_row = number_row + 1 #Увеличиваем на единицу — что бы работать с ячейкой ниже

UPD: в более удобочитаемом виде 🙂 :

  1. import os #Подгружаем библиотеку для обработки системных команд
  2. import openpyxl #Подгружаем библиотеку для обработки  Excel-файлов
  3. import re
  4.  
  5. path = os.chdir('c:\\Users\\Oleksiy\\Desktop\\Полный список аптек в Украине\\')
  6.  
  7. list_directory = os.listdir(path) #В переменную загоняем список файлов в целевой директории
  8. #print('Список всех файлов \n', list_directory) #Выводим полный список файлов в каталоге
  9. #print(type(list_directory))
  10. for i in list_directory:
  11.     print('Начинаем обработку файла:', i)
  12.     wb = openpyxl.load_workbook(i)
  13.     sheets = wb.get_sheet_names()  # Получили полный список листов в файле и загнали в список
  14.     sheet = wb.get_sheet_by_name(sheets[0])
  15.     row_count = sheet.max_row  # Определили количество строк
  16.     column_count = sheet.max_column  # Определили количество колонок
  17.  
  18.     print('В документе', i, '\n - строк: ', row_count, '\n - колонок:', column_count)
  19.     print('\n')
  20.  
  21.     number_row = 2 #Вводим переменную, отвечающую за номер строки
  22.     letter_colomn = 'D' #Вводим переменную, отвечающую за колонку
  23.  
  24.     while number_row < row_count:
  25.         regxp = '((067|098|050|066|097|068|099|093|096)\d{7})' #Регулярное выражение для поиска мобильных номеров
  26.         number_row = str(number_row)
  27.         row = letter_colomn + number_row #Создаем переменную ячейки, с которой будем работать
  28.         row = str(row) #Конвертируем ее в строковую
  29.         temp_number = sheet[row].value #В переменную загоняем значение ячейки
  30.         temp_number = str(temp_number) #Конвертируем это значение в строковую
  31.  
  32.         temp_number = temp_number.replace('(', '').replace(')', '').replace(' ', '').replace('-', '').replace('.',
  33.                                                                                                               '').replace(
  34.             ',', '')  #Обрезали все лишнее в номере - тире, точки, скобочки
  35.         result_number = re.findall(regxp, temp_number)  #Начинаем парсить по номеру (напоминаю, номер уже окультурили)
  36.  
  37.         #typer = type(result_number)
  38.         lens = len(result_number) #Вводим переменную, отвечающую за количество элементов после парсинга
  39.         result_number = str(result_number)
  40.         if lens == 1: #Если элемент один
  41.             number_to_file = result_number[3:12] #Берем все цифры в указанном промежутке
  42.             with open('number.txt', 'a', encoding='utf8') as f: #Создаем файл - если его не было раньше - в режиме дозаписи
  43.                 f.write(number_to_file + '\n') #Сохраняем в файл найденный и очищенный номер мобильного телефона
  44.         elif lens == 2: #Если элементов два
  45.             number_to_file = result_number[3:12]  # Берем все цифры в указанном промежутке
  46.             number_to_file2 = result_number[26:35] #Берем все цифры в указанном промежутке
  47.             with open('number.txt', 'a', encoding='utf8') as f: #Создаем файл - если его не было раньше - в режиме дозаписи
  48.                 f.write(number_to_file + '\n' + number_to_file2 + '\n') #Сохраняем в файл найденный и очищенный номер мобильного телефона
  49.  
  50.         number_row = int(number_row) #Конвертируем переменную в инт
  51.         number_row = number_row + 1 #Увеличиваем на единицу - что бы работать с ячейкой ниже

Для начала по тематике Python — работа с Excel — достаточно. В ближайшем будущем эта тема будет рассмотрена подробнее 🙂
Код в исходном виде доступен на Git-e. В случае возникновения вопросов — пожалуйста, пишите 🙂

Похожее

Библиотека Python для обработки файлов Excel (xls | xlsx)



Мне нужна библиотека python, которая могла бы читать и записывать файлы Excel всех форматов (например, xls и xlsx).

Я новичок в python и раньше использовал Java. В Java году я использовал библиотеку POI, и она была идеальной. Мне нужна библиотека python с такой же функциональностью, если это возможно.

python excel
Поделиться Источник Islam Hassan     01 августа 2012 в 04:21

2 ответа


  • функция dir находит xls, а не xlsx в excel vba

    Я использую функцию dir() в программировании Excel vba с фильтром как .xls. Но у меня есть входные файлы с расширением как .xls , так и .xlsx , которые должны быть подобраны для этого процесса. Во многих системах макрос выбирает файлы .xlsx и .xls , даже если фильтр указан как .xls в макро. Но в…

  • SSIS импорт Excel файлов xls/xlsx

    У меня есть требование импортировать информацию из файла excel в базу данных. У меня есть веб-страница, которая запускает пакет ssis, который берет файл excel и загружает данные в базу данных. Проблема теперь заключается в том, что различные типы файлов excel должны быть процессами либо xls, либо…



4

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

У меня была та же проблема, поэтому я пошел дальше и создал небольшую библиотеку, которая включает в себя python-excel (xlrd, xlwt) и openpyxl в ней. Вы можете найти его здесь: https://github.com/camyoung1234/spreadsheet

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

Чтобы установить его, просто загрузите его, распакуйте, переименуйте папку spreadsheet-master в spreadsheet и поместите ее в PythonXX/Lib/site-packages/ (я тестировал только с Python 2.7, но он должен работать с другими)

В README есть несколько примеров, которые помогут вам начать работу.

Поделиться camyoung1234     03 июля 2013 в 23:00


Поделиться Rory Hart     01 августа 2012 в 04:24


Похожие вопросы:


c# импорт файлов xls и xlsx

Я хочу загрузить файл xls и xlsx в c#. Для xls я использую: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=; Extended Properties=\Excel 8.0;HDR=YES\ Для xlsx: Provider=Microsoft.Ace.OLEDB.12.0;Data…


как конвертировать xls в xlsx

У меня есть несколько файлов *.xls(excel 2003), и я хочу преобразовать эти файлы в xlsx (excel 2007). Я использую пакет uno python, когда сохраняю документы, Я могу установить имя фильтра: MS Excel…


Требуется легкая библиотека Excel(xls/xlsx) php

Возможный Дубликат : Альтернатива для PHP_excel Друг хотел бы использовать библиотеку Php Excel для чтения/записи файлов в форматах xls и xlsx, он знает о той, которая называется PhpExcel, но,…


функция dir находит xls, а не xlsx в excel vba

Я использую функцию dir() в программировании Excel vba с фильтром как .xls. Но у меня есть входные файлы с расширением как .xls , так и .xlsx , которые должны быть подобраны для этого процесса. Во…


SSIS импорт Excel файлов xls/xlsx

У меня есть требование импортировать информацию из файла excel в базу данных. У меня есть веб-страница, которая запускает пакет ssis, который берет файл excel и загружает данные в базу данных….


Любая открытая / бесплатная библиотека для обработки файлов Excel (как *.xls, так и *.xlsx)?

Я знаю некоторые библиотеки с открытым исходным кодом для работы с файлами Excel, но они предназначены только для*. xls или*. xlsx, например NPOI-для*. xls, EPPlus и ClosedXML-для*. xlsx. Я не хочу…


Чтение и запись из файлов xls и xlsx excel в java с использованием Apache POI

Я пишу программу, которая должна читать и писать из excel файлов, независимо от формата(xls или xlsx). Я знаю о Apache POI, но, похоже, у него есть разные классы для обработки файлов xls(HSSF) и…


php excel в mysql. преобразование xls и xlsx как

Я пытаюсь преобразовать excel в mysql. Но у меня есть проблемы с xls и xlsx. Мне нужна библиотека, которая поддерживает xls и xlsx вместе. Когда я меняю имя файла, этого должно быть…


Чтение xlsx-файлов с помощью XLS reader (библиотека обработки)

Я не могу понять, как читать расширение .xlsx файлов с помощью XLS reader. Возможно ли это, или библиотека работает только с файлами .xls? Если это так. Любая помощь о том, как переписать библиотеку…


Есть ли какой-нибудь Ruby gem для чтения файлов .xls и .xlsx?

Как я уже знал, есть некоторые драгоценные камни Ruby для чтения файлов .xls и .xlsx. rubyXL : чтение файлов .xlsx и .xlsm электронная таблица : чтение файла .xls Также знайте некоторые драгоценные…

Работа с файлами в Python. Чтение и запись в файл (ввод-вывод)

Автор Амина С. На чтение 9 мин Опубликовано Обновлено

Работа с файлами – неизменная составляющая программирования на любом языке. Если хочется идти дальше калькуляторов и программ типа «Hello, World», то работа с файлами – обязательная составляющая. Причем не только для редактирования изображений, текстов, видео или другой видимой работы. Файлы используются для хранения необходимой для исполнения информации, настроек и так далее.

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

Типы файлов в Python

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

Файлы разделяются на две разновидности:

  1. Текстовые.
  2. Бинарные.

Рассмотрим более подробно первый тип.

Текстовые

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

Есть еще один формат текстовых файлов, который более сложный – .rtf. Он может содержать форматирование, и этим выгодно отличается от стандартного текстового.

Бинарные

Такие файлы содержат последовательность нулей и единиц. Как правило, представляют собойы последовательность битов. Стандартный формат –  .bin.

Независимо от типа файла, с ним возможно выполнение одного из следующего действия:

  1. Открытие. 
  2. Выполнение (сюда входит запись какой-то информации или ее получение).
  3. Закрытие файла.

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

Открытие файла

Открытие файла – это процедура получения доступа к содержимому файла, но еще не его чтение или запись. Это в Python делается с помощью метода open. Он используется для открытия любого файла, независимо от того, он текстовый или бинарный. 

Используется функция таким образом.

f = open(a, b)

Расшифруем параметры функции:

  1. a – это имя файла. Включает не только непосредственно имя, но и расширение.
  2. b – это тип открытия. В Python есть 12 типов открытия файлов.

Приведем таблицу с ними.

Допустим, у нас есть текстовый файл с таким содержимым.

Видим, что он называется «example.txt». Чтобы программа получила к нему доступ, используйте одну из следующих строк кода.

f = open(‘example.txt’,’r’)

fp = open(‘C:/xyz.txt’,’r’)

Оба позволяют выполнить открытие файла в формате чтения. Но отличается место, из которого осуществляется открытие. Так, первая строчка в переменную f записывает объект из файла, находящегося в той же папке, где расположена программа. А вторая строка демонстрирует пример открытия файла в конкретной папке. В нашем случае – на диске c.

Ну и во втором аргументе мы видим, что файл открывается в режиме «только чтение».

А теперь предположим, что нам надо показать, что содержится в нем, пользователю. Для этого используется следующий код.

>>> print(*f)

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

Если же нужно вывести сам объект, соответствующий файлу, то тогда звездочка не используется. Сам же код такой самый.

Что касается кодировки, то Windows и Linux используют разные: cp1252 и utf-08 соответственно.

Закрытие

Если для открытия текстового документа применяется метод open() то, логично, для закрытия – close(). Это надо делать всегда, если программа не будет с ним больше работать. Если этого не сделать, его след останется в оперативной памяти, и компьютер может начать работать медленнее. В случае с маленькими файлами это не критично, а что если придется открывать большой?

Если присвоить новый файл той же переменной, то закрытие старого произойдет автоматически.

Есть несколько способов осуществления закрытия.

Способ 1

Наиболее легкий способ – просто закрыть файл после того, как с ним будет произведено последнее действие. 

f = open(‘example.txt’,’r’)

# процессы, выполняемые над файлом

f.close()

Пока его снова не открыть средствами программы, она уже ничего не сможет с ним сделать, если выполнить последнюю инструкцию.

Способ 2

Приведенный выше способ прост, но имеет недостаток. Если возникает какая-то ошибка, это может привести к сбою в работе программы. Чтобы обработать ошибки при открытии файла, используется комбинация try/finally. В таком случае, если что-то пойдет не так, то программа просто закроет файл, а не аварийно завершит свою работу. 

Вот код, как это делается.

f = open(‘example.txt’,’r’)

try:

   # работа с файлом

finally:

   f.close()

Открытие файла должно осуществиться до того, как создается конструкция try/finally. Потом пишется try, и это начинается обработчик ошибок. Далее пишутся инструкции по работе с этим файлом, после чего finally записывается, и тогда файл закрывается. То есть, синтаксис обработчика стандартный, и ничем принципиально не отличается.

Способ 3

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

with open(‘example.txt’) as f:

    # работа с файлом

Операции чтения и записи

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

read()

После того, как приложение открыло файл в режиме чтения, к нему можно применить функцию read().

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

>>> f = open(‘example.txt’,’r’)

>>> f.read(7)  # чтение 7 символов из example.txt

‘This is ‘

Это код открыл файл, который выше на картинке и прочитал из него только первые два слова, что равняется 7 символам с пробелами.

Хорошо, предположим, нам надо прочитать 7 символов, начиная с восьмого. Что делать в этом случае? Для этого надо повторно использовать эту функцию. То есть, последняя позиция запоминается.

Следовательно, чтобы прочитать файл с 51-й позиции, необходимо один раз прочитать 50 символов, а потом можно применить объект read к этому же объекту с аргументом, равном количеству символов, которые следует прочесть, начиная с 51-й позиции. 

readline()

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

Допустим, у нас есть файл, содержащий следующие строки.

Example of line1.

Example of line2.

Example of line3.

Теперь давайте увидим, как метод readline() используется для нашего файла.

>>> x = open(‘example.txt’,’r’)

>>> x.readline()  # строка осуществляет чтение строки №1

Example of line1.

>>> x.readline(2)  # строка осуществляет чтение строки №2

Example of line2.

>>> x.readlines()  # строка осуществляет чтение строки №3

Что получится в итоге? Вывод интерпретатора будет следующим:

[‘Example of line1.’,’Example of line2.’,’Example of line3.’]

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

write()

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

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

Синтаксис простой и содержит лишь один аргумент – строку, которую необходимо записать. Также можно использовать регулярные выражения для того, чтобы управлять записью. Например, использовать \n, чтобы следующий текст писать с новой строки. Вот, как это работает.

>>> f = open(‘xyz.txt’,’w’)  # открытие в режиме записи

>>> f.write(‘Hello \n World’)  # запись Hello World в файл

Hello

World

>>> f.close()  # закрытие файла

Изменение имени файла

Чтобы переназвать файл, используется метод rename(). Но сначала надо подгрузить библиотеку os, чтобы получить возможность изменять имена. Метод содержит два аргумента:

  1. Путь к файлу. Если указать только название (с расширением), то будет переименовываться тот, который находится в той же папке, что и программа. Если же указать полный путь, то можно задать файл, располагающийся в другой директории. 
  2. Новое имя файла. 

Работает функция так.

>>> import os

>>> # присвоение файлу нового имени test2.txt

>>> os.rename(«test1″,»test2.txt»)

Управление позицией в текстовых файлах

Управление позицией в файлах возможно такими действиями:

  1. Определение позиции. Используется метод tell().
  2. Редактирование. Осуществляется с помощью функции seek().

Для наглядности, как это работает, приведем пример.

>> f = open(‘example.txt’)  # файл, созданный нами в самом начале статьи

>>> f.read(4)  # выполнение перехода к четвертой позиции

This

>>> f.tell()  # получение позиции файла

4

>>> f.seek(0,0)  # возврат позиции к изначальной.

Оцените качество статьи. Нам важно ваше мнение:

Пишем файл Excel из Python

Если вдруг вам потребуется, к примеру, выгружать отчеты из вашей программы, почему бы не воспользоваться общепринятым офисным форматом – Excel? В этом нет ничего сложного, потому что есть прекрасная библиотека XlsxWriter. Приведу для вас немного примеров из документации с собственными дополнениями. Итак, поехали с установки:

pip install XlsxWriter

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

import xlsxwriter

# открываем новый файл на запись
workbook = xlsxwriter.Workbook('hello.xlsx')

# создаем там "лист"
worksheet = workbook.add_worksheet()

# в ячейку A1 пишем текст
worksheet.write('A1', 'Hello world')

# сохраняем и закрываем
workbook.close()

Сразу отмечу, что можно адресовать ячейки не только по строке типа А1 или C15, а непосредственно по индексам колонки и строки, но нумерация начинается в таком случае с нуля (0).

worksheet.write(0, 0, 'Это A1!')
worksheet.write(4, 3, 'Колонка D, стока 5')

Формулы

Естественно, мы можем добавить в ячейки формулы, как мы делаем это руками в Excel – нужно начать выражение со знака равно (=). Пример: в конце таблицы трат введем подсчет суммы:

import xlsxwriter

workbook = xlsxwriter.Workbook('formula.xlsx')
worksheet = workbook.add_worksheet()

# данные
expenses = (
    ['Аренда', 1000],
    ['Комуналка', 100],
    ['Еда', 300],
    ['Качалка', 50],
)

for i, (item, cost) in enumerate(expenses, start=1):
    worksheet.write(f'A{i}', item)
    worksheet.write(f'B{i}', cost)

# колонкой ниже добавить подсчет суммы
worksheet.write('A5', 'Итого:')
worksheet.write('B5', '=SUM(B1:B4)')

# сохраняем и закрываем
workbook.close()

Я пользуюсь программой Numbers на macOS, в MS Office будет более привычный вид. Вот что получилось у меня:

Формат

Таблица получилась немного скучновата и невыразительна. Давайте добавим форматы ячейкам, а именно ячейки столбца B сделаем в формате денег, а графу «Итого:» и заголовки – жирными. Формат создается как отдельная переменная, и его передают третьим аргументом после аргумента-содержимого ячейки.

# формат для денег
money = workbook.add_format({'num_format': '#,##0"₽"'})
# формат жирности шрифта
bold = workbook.add_format({'bold': True})

worksheet.write('A1', 'Наименование', bold)
worksheet.write('B1', 'Потрачено', bold)

for i, (item, cost) in enumerate(expenses, start=2):
    worksheet.write(f'A{i}', item)
    worksheet.write(f'B{i}', cost, money)

# колонкой ниже добавить подсчет суммы
worksheet.write('A6', 'Итого:', bold)
worksheet.write('B6', '=SUM(B2:B5)', money)

Результат:

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

Вот, что там не написано, а хотелось бы улучшить – задать ширину столбца (колонки), чтобы влезал весь текст. Делается это так:

# для каждой колонки отдельно (первый и второй аргументы совпадают)
worksheet.set_column(0, 0, 15)
worksheet.set_column(1, 1, 20)

# или

# задать колонкам в диапазоне от 0 до 1 каждой – ширину 15
worksheet.set_column(0, 1, 15)

# или по названиям:
worksheet.set_column('A:B', 15)
worksheet.set_column('C:C', 20)

В каких единицах измеряется ширина? Черт его знает, это не сказано в документации, может, в сантидюймах? Подбирайте на глазок. Мой итог:

Графики

Они есть! Давайте построим график.

Шаг 1: зададим данные. Можно писать массив прямо в колонку, а не по каждой ячейке отдельно:

data = [
    [1, 2, 3, 4, 5],
    [2, 4, 6, 8, 10],
    [3, 6, 9, 12, 15],
]

# можно писать сразу колонками!
worksheet.write_column('A1', data[0])
worksheet.write_column('B1', data[1])
worksheet.write_column('C1', data[2])

Шаг 2. Создадим график, задав его тип – в данном случае: диаграмма-столбики. Потом зададим серии данных.

chart = workbook.add_chart({'type': 'column'})

# добавим три последовательности данных
chart.add_series({'values': '=Sheet1!$A$1:$A$5'})
chart.add_series({'values': '=Sheet1!$B$1:$B$5'})
chart.add_series({'values': '=Sheet1!$C$1:$C$5'})

Так, стоп! Что значит эта страшная строка? Она говорит, что нужно взять ячейки с листа «Sheet1» и так далее. А можно попроще? Да – задать данные через числовые координаты списком. А еще за одно в цикл завернем:

worksheet.name = 'Первый лист'
for col, series in enumerate(data):
    chart.add_series({
        # имя листа, строка начала, колонка начала, строка конца, колонка конца
        'values': [worksheet.name, 0, col, 4, col],
        'name': f'Серия {col + 1}'
    })

Шаг 3: вставить наш график в нужную ячейку:

# и вставим его в ячейку A7
worksheet.insert_chart('A7', chart)

Вот, как это выглядит:

Вообще, библиотека очень богатая. Доступно множество форматов и видов графиков и диаграмм. А еще можно объединять и разделять ячейки и даже включать макросы и скрипты!

Специально для канала @pyway. Подписывайтесь на мой канал в Телеграм @pyway 👈 

5 626

Работа с таблицами Excel на Python

Вы все должны были работать с Excel когда-то в своей жизни и, должно быть, чувствовали потребность в автоматизации некоторых повторяющихся или утомительных задач. Не волнуйтесь, в этом руководстве мы узнаем, как работать с Excel с помощью Python или как автоматизировать Excel с помощью Python. Мы рассмотрим это с помощью модуля Openpyxl.

Внимание компьютерщик! Укрепите свои основы с помощью курса Python Programming Foundation и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS . И чтобы начать свое путешествие по машинному обучению, присоединяйтесь к Машинное обучение — курс базового уровня

Начало работы

Openpyxl — это библиотека Python, которая предоставляет различные методы для взаимодействия с файлами Excel с использованием Python. Он позволяет выполнять такие операции, как чтение, запись, арифметические операции, построение графиков и т. Д.


Этот модуль не встроен в Python.Чтобы установить этот тип, введите следующую команду в терминал.

 pip install openpyxl 

Чтение из электронных таблиц

Чтобы прочитать файл Excel, вы должны открыть электронную таблицу с помощью метода load_workbook () . После этого вы можете использовать активный для выбора первого доступного листа и атрибут ячейки для выбора ячейки, передав параметр строки и столбца. Значение Атрибут печатает значение конкретной ячейки.См. Пример ниже, чтобы лучше понять.

Примечание: Целое число первой строки или столбца равно 1, а не 0.

Используемый набор данных: Его можно загрузить отсюда.

Пример:

Python3



импорт openpyxl

path f 900g2

path f = 900g65 "ls

wb_obj = openpyxl.load_workbook (путь)

sheet_obj = wb_obj.active

cell_obj . cell_obj = 1 , столбец = 1 )

печать (cell_obj.value)

Вывод: 6

 Считывание имени 
 из нескольких ячеек  

Может быть два способа чтения из нескольких ячеек.

Метод 1: Мы можем получить количество строк и столбцов, используя max_row и max_column соответственно. Мы можем использовать эти значения внутри цикла for, чтобы получить значение нужной строки, столбца или любой ячейки в зависимости от ситуации. Давайте посмотрим, как получить значение первого столбца и первой строки.

Пример:

Python3

импорт openpyxl

путь = "gfg.xlsx "

wb_obj = openpyxl.load_workbook (путь)

sheet_obj = wb_obj.active 5

=
sheet_obj.max_row

столбец = sheet_obj.max_column

print ( "Всего строк:" , строка)

( "Всего столбцов:" , столбец)

печать ( "\ nЗначение первого столбца" )

для i в диапазон ( 1 , ряд + 1 ):

900 64 cell_obj = sheet_obj.ячейка (строка = i, столбец = 1 )

печать (cell_obj.value)

печать ( "\ n Значение первой строки " )

для i в диапазоне ( 1 , столбец + 1 ):

cell_obj = sheet_obj.ячейка (строка = 2 , столбец = i)

печать (cell_obj.value, конец = "" )

Вывод:

 Всего строк: 6
Всего столбцов: 4

Значение первого столбца
Имя
Анкит
Рахул
Прия
Нихил
Ниша

Значение первой строки
Ankit B.Tech CSE 4 

Метод 2: Мы также можем читать из нескольких ячеек, используя имя ячейки.Это можно рассматривать как нарезку списка Python.

Python3

импорт openpyxl

путь = "gfg.xlsx" 9_0003

wd openpyxl.load_workbook (путь)

sheet_obj = wb_obj.активный

cell_obj = sheet_obj [ 'A1' : 'B6' ]

для cell1, cell2 cell1, cell2 cell_obj:

печать (cell1.value, cell2.value)

Вывод:

 Name Course
Анкит Б.Техника
Рахул М.Тех
Прия MBA
Nikhil B.Tech
Nisha B.Tech 

Обратитесь к статье ниже, чтобы получить подробную информацию о чтении файлов Excel с помощью openpyxl.



Запись в электронные таблицы

Сначала давайте создадим новую электронную таблицу, а затем запишем некоторые данные во вновь созданный файл. Пустую электронную таблицу можно создать с помощью метода Workbook () . Давайте посмотрим на пример ниже.

Пример:

Python3

из openpyxl import Workbook

workbook = Workbook () 9002

рабочая тетрадь.save (filename = "sample.xlsx" )

Вывод:

После создания пустого файла давайте посмотрим, как добавить в него данные с помощью Python. Чтобы добавить данные, сначала нам нужно выбрать активный лист, а затем, используя метод cell (), мы можем выбрать любую конкретную ячейку, передав номер строки и столбца в качестве параметра. Мы также можем писать, используя имена ячеек. См. Пример ниже для лучшего понимания.

Пример:

Python3

импорт openpyxl

wb = openpyxl. = wb.active

c1 = лист. Ячейка (строка = 1 , столбец = 1 )

c1.значение = «Привет»

c2 = sheet.cell (строка = 1 , столбец = 2 )

c2.value = «Мир»

c3 = листа [ 'A2' ]

c3.value = «Добро пожаловать "

c4 = листа [ 'B2' ]

c4.значение = "Все"

wb.save ( "sample.xlsx" )

Выход:



9000 ниже в статье, чтобы получить подробную информацию о написании в Excel.

Добавление к электронной таблице

В приведенном выше примере вы увидите, что каждый раз, когда вы пытаетесь записать в электронную таблицу, существующие данные перезаписываются, и файл сохраняется как новый файл.Это происходит потому, что метод Workbook () всегда создает новый объект файла книги. Для записи в существующую книгу необходимо открыть файл с помощью метода load_workbook () . Мы будем использовать созданную выше рабочую тетрадь.

Пример:

Python3

import openpyxl

wb = openpyxl.load_workbook ( "образец.xlsx " )

листа = wb.active

c = листа [ 'A3' ]

c.value = «Новые данные»

wb.save ( «sample.xlsx» )

Выход:

We также можно использовать метод append () для добавления нескольких данных в конец листа.

Пример:

Python3

import openpyxl

wb = openpyxl.load_workbook ( "образец. Xls)

лист = wb.активный

данные = (

( 1 , 2 , 3 ),

( 4 , 5 , 6 )

)

для строки в данные:

лист.append (row)

wb.save ( 'sample.xlsx' )

Вывод:


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

= Sum () файла Excel.

Пример:

Python3

импорт openpyxl

wb = openpyxl.Рабочая тетрадь ()

лист = wb.active

лист [ 'A1' ] = 200

лист [ 'A2' ] = 300

листа [ 'A3' ] = 400

листа [ 'A4' ] = 500

лист [ 'A5' ] = 600

лист [ 'A7' ] = '= СУММ (A1: A5) '

wb.save ( "sum.xlsx" )

Вывод:

Подробную информацию об арифметических операциях в электронной таблице см. в статье ниже.

Корректировка строк и столбцов

Объекты рабочего листа имеют атрибуты row_dimensions и column_dimensions, которые управляют высотой строк и шириной столбцов. Значения row_dimensions и column_dimensions листа похожи на значения словаря; row_dimensions содержит объекты RowDimension, а column_dimensions содержит объекты ColumnDimension.В row_dimensions можно получить доступ к одному из объектов, используя номер строки (в данном случае 1 или 2). В column_dimensions можно получить доступ к одному из объектов, используя букву столбца (в данном случае A или B).

Пример:

Python3



импорт openpyxl

wb = openpyxl. = вб.активный

лист. ячейка (строка = 1 , столбец = 1 ) .значение = 'привет'

лист. Ячейка (строка = 2 , столбец = 2 ) .значение = «каждый»

лист.row_dimensions [ 1 ] .height = 70

sheet.column_dimensions [ 'B' ] .width = 20

wb.save ( 'sample.xlsx' )

Вывод:

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

Прямоугольную область ячеек можно объединить в одну ячейку с помощью merge_cell () листовой метод.Аргумент функции merge_cells () - это одна строка из левых верхних и правых нижних ячеек прямоугольной области, которую нужно объединить.

Пример:

Python3

импорт openpyxl

wb = openpyxl.Workbook ()

3.

лист.merge_cells ( 'A2: D4' )

лист.ячейка (строка = 2 , столбец = 1 ) .value = «Двенадцать ячеек соединяются вместе».

лист.merge_cells ( 'C6: D6' )

лист. Ячейка (строка = 6 , столбец = 6 ) .value = 'Две ячейки слияния.'

wb.save ( ' sample.xlsx ' )

Выход:

Unmerge Cells ) листовой метод.

Пример:

Python3



импорт openpyxl

wb = openpyxl.load_workbook ( 'sample.xlsx' )

лист = wb.active

лист.unmerge_cells ( 'A2: D4' )

лист.unmerge_cells ( 'C6: D6' )

wb.save ( 'sample.xlsx' )

Выходные данные :

Настройка стиля шрифта

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

Пример:

Python3

импорт openpyxl

из openpyxl.styles import Font

0

wb = openpyxl.Workbook ()

лист = wb.active

лист.ячейка (строка = 1 , столбец = 1 ) .value = "GeeksforGeeks"

лист. ячейка (строка = 1 , столбец = 1 ). Font = Шрифт (размер = 24 )

лист. Ячейка (строка = 2 , столбец = 2 ).значение = "GeeksforGeeks"

лист. ячейка (строка = 2 , столбец = 2 ). font = Font ( размер = 24 , курсив = True )

лист. ячейка (строка = 3 , столбец = 3 ).значение = "GeeksforGeeks"

лист. ячейка (строка = 3 , столбец = 3 ). font = Font ( размер = 24 , полужирный = True )

лист. ячейка (строка = 4 , столбец = 4 ).значение = "GeeksforGeeks"

лист. ячейка (строка = 4 , столбец = 4 ). font = Font ( размер = 24 , имя = 'Times New Roman' )

wb.save ( 'sample.xlsx' )

Выход:

Подробную информацию о настройке строк и столбцов см. В статье ниже.

Графики

Диаграммы состоят по крайней мере из одной серии из одной или нескольких точек данных. Сами серии состоят из ссылок на диапазоны ячеек. Для построения диаграмм на листе Excel сначала создайте объекты диаграммы определенного класса диаграммы (например, BarChart, LineChart и т. Д.). После создания объектов диаграммы вставьте в них данные и, наконец, добавьте этот объект диаграммы в объект листа.

Пример 1:



Python3

импорт openpyxl

из openpyxl.диаграмма импорт BarChart, Артикул

wb = openpyxl.Workbook ()

лист = wb.active 5

для i в диапазоне ( 10 ):

лист.приложение ([i])

значения = Ссылка (лист, min_col = 1 , min_row = 1 ,

max_col = 1 , max_row = 10 )

диаграмма = BarChart ()

диаграмма.add_data (values)

chart.title = «BAR-CHART»

chart.x_axis.title = «X_axis.title» 5

chart.y_axis.title = "Y_AXIS"

sheet.add_chart (диаграмма, "E2" )

.сохранить ( "sample.xlsx" )

Вывод:

Пример 2:

Python3

5

03

из openpyxl.chart импорт LineChart, Ссылка

wb = openpyxl.Рабочая книга ()

лист = wb.active

для i в диапазоне ( 10 ):

sheet.append ([i])

значения = Ссылка (лист, min_col = 1 , min_row = 1 ,

max_col = 1 , max_row = 10 )

диаграмма = LineChart ()

диаграммаadd_data (values)

chart.title = "LINE-CHART"

chart.x_axis.title = "X-AX3IS"

chart.y_axis.title = "Y-AXIS"

sheet.add_chart (диаграмма, "E2" )

вб.save ( "sample.xlsx" )

Вывод:

Подробную информацию о построении графиков в Excel с использованием Python см. в следующих статьях.

Добавление изображений

Для импорта изображений внутри нашего рабочего листа мы будем использовать openpyxl.drawing.image.Image. Метод является оболочкой для метода PIL.Image, находящегося в библиотеке PIL (подушка). В связи с этим для использования этого метода необходимо установить библиотеку PIL (подушка).

Используемое изображение:

Пример:

Python3

import openpyxl

from openpyxl.drawing.image

Image import

wb = openpyxl.Workbook ()

лист = wb.активный

лист.приложение ([ 10 , 2010 , «Компьютерщики» , 4 , «жизнь» ])

img = Изображение ( "geek.jpg" )

sheet.add_image (img, 'A2' )

вб.save ( 'sample.xlsx' )

Вывод:

Подробную информацию о добавлении изображений см. в статье ниже.

Дополнительные возможности Excel с использованием Python


Ресурсы Python для работы с Excel

Этот сайт содержит указатели на лучшую доступную информацию о работе с файлами Excel на языке программирования Python.

Чтение и запись файлов Excel

Существуют пакеты python для работы с файлами Excel, которые будут работать на любой платформе Python и не требуют использования Windows или Excel. Они быстрые, надежные и открытые:

openpyxl

Рекомендуемый пакет для чтения и записи файлов Excel 2010 (например, .xlsx)

Скачать | Документация | Bitbucket

xlsxwriter

Альтернативный пакет для записи данных, форматирования информации и, в частности, диаграмм в формате Excel 2010 (то есть:.xlsx)

Скачать | Документация | GitHub

pyxlsb

Этот пакет позволяет читать файлы Excel в формате xlsb .

Скачать | GitHub

pylightxl

Этот пакет позволяет читать файлы xlsx и xlsm и записывать файлы xlsx .

Скачать | Документация | GitHub

XLRD

Этот пакет предназначен для чтения данных и форматирования информации из старых файлов Excel (например:.xls)

Скачать | Документация | GitHub

xlwt

Этот пакет предназначен для записи данных и информации о форматировании в старые файлы Excel (например, .xls)

Скачать | Документация | Примеры | GitHub

xlutils

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

NB: В общем, эти варианты использования теперь покрываются openpyxl!

Скачать | Документация | GitHub

Написание надстроек Excel

Следующие продукты можно использовать для написания надстроек Excel на Python.В отличие от пакетов чтения и записи, они требуют установки Microsoft Excel.

PyXLL

PyXLL - это коммерческий продукт, который позволяет писать надстройки Excel на Python без VBA. Функции Python могут быть представлены как функции рабочего листа (UDF), макросы, меню и панели инструментов ленты.

Домашняя страница | Особенности | Документация | Скачать

xlwings

xlwings - это библиотека с открытым исходным кодом для автоматизации Excel с помощью Python вместо VBA, работающая в Windows и macOS: вы можете вызывать Python из Excel и наоборот и писать UDF на Python (только для Windows).xlwings PRO - это коммерческое дополнение с дополнительными функциями.

Домашняя страница | Документация | GitHub | Скачать

Список рассылки / дискуссионная группа

Существует группа Google, посвященная работе с файлами Excel в Python, включая перечисленные выше библиотеки, а также управление приложением Excel через COM.

Коммерческая застройка

Следующие компании могут предоставить разработку коммерческого программного обеспечения и консультации и являются специалистами по работе с файлами Excel на Python:

Как импортировать файл Excel в Python с помощью Pandas

Вы можете легко импортировать файл Excel в Python, используя Pandas .Для достижения этой цели вам потребуется read_excel .

В этом кратком руководстве вы увидите шаги по импорту файла Excel в Python на простом примере.

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

 импортировать панд как pd

df = pd.read_excel (r'Путь, где хранится файл Excel \ File name.xlsx ')
печать (df)
 

Обратите внимание, что для более ранней версии Excel вам может потребоваться расширение файла «xls»

.

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

 импортировать панд как pd

df = pd.read_excel (r'Путь, где хранится файл Excel \ File name.xlsx ', sheet_name =' имя вашего листа Excel ')
печать (df)
 

Давайте теперь рассмотрим пример, который включает данные, которые нужно импортировать в Python.

Данные для импорта в Python

Предположим, у вас есть следующая таблица, сохраненная в Excel (где имя файла Excel - « Product List »):

Продукт Цена
Настольный компьютер 700
Таблетка 250
Принтер 120
Ноутбук 1200

Как бы вы затем импортировали указанные выше данные в Python?

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

шагов для импорта файла Excel в Python с использованием Pandas

Шаг 1. Сохраните путь к файлу

Во-первых, вам нужно записать полный путь, по которому файл Excel хранится на вашем компьютере.

Например, предположим, что файл Excel хранится по следующему пути:

C: \ Users \ Ron \ Desktop \ Product List.xlsx

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

Не забудьте указать имя файла (в нашем примере это «Список продуктов», выделенное синим цветом). Вам также необходимо указать расширение файла Excel (в нашем случае это «.xlsx», как выделено зеленым).

Шаг 2. Примените код Python

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

 импортировать панд как pd

df = pd.read_excel (r'C: \ Users \ Ron \ Desktop \ Product List.xlsx ') # поместите "r" перед строкой пути для адресации специального символа, такого как' \ '. Не забудьте указать имя файла в конце пути + '.xlsx'
печать (df)
 

Шаг 3. Запустите код Python, чтобы импортировать файл Excel

Запустите код Python (настроенный на ваш путь), и вы получите следующий набор данных:

  Цена товара
0 Настольный компьютер 700
1 таблетка 250
2 Принтер 120
3 Ноутбук 1200
  

Обратите внимание, что мы получили те же результаты, что и те, которые были сохранены в файле Excel.

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

ImportError: Отсутствует необязательная зависимость «xlrd»

Затем вы можете использовать подход установки PIP для установки openpyxl для. xlsx файлов:

 pip установить openpyxl
 

Необязательный шаг: выбор подмножества столбцов

А что, если вы хотите выбрать определенный столбец или столбцы из файла Excel?

Например, что, если вы хотите выбрать только столбец Продукт ? В этом случае вы можете указать это имя столбца, как показано ниже:

 импортировать панд как pd

данные = pd.read_excel (r'C: \ Users \ Ron \ Desktop \ Product List.xlsx ')
df = pd.DataFrame (данные, столбцы = ['Продукт'])
печать (df)
 

Запустите код (после настройки пути к файлу), и вы получите только столбец Продукт:

  Товар
0 Настольный компьютер
1 таблетка
2 Принтер
3 Ноутбук
  

Вы можете указать дополнительные столбцы, разделив их имена запятыми, поэтому, если вы хотите включить столбцы «Продукт» и «Цена», вы можете использовать следующий синтаксис:

 импортировать панд как pd

данные = pd.read_excel (r'C: \ Users \ Ron \ Desktop \ Product List.xlsx ')
df = pd.DataFrame (данные, столбцы = ['Продукт', 'Цена'])
печать (df)
 

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

Заключение

Вы только что видели, как импортировать файл Excel в Python с помощью Pandas.

Иногда вам может потребоваться импортировать файл CSV в Python. Если это так, вы можете проверить следующий учебник, в котором объясняется, как импортировать файл CSV в Python с помощью Pandas.

Вы также можете проверить документацию Pandas, чтобы узнать больше о различных параметрах, которые вы можете применить в отношении read_excel.

Python Excel - Руководство по чтению / записи файлов Excel в Python

Python excel - это место для решения следующих задач

  • , если вы хотите читать файлы Excel на Python, используя openpyxl или xlrd
  • хотите создать файлы Excel, прочитать или изменить заголовок листов, записать в файл Excel
  • подсчет, добавление или удаление листов в книге Excel
  • изменить содержимое ячейки, записывая числа, текст или формулу в ячейку
  • хотите сохранить файл Excel, сохранить с другим именем (Сохранить как), сделать его копию
  • применить настройки, размер шрифта и начертание, полужирный, курсив
  • изменить ширину или высоту или строки и столбцы, объединить не объединенные ячейки и т. Д.
  • и другие задачи, связанные с python excel openpyxl xlrd xlswriter

Python Excel Автоматизация

Если вы хотите читать, писать и манипулировать (копировать, вырезать, вставлять, удалять или искать элемент и т. Д.) Файлы Excel на Python с простыми и практичными примерами, я предлагаю вам увидеть это просто и по делу. Курс Excel Openpyxl с примерами работы с файлами MS Excel в Python. В этом видеокурсе показано, как эффективно управлять файлами Excel и автоматизировать задачи.

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

Отношения Python excel процветают с каждым днем. Сначала я хочу задать простой вопрос: Какие если автоматизировать: задача чтения данных из файла Excel и запись его в текстовый файл, другой файл Excel, файл SPSS для анализа данных или выполнения данные анализ этих данных с помощью Python Pandas.

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

Мост людей, которые работают в офисе, обычно имеют дело с электронными таблицами программное обеспечение. Конечно, электронная таблица полезна для многих целей. Некоторые из распространенными задачами являются запись последовательных данных в электронную таблицу, например написание имен сотрудников, их заработной платы и других реквизитов. Иногда нам нужно скопировать определенные данные из одного файла в другой. файл.Ваша работа может потребовать просмотра сотен файлов Excel, для поиска и сортировки данных, выбора определенного раздела данных, очистить его, а затем представить в другом виде. Сделано вручную, это может занять дни или недели, но если вы знаете, как работать с файлами Excel на python вы можете написать простой код и все это утомительно скучное все будет сделано в считанные секунды наиболее эффективным образом, пока вы делая глоток кофе. Прекрасная идея, не правда ли? Ну конечно; естественно. Так почему не прочтите это руководство и узнайте некоторые ценные навыки, которые помогут вам в как в краткосрочной, так и в долгосрочной перспективе, делая вашу жизнь менее скучной, менее беспокойный и более захватывающий.Чаще не нужно писать на питоне скрипты или код на Python с нуля, его всегда в изобилии и в свободном доступе, вы просто изменяете его в соответствии с вашими потребностями, и это Это! Чтобы воспользоваться упомянутыми выше преимуществами и многим другим, следите за обновлениями на этот сайт и овладейте навыками доступа к Excel с питон.

Отношения

Python excel очень полезны для анализа данных, для людей, занимающихся интеллектуальным анализом данных, и тех, кто занимается машинным обучение. Большинство данных существует в виде таблиц.Теперь к просмотреть тысячи или миллионы таблиц - непростая задача. И не только просматривать эти файлы, находить полезные данные, просто наблюдение за монитором вашего компьютера затрудняет выполнение этой задачи. Данные ученые могут использовать питон и лото! работа сделана практически в кратчайшие сроки, с намного лучшая эффективность и миллионы ячеек данных из таблица читается, не пропуская ни одной ячейки. Люди не могут эту задачу до такого уровня эффективности, или, если они сделают это, потребуется столько времени, что полезность таких данных может быть устаревшей.Следовательно многие аналитики и специалисты по обработке данных используют Python для своих Задайте себе задачу и наслаждайтесь расслабленным временем в офисе и дома со своей семьей. Делать ты хочешь сделать то же самое ????

Если вы готовы облегчить себе жизнь, прочтите о доступные пакеты python для Excel, указанные ниже, и начинаются с Openpyxl Tutorial, наиболее часто используемый пакет с очень простым интерфейсом и подходит для новички, работающие со всеми типами таблиц Excel. Это стартовая площадка для python excel world


Пакеты Python для Excel

Существуют разные модули Python для работы с файлами Excel xls и xlsx.Ниже представлены лучшие библиотеки Python для работы с электронными таблицами Excel.

Это это библиотека Python, разработанная Эриком Газони и Чарли Кларком для чтения и писать файлы Excel xlsx / xlsm / xltm / xltx без использования Excel программное обеспечение. Это наиболее широко используемая библиотека для целей python-excel. Это проект с открытым исходным кодом, у некоммерческого характера есть свои плюсы и минусы. минусы Однако это хорошая библиотека, чтобы начать практиковаться с Python. и отличиться.

openpyxl - это программа для чтения по умолчанию для Python Pandas.

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

Если вы хотите читать, писать и манипулировать (копировать, вырезать, вставлять, удалять или искать элемент и т. Д.) Файлы Excel на Python с простыми и практичными примерами, я предлагаю вам увидеть это просто и по делу. Курс Excel Openpyxl с примерами работы с файлами MS Excel в Python.В этом видеокурсе показано, как эффективно управлять файлами Excel и автоматизировать задачи.

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

Openpyxl Узнайте, как читать, писать, перемещать, копировать, искать файлы Excel, курс
Учебное пособие по Openpyxl для быстрого обучения

2.XLRD

Это модуль Python для работы с файлами Excel, которые могут работать с Платформы Windows, Linux, а также Mac. Это больше похоже на собственный стиль кодирования Python и очень полезен для доступа ко всем типам excel, если это xls или даже xlsx. Однако он используется только для в целях чтения.

3. xlsxwriter

Это альтернативный модуль Python для записи данных в файл Excel. Это специализируется на форматировании данных, а также может использоваться для диаграмм в Форматы Excel 2010 xlsx. Это замечательный пакет с множеством качеств, которые, если их действительно использовать, могут творить чудеса с точки зрения записи данных и форматирование.

4.xlwt

Библиотека xlwt позволяет разработчикам создавать электронные таблицы, совместимые с Excel 95-2003. Следовательно, мы можем сказать, что его можно использовать для старых файлов. Модуль имеет чистую форму Python и существует как независимый объект. Python программисты любят писать на нем код, потому что он имеет естественный оттенок и вкус.

5. xlutils

Xlutils также является широко используемым пакетом Python, который используется для работы с Файлы Excel. xlutils содержит пакеты xlrd и xlwt, оба собраны вместе, но отделены друг от друга.Следовательно, это Модуль целостного типа очень эффективен при работе с электронными таблицами. Даны ссылки на его документацию и на скачивание пакета. ниже.

4. Работа с файлами Excel

Библиотека, которую мы определили для анализа файлов Excel, - xlrd . Эта библиотека является частью серии библиотек для работы с файлами Excel в Python.

Существуют три основные библиотеки для работы с файлами Excel:

xlrd

Читает файлы Excel

xlwt

Записывает и форматирует файлы Excel

xlutils

Набор инструментов для более сложных операций в Excel (требуется xlrd и xlwt )

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

 pip install xlrd 

Настройте рабочую среду для этого файла Excel, выполнив следующие действия (или что-то подобное, в зависимости от вашей организационной системы):

  1. Создайте папку для работы в Excel.

  2. Создайте новый файл Python с именем parse_excel.py и поместите его в созданную вами папку.

  3. Поместите файл Excel из репозитория книги под названием SOWC 2014 Stat Tables_Table 9.xlsx в ту же папку.

В этой папке введите в терминале следующую команду, чтобы запустить сценарий из командной строки:

 Python parse_excel.py 

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

Чтобы запустить наш скрипт, нам нужно импортировать xlrd и открыть нашу книгу Excel в Python.Сохраняем открытый файл в book переменную:

  импорт   xlrd 

  книга   =   xlrd  .   open_workbook   (  'SOWC 2014 Stat Tables_Table 9.xlsx'  )  

В отличие от CSV, книги Excel могут иметь несколько вкладок или листов. Чтобы получить данные, мы вытащим только лист с нужными нам данными.

Если у вас есть несколько листов, вы можете просто угадать индекс, но это не сработает, если у вас много листов.Итак, вы должны знать о команде book.sheet_by_name ( somename ), где somename - это имя листа, к которому вы хотите получить доступ.

Давайте проверим названия имеющихся у нас листов:

  импорт   xlrd 

  книга   =   xlrd  .   open_workbook   (  'SOWC 2014 Stat Tables_Table 9.xlsx'  ) 

  для   лист   в   книга  .  листов   (): 
      печать   лист  .   наименование  

Лист, который мы ищем, - это Таблица 9 . Итак, поместим это в наш скрипт:

  импорт   xlrd 

  книга   =   xlrd  .   open_workbook   (  'SOWC 2014 Stat Tables_Table 9.xlsx'  ) 
  лист   =   книга  .  sheet_by_name   (  'Таблица 9'  ) 

  печать   лист  

Если вы запустите этот код, он завершится с ошибкой, которая предоставит вам следующую информацию:

  xlrd  .   biffh  .   XLRDError  :   Нет   лист   с именем   <  'Таблица 9'  >  

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

Если вы откроете книгу Excel и выберите имя листа, дважды щелкнув по нему, вы обнаружите, что в конце есть лишнее пространство. Это пространство не отображается пользователям в браузере. В главе 7 мы узнаем, как решить эту проблему в Python. А пока обновите свой код, чтобы отразить пространство.

Измените эту строку:

  лист   =   книга  .  sheet_by_name   (  'Таблица 9'  )  

к этому:

  лист   =   книга  .   sheet_by_name   (  'Таблица 9'  )  

Теперь, если мы запустим наш скрипт, он должен работать. Вы увидите следующий результат:

  

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

  печать   dir   (  лист  )  

В возвращенном списке вы увидите метод под названием nrows .Мы будем использовать этот метод для перебора всех строк. Если мы напишем print sheet.nrows , будет возвращено общее количество строк.

Попробуйте сейчас:

  печать   лист  .   строки  

Вы должны были получить назад 303 . Нам нужно перебрать каждую строку, а это значит, что нам нужен цикл для . Как мы узнали в разделе «Как импортировать данные CSV», цикл для выполняет итерацию по элементам в списке, поэтому нам нужно превратить 303 в список, который можно выполнить более 303 раз.Для этого воспользуемся функцией range .

С добавлением функции range мы можем преобразовать 303 в список, который цикл для может повторяться, наш сценарий должен выглядеть следующим образом:

  импорт     xlrd  
  
   книга     =     xlrd  .   open_workbook   (  '  SOWC 2014 Stat Tables_Table 9.xlsx   ' )  
   лист     =     книга  .   sheet_by_name   (  '  Таблица 9  '  )  
  
   для     i     в     диапазоне   (  лист  .   ряды  )  :    
     печать     i    

Зацикливается на индексе i в диапазоне (303) , который будет списком из 303 целых чисел, увеличивающихся на единицу.

Выводит и , которые будут числами от 0 до 302.

Отсюда нам нужно выполнить поиск по каждой строке, чтобы извлечь содержимое каждой строки, а не просто печатать число. Чтобы выполнить поиск, мы будем использовать и в качестве ссылки на индекс, чтобы взять n-ю строку.

Чтобы получить значения каждой строки, мы будем использовать row_values ​​, который был другим методом, возвращенным ранее dir (sheet) .Из документации row_values ​​ видно, что метод ожидает номер индекса и возвращает соответствующие значения строки. Обновите цикл для , чтобы отразить это, и перезапустите свой скрипт:

  для     i     в диапазоне       (  лист  .   строки  )  :  
     печать     лист  .  row_values ​​  (  i  )    

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

Когда вы запустите этот код, вы увидите список для каждой строки. Ниже представлена ​​часть данных, которые вы увидите:

  [  ' ,   u  ' ТАБЛИЦА 9.ЗАЩИТА ДЕТЕЙ ' ,  '  ,   ' ,  '  ,   ' ,  '  ,   ' ,   ' ,  '  ,   ' ,  '  , 
  ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ' ,  '  ,   ' ,  '  ,   ' ,  '  ,   ' ,  ' ' ,  '  ,   ' ,  '  ,   ' , 
  ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ' ,  '  ,   ' ,  '  ,   ' ,  '  ] 
  [  ' ,  '  ,   u   'ТАБЛИЦА 9.PROTECTION DE L   \ u2019   ENFANT ' ,  '  ,   ' ,  '  ,   ' ,  '  ,   ''  , 
  ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ' ,  '  ,   ' ,  '  ,   ' ,  '  ,   ' ,  ' ' ,  '  ,   ' ,  '  ,   ' , 
  ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ' ,  '  ,   ' ,  '  ,   ' ,  '  ,   ' ,  ' « ,  » » ] 
  [  ' ,  '  ,   ' ,   u  ' ТАБЛА 9.PROTECCI   \ xd3   N INFANTIL ' ,  '  ,   ' ,  '  ,   ' ,  '  ,   ' ,  '  , 
  ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ' ,  '  ,   ' ,  '  ,   ' ,  '  ,   ' ,  ' ' ,  '  ,   ' ,  '  ,   ' , 
  ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ' ,  '  ,   ' ,  '  ,   ' ,  '  ,   ' ] 
  [  ' ,  '  ,   ' ,  '  ,   ' ,  '  ,   '  ,   ' '   ' '   ' ,  '  ,   ' ,  '  ,   ' ,   ''  ,   ''  ,   ''  ,   ''  ,   ''  , 
  ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ' ,  '  ,   ' ,  '  ,   ' ,  '  ,   ' ,  ' ' ,  '  ,   ' ,  '  ,   ' , 
  " ,  "  ,   " ,  "  ,   " ,  "  ] 
  [  ' ,   u  ' Страны и регионы ' ,  '  ,   ' ,   u  ' Детский труд (%) +   \ n   2005   \ u2013   2012 * ' , 
  ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   u   'Детский брак (%)   \ n   2005   \ u2013   2012 * ' ,  '  ,   ' ,  '  , 
  u   'Регистрация рождений (%) +   \ n   2005   \ u2013   2012 *'  ,   ' ,   u  ' Калечащие операции на женских половых органах / 
  резка   ( %  )   +  \  n2002  \  u20132012   *   ',' ',' ',' ',' ',' ', u'   Обоснование   из   жена 
  избиение   ( %  )  \  n   2005  \  u20132012   *   ',' ',' ',' ', u'   Жестокие   дисциплина 
  ( %  )   +  \  n2005  \  u20132012   *   ',' ',' ',' ',' ',' ',' ',' ',' ', '', '', '', '', '', 
  " ,  "  ,   " ,  "  ]  

Теперь, когда мы видим каждую строку, нам нужно извлечь нужную информацию.Чтобы помочь нам определить, какая информация нам нужна и как ее получить, гораздо проще открыть файл в программе для отображения файлов Excel, например Microsoft Excel в Windows или Numbers на Mac. Если вы посетите вторую вкладку в электронной таблице, вы заметите довольно много строк заголовков.

Примечание

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

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

Для этого упражнения мы извлечем статистику детского труда и детских браков. Ниже приведен один из способов организации данных - мы будем использовать его в качестве примера для работы над:

  { 
     u   '  Афганистан  '  :     { 
     '  child_labor  '  :     { 
     '  женский  '  :     [  9.6  ,     ' '  ]  ,    
     '  с наружной резьбой  '  :     [  11,0  ,     ' '  ]  ,  
     '  всего  '  :     [  10,3  ,     ' '  ]  }  ,  
     '  детский брак  '  :     { 
     '  женатый_15  '  :     [  15.0  ,     ' '  ]  ,  
     '  женатый_18  '  :     [  40,4  ,     ' '  ]  
    }  
    }  ,  
     u   '  Албания  '  :     { 
     '  child_labor  '  :     { 
     '  женский  '  :     [  9.4  ,     и   '   '  ]  ,  
     '  с наружной резьбой  '  :     [  14,4  ,     u   '   '  ]  ,  
     '  всего  '  :     [  12.0  ,     u   '   '  ]  }  ,  
     '  детский брак  '  :     { 
     '  женатый_15  '  :     [  0,2  ,     ' '  ]  ,  
     '  женатый_18  '  :     [  9.6  ,     ' '  ]  
    }  
    }  ,  
    .  .  .  
  }  

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

Наконечник

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

Есть две конструкции Python, которые мы собираемся использовать для извлечения данных. Первый метод, который мы будем использовать, - это вложенный цикл для , который представляет собой цикл для внутри другого цикла для .Это часто используется, когда у вас есть x строк, содержащих y объектов. Для доступа к каждому объекту вам понадобится цикл для для каждой строки, затем еще один цикл для для каждого объекта. Мы также использовали вложенный цикл для в примере в главе 3.

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

  для     i     в     xrange   (  лист  .  строки  )  :  
     ряд ​​    =     лист  .   row_values ​​  (  i  )    
     для     ячейки     в     ряд ​​ :    
     печать     ячейка    

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

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

Выводит значение ячейки.

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

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

Сбросьте для цикла , чтобы он выглядел как код, показанный здесь:

  количество     =     0  
   для     i     в     xrange   (  лист  .   строки  )  :  
     если     количество     <    10  :  
     ряд ​​    =     лист  .  row_values ​​  (  i  )  
     печать     i  ,     ряд ​​   
  
     счетчик     +   =     1  

Выводит i и строку, чтобы мы могли видеть, какой номер строки содержит какую информацию

Теперь, если мы вернемся к тому, как мы хотим, чтобы наш окончательный результат выглядел, нам действительно нужно выяснить, где начинаются названия стран.Помните, что названия стран - это первые ключи нашего выходного словаря:

  {
      u   «Афганистан»  :   {  ...  }, 
      u   «Албания»  :   {  ...  }, 
      ... 
 }  

Если вы запустите свой сценарий со счетчиком в нем, где count <10 , вы увидите из вывода, что мы еще не достигли строки, в которой начинаются названия стран.

Поскольку мы пропускаем несколько строк, чтобы перейти к интересующим нас данным, мы пытаемся определить, номер какой строки нам понадобится для начала сбора данных. Из нашей предыдущей попытки мы знаем, что названия стран начинаются после строки 10. Но как мы можем определить, с чего начать?

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

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

Если вы смогли заставить это работать, ваш код должен выглядеть примерно так:

  количество     =     0  
  
   для     i     в     xrange   (  лист  .  строки  )  :  
     если     количество     <    20  :    
     если     i    >   =     14  :    
     ряд ​​    =     лист  .  row_values ​​  (  i  )  
     печать     i  ,     ряд ​​ 
     количество     +   =     1  

Эта строка будет перебирать первые 20 строк, чтобы определить, с какой строки начинаются названия стран.

Этот оператор if запускает вывод в точке, где появляются строки страны.

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

  14   [  ' ,   u  ' Афганистан ' ,   u  ' Афганистан ' ,   u  ' Afganist   \ xe1   n '  ,   10,3  ,   ''  ,   11,0  ,   ''  , 
  9.6  ,   ' ,  ' 15,0  ,   ' ,   40,4  ,  ' ' ,   37,4  ,  '  ,   u   '  \ u2013  '  ,   ' ,   u  '   \ u2013   ' ,  '  , 
  u   '  \ u2013  '  ,   ' ,   u  '   \ u2013   ' ,  '  ,   90.2  ,   ''  ,   '' 74,4  ,   ''  ,   74,8  ,   ''  ,   74,1  ,   ' ,   ' ,  '  , 
  ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ' ,  '  ,   ' ] 
  15   [  ' ,   u   «Албания»  ,   u   «Албания»  ,   u   «Албания»  ,   12.0  ,   u   ' ,   14,4  ,   u  '  ,   9,4  , 
  u   ' ,   0,2  ,  '  ,   9,6  ,   ' ,   98,6  ,  '  ,   u   '  \ u2013  '  ,   ' ,   u  '   \ u2013   ' ,  '  ,   u   '   \ u2013   ' , 
  ''  ,   36.4  ,   ''  ,   '' 29,8  ,   ''  ,   75,1  ,   ''  ,   78,3  ,   ' ,   71,4  ,   ' ,  '  ,   ' ,  '  ,   ' ,  '  ,   ' , 
  " ,  "  ,   " ,  "  ,   " ,  "  ] 
  16   [  ' ,   u  ' Algeria ' ,   u  ' Alg   \ xe9   rie ' ,   u  ' Argelia ' ,   4.7  ,   u   'y'  ,   5.5  ,   u   'y'  ,   3,9  , 
  u   'y'  ,   0,1  ,   ''  ,   1,8  ,   ''  ,   99,3  ,   ' ,   u   '  \ u2013  '  ,   ' ,   u  '   \ u2013   ' ,  '  ,   u   '  \ u2013  '  ,   ' , 
  u   '  \ u2013  '  ,   ' ,   67.9  ,   ' ,   87,7  ,  '  ,   88,8  ,   ''  ,   86,5  ,   ' ,   ''  ,   ''  ,   ''  ,   ''  ,   ''  ,   ''  , 
  " ,  "  ,   " ,  "  ,   " ,  "  ] 
 ....   далее  

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

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

Давайте добавим словарь в наш код, а затем вытащим название страны из каждой строки и добавим его в качестве ключа в наш словарь.

Обновите свой для цикла , чтобы отразить это:

  количество     =     0  
   данные     =     { }    
  
   для     i     в     xrange   (  лист  .  строки  )  :  
     если     количество     <    10  :  
     если     i    >   =     14  :  
     ряд ​​    =     лист  .  row_values ​​  (  i  )  
     страна     =     строка   [  1  ]    
     данные   [  страна  ]     =     { }    
     количество     +   =     1  
  
   печать     данные    

Это создает пустой словарь для хранения наших данных.

row [1] извлекает страну из каждой строки, которую мы перебираем.

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

Это выводит данные, чтобы мы могли видеть, как они выглядят.

На этом этапе ваш результат должен выглядеть примерно так:

  {  и   «Афганистан»  :   {},   и   «Албания»  :   {},   и   «Ангола»  :   {} ,   u   «Алжир»  :   {}, 
  u   «Андорра»  :   {},   u   «Австрия»  :   {},   u   «Австралия»  :   {},   u   «Антигуа и Барбуда»  :   {}, 
  u   «Армения»  :   {},   u   «Аргентина»  :   {}}  

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

Примечание

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

Во-первых, давайте создадим пустую версию нашей структуры данных, в которой мы можем хранить наши данные. Давайте также удалим наш счетчик, поскольку мы знаем, что строки данных начинаются со строки 14. Поскольку мы знаем, что xrange может принимать начальную и конечную точки, мы можем начать наш счет с 14 и заканчивать в конце файла.Давайте взглянем на наш обновленный код:

.
  данные     =     { }  
  
   для     i     в     xrange   (  14  ,     лист  .   ряды  )  :    
     ряд ​​    =     лист  .  row_values ​​  (  i  )  
     страна     =     строка   [  1  ]  
  
     данные   [  страна  ]     =     {   
     '  child_labor  '  :     {   
     '  всего  '  :     [ ]  ,    
     '  штекер  '  :     [ ]  ,  
     '  внутренняя часть  '  :     [ ]  ,  
    }  ,  
     '  детский брак  '  :     { 
     '  женатый_15  '  :     [ ]  ,  
     '  женатый_18  '  :     [ ]  ,  
    }  
    }  
  
   печать     данные   [  '  Афганистан  '  ]    

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

Эта строка расширяет словарь до нескольких строк для заполнения других точек данных.

Это создает ключ child_labor и устанавливает его равным другому словарю.

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

Выводит значения, связанные с ключом Афганистан .

Наши выходные данные для Афганистан выглядят следующим образом:

  {
      'child_labor'  :   {  'total'  :   [],   'мужской'  :   [],   'женский'  :   []}, 
      'child_marriage'  :   {  'wife_by_18'  :   [],   'wife_by_15'  :   []} 
 }  

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

    данные   [  страна  ]     =     { 
     '  child_labor  '  :     { 
     '  всего  '  :     [  строка   [  4  ]  ,     строка   [  5  ]   ]  ,    
     '  наружный  '  :     [  ряд ​​  [  6  ]  ,     ряд ​​  [  7  ]  ] ]  ,  
     '  гнездо  '  :     [  ряд ​​  [  8  ]  ,     ряд ​​  [  9  ]  ]   ]  ,  
    }  ,  
     '  детский брак  '  :     { 
     '  женатый_15  '  :     [  строка   [  10  ]  ,     строка   [  11  ]   ]  ,  
     '  женатый_18  '  :     [  строка   [  12  ]  ,     строка   [  13  ]   ]  ,  
    }  
    }  

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

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

  {
    'child_labor'  :   {  'женский'  :   [  9,6  ,   ''  ],   «мужской»  :   [  11.0  ,   ' ],  ' всего ' :   [  10,3  ,  '  ]}, 
    'child_marriage'  :   {  'wife_by_15'  :   [  15.0  ,   ''  ],   'женат_by_18'  :   [  40,4  ,   " ]}} 
 }  
Предупреждение

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

Наконец, для предварительного просмотра наших данных мы можем использовать pprint вместо оператора print . В сложных структурах данных (например, в словарях) это значительно упрощает просмотр вывода. Добавьте следующее в конец файла, чтобы просмотреть данные в отформатированном виде:

  импорт     pprint    
   pprint  .  pprint   (  данные  )    

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

Передает данные в функцию pprint.pprint () .

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

Если вы посмотрите на электронную таблицу, вы должны заметить, что последняя строка для стран - это Зимбабве. Итак, мы хотим найти, когда страна будет равна 'Зимбабве' , и выйти оттуда. Для выхода мы добавляем в наш код разрыв , таким образом мы преждевременно прерываем цикл на , чтобы продолжить выполнение остальной части скрипта.Добавим это как точку остановки. В конце цикла для добавьте следующее и перезапустите свой код:

    если     страна     ==     '  Зимбабве  '  :    
     перерыв    

Если страна равна Зимбабве…

Выход из цикла для .

Предупреждение

После добавления разрыва возникла ли ошибка NameError: имя "страна" не определено ? Если да, проверьте свой отступ. Оператор if должен иметь отступ на четыре пробела, чтобы он находился в цикле for .

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

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

Ваш сценарий теперь должен выглядеть примерно так:

  "" "
    Это скрипт для анализа данных о детском труде и детских браках.  
    Файл Excel, используемый в этом скрипте, можно найти здесь:
        http://www.unicef.org/sowc2014/numbers/
"" " 
  
   импорт     xlrd  
   книга     =     xlrd  .  open_workbook   (  '  SOWC 2014 Stat Tables_Table 9.xlsx  '  )  
  
   лист     =     книга  .   sheet_by_name   (  '  Таблица 9  '  )  
  
   данные     =     { }  
   для     i     в     xrange   (  14  ,     лист  .  строки  )  :  
     # Начать с 14-й строки, потому что именно там начинаются данные о стране  
  
     ряд ​​    =     лист  .   row_values ​​  (  i  )  
  
     страна     =     строка   [  1  ]  
  
     данные   [  страна  ]     =     { 
     '  child_labor  '  :     { 
     '  всего  '  :     [  строка   [  4  ]  ,     строка   [  5  ]  ] ]  ,  
     '  наружный  '  :     [  ряд ​​  [  6  ]  ,     ряд ​​  [  7  ]  ] ]  ,  
     '  гнездо  '  :     [  ряд ​​  [  8  ]  ,     ряд ​​  [  9  ]  ]   ]  ,  
    }  ,  
     '  детский брак  '  :     { 
     '  женатый_15  '  :     [  строка   [  10  ]  ,     строка   [  11  ]   ]  ,  
     '  женатый_18  '  :     [  строка   [  12  ]  ,     строка   [  13  ]   ]  ,  
    }  
    }  
  
     если     страна     ==     '  Зимбабве  '  :  
     перерыв  
  
   импорт     pprint  
   pprint  .  pprint   (  данные  )    

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

Это однострочный комментарий, поясняющий, почему мы начинаем со строки 14, а не раньше.

Мы можем и должны удалить эти строки по мере того, как мы переходим от простого анализа данных к анализу данных.

На этом этапе у нас есть выходные данные, аналогичные данным из предыдущей главы. В следующей главе мы сделаем еще один шаг и проанализируем те же данные из PDF.

Инструменты для работы с Excel и Python

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

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

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

Ниже представлена ​​матрица , в которой описаны различные функции пакетов для вызова Python из Excel.

Создание интерактивных инструментов Python с использованием Excel в качестве внешнего интерфейса

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

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

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

См. Таблицу характеристик вместе с пакетами, которые их поддерживают ниже .

PyXLL - надстройка Python для Excel


PyXLL в настоящее время является единственным пакетом, который позволяет разработчикам писать полнофункциональные надстройки Excel на Python.Он встраивает интерпретатор Python в Excel, чтобы его можно было использовать в качестве полной замены VBA. Концептуально вы можете думать об этом как о чем-то вроде Excel-DNA для C #, за исключением того, что он динамический и импортирует ваш код Python во время работы Excel, поэтому нет надстройки для сборки и нет необходимости перезапускать Excel при изменении вашего Код Python.

См. Возможности PyXLL

Используя PyXLL, вы можете написать код Python для создания:

Для написания пользовательской функции с помощью PyXLL требуется, чтобы декоратор «xl_func» применялся к обычной функции Python:

из pyxll import xl_func

@xl_func
def py_test (a, b, c):
    возврат (a + b) * c
 

PyXLL имеет файл конфигурации (pyxll.cfg), который содержит список всех модулей, которые будут импортированы при запуске Excel. Добавив модуль выше в список в этом файле, PyXLL предоставит Excel функцию «py_test» как функцию, определяемую пользователем, которая будет вызываться из рабочего листа.

Некоторые дополнительные функции PyXLL:

  • Функции массива

    PyXLL может работать с массивами данных и поддерживает типы NumPy и Pandas. Функции, возвращающие массивы, могут автоматически изменять размер, чтобы избежать ошибок при изменении размеров результата.

  • Данные в реальном времени

    Потоковая передача данных в реальном времени в Excel из Python с функцией данных в реальном времени PyXLL.

  • Object Cache

    Для функций, которые возвращают объекты Python, а не простые типы (строки, числа и т. Д.) Или массивы (массивы NumPy и Pandas DataFrames или Series) PyXLL имеет умный «объектный кеш». Идентификаторы объекта возвращаются, и при передаче в другую функцию идентификатор используется для поиска исходного объекта. Это позволяет передавать объекты между функциями Python с использованием формул Excel.Это может быть очень полезно при работе с большими наборами данных, когда весь набор данных не обязательно должен быть виден в Excel сразу, а вместо этого передается между функциями Python - например, при загрузке большого набора данных и выполнении некоторых операций агрегирования. и представление совокупных результатов в Excel.

  • Объектная модель Excel

    PyXLL имеет интеграцию с основными пакетами COM, pywin32 и comtypes, что позволяет использовать всю объектную модель Excel из макросов и функций Excel, написанных с помощью PyXLL.Это позволяет делать все, что можно сделать в VBA, на Python. Он также интегрируется с xlwings, так что API xlwings также можно использовать для чтения и записи из Excel.

Дополнительные функции см. В матрице функций ниже.

Домашняя страница | Скачать PyXLL | Документация

Скачать PyXLL

pywin32 / comtypes


Весь API Excel (или объектная модель) предоставляется через COM. Все, что может быть написано как макрос VBA, также может быть написано с использованием API Excel COM в Python с использованием pywin32 или comtypes.

API Excel COM можно использовать вне Excel (например, из запущенной командной строки Python, сценария или записной книжки Jupyter). Если вы уже знаете, как что-то делать в VBA, то выполнение эквивалентной задачи в Python через COM API, как правило, довольно просто. Вызов подпрограммы с использованием pywin32 или comtypes из Excel (например, с помощью кнопки на панели ленты, пункта меню или макроса) можно выполнить с помощью PyXLL.

Объектная модель Excel задокументирована здесь https://docs.microsoft.com/en-gb/office/vba/api/overview/Excel/object-model, и как только вы поймете основные различия между VBA и Python, вы обнаружите, что это довольно просто перевести между ними.

Для демонстрации рассмотрим пример. Предположим, у вас есть следующий код VBA и вы хотите перевести его на Python:

 
Дополнительный макрос1 ()
    Диапазон ('B11: K11'). Выберите
    Selection.AutoFill Назначение: = Диапазон ('B11: K16'), Тип: = xlFillDefault
    Столбцы ("B: K"). Выберите
    Selection.ColumnWidth = 4
Конец подписки
 

Прежде всего мы должны получить объект Excel Application на Python. Этот код можно запустить из интерактивной подсказки Python или записной книжки Jupyter, или даже запустить внутри самого Excel с помощью PyXLL.

 
из win32com.client.gencache импорт EnsureDispatch

# Получить COM-объект приложения Excel
xl = EnsureDispatch ('Excel.Приложение')
 

Теперь у нас есть объект Application, мы можем вызвать метод Range таким же образом, как и код VBA выше. Первое важное отличие, которое следует отметить, заключается в том, что в VBA простой вызов ‘Range (). Select’ вызывает метод Select, но в Python нам нужно использовать ‘()’ для вызова метода.

 
xl.Range ('B11: K11'). Выбрать ()
 

В следующей строке требуется константа «xlFillDefault».Для доступа к той же константе в Python мы используем модуль win32com.client.constants. Также обратите внимание, что в VBA круглые скобки не используются при вызове метода объекта, но в Python они есть.

 
из констант импорта win32com.client

xl.Selection.AutoFill (Назначение = xl.Range ('B11: K16'), Type = constants.xlFillDefault)
 

Остальной код похож на те строки, которые мы только что перевели, поэтому вся функция выглядит как

 
от win32com.client.gencache импорт EnsureDispatch
из констант импорта win32com.client

def Macro1 ():
    xl = EnsureDispatch ('Excel.Приложение')
    xl.Range ('B11: K11'). Выбрать ()
    xl.Selection.AutoFill (Назначение = xl.Range ('B11: K16'), Type = constants.xlFillDefault)
    xl.Columns ('B: K'). Выбрать ()
    xl.Selection.ColumnWidth = 4
 

Переведенный код Python очень похож на исходный код VBA! Автоматизация задач в Excel или просто интерактивный вызов их таким образом из записной книжки Jupyter может быть очень мощным инструментом.

Этот код Python может быть вызван из Excel как макрос с помощью декоратора PyXLL «@xl_macro». Вместо использования EnsureDispatch следует использовать pyxll.xl_app (), чтобы гарантировать, что при наличии нескольких запущенных процессов Excel будет возвращен правильный.

xlwings


xlwings предоставляет оболочку для API Excel COM, описанного выше, для упрощения многих общих задач, таких как запись Pandas DataFrames в открытую книгу Excel. Он использует COM-оболочки pywin32 и предоставляет вам доступ к ним, поэтому вы всегда можете перейти к использованию обычного API Excel, если вам это необходимо.

Так же, как pywin32 и comtypes, xlwings может взаимодействовать с Excel из обычного приглашения Python или записной книжки Jupyter. Для вызова кода с использованием xlwings из самого Excel PyXLL предоставляет удобный способ получения объекта Excel Application как объекта xlwings. Это позволяет создавать сценарии Excel на Python и запускать запуск кода с помощью кнопки на ленте или пункта меню. Примером использования может быть кнопка на ленте для извлечения данных из базы данных, создания отчета и записи его прямо в работающий Excel.

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

 
импортировать xlwings как xw

wb = xw.Book ('workbook.xlsx') # Открыть существующую книгу
sheet = wb.sheets ['Sheet1']

# читать и записывать значения из рабочего листа
sheet.range ('A1'). value = 'Foo'
print (sheet.range ('A1'). value)

# Напишите Pandas DataFrames прямо в лист Excel
импортировать панд как pd
df = pd.DataFrame ([[1,2], [3,4]], columns = ['a', 'b'])

дерьмодиапазон ('A1'). значение = df

# Прочитать DataFrame обратно, используя опцию 'expand', чтобы прочитать всю таблицу
sht.range ('A1'). options (pd.DataFrame, expand = 'table'). value
 

xlwings включает способ написания определяемых пользователем функций (UDF) или функций рабочего листа в Python, которые вызываются из формулы в Excel, аналогично определяемым пользователем функциям, предлагаемым PyXLL. Они полагаются на серверный процесс, работающий вне оболочек Excel и VBA, для вызова этого сервера. Это простое решение с некоторыми недостатками, такими как низкая производительность и то, что эти функции доступны только из книги, содержащей оболочки VBA.

DataNitro


DataNitro - еще один API для управления Excel из Python. Неясно, в чем преимущество этого API и существующего и хорошо изученного COM API Microsoft Excel, но он позволяет писать и запускать сценарии, не выходя из Excel. Он имеет элементарную поддержку пользовательских функций (функций рабочего листа), но они работают вне процесса Excel и работают только в том случае, если запущен только один процесс Excel.

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

Матрица функций

для интеграции Python и Excel


Подсказка . Модули
Элемент DataNitro xlwings PyXLL Комментарии
Основные функции рабочего листа DataNitro и xlwings используют внешний процесс Python, xlwings требует кода оболочки VBA
Данные в реальном времени Передача данных в реальном времени в таблицы Excel
Настройка ленты Обеспечьте удобство работы пользователей с помощью настраиваемых ленточных меню
Пользовательские панели задач Интеграция компонентов пользовательского интерфейса Python в Excel
Функции меню Вызов кода Python из меню Excel
Кэш объектов Беспрепятственная передача объектов Python между функциями рабочего листа через кеш объектов
IntelliSense IntelliSense при вводе - PyXLL интегрируется с надстройкой ExcelDNA Intellisense
Потокобезопасные функции рабочего листа Повышение скорости отклика рабочего листа за счет использования пула потоков Excel для одновременного выполнения функций рабочего листа
Асинхронные функции Не блокировать Excel в ожидании длительных функций
Макросы Макросы - это функции, которые могут быть прикреплены к элементам пользовательского интерфейса, например кнопкам, или вызваны из VBA
Сочетания клавиш Сочетания клавиш могут быть назначены макросам с PyXLL
Эквивалентные функции листа макросов Обратный вызов в Excel из функции рабочего листа
Функциональная документация Включить строки документации функции Python в мастер функций Excel
Автоматически изменять размер массивов Функции массива могут автоматически изменять размер
Энергозависимые функции Энергозависимые функции вызываются каждый раз при пересчете рабочего листа
Доступен полный API Excel xlwings использует pywin32, пользователи PyXLL могут выбирать между pywin32, comtypes или xlwings
Перезагрузить без перезапуска Excel можно перезагружать без перезапуска Excel.PyXLL также поддерживает «глубокую перезагрузку», при которой также перезагружаются все зависимости модуля.
Автоматическая перезарядка Автоматическая перезагрузка при внесении изменений в ваш код.
См. Возможности PyXLL Скачать PyXLL

Чтение и письмо Excel

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

OpenPyXL


Для работы с Excel 2010 и новее OpenPyXL - отличный универсальный выбор. Используя OpenPyXL, вы можете читать и записывать файлы xlsx, xlsm, xltx и xltm. В следующем коде показано, как книгу Excel можно записать как файл xlsx с несколькими строками Python.

 
из openpyxl import Workbook
wb = Рабочая тетрадь ()

# возьмите активный лист
ws = wb.активный

# Данные могут быть назначены непосредственно ячейкам
ws ['A1'] = 42

# Также можно добавлять строки
ws.append ([1, 2, 3])

# Сохраняем файл
wb.save ('sample.xlsx')
 

Не путайте OpenPyXL с PyXLL. Они совершенно разные и служат разным целям. OpenPyXL - это пакет для чтения и записи файлов Excel, тогда как PyXLL - это инструмент для создания полнофункциональных надстроек Excel для интеграции кода Python в Excel.

OpenPyXL охватывает более продвинутые функции Excel, такие как диаграммы, стили, форматирование чисел и условное форматирование.Он даже включает в себя токенизатор для анализа формул Excel!

Одна действительно хорошая функция для написания отчетов - это встроенная поддержка данных NumPy и Pandas. Чтобы написать Pandas DataFrame, все, что требуется, - это включенная функция dataframe_to_rows:

 
из openpyxl.utils.dataframe import dataframe_to_rows

wb = Рабочая тетрадь ()
ws = wb.active

для r в dataframe_to_rows (df, index = True, header = True):
ws.append (r)

wb.save ('pandas_openpyxl.xlsx')
 

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

 
из openpyxl import load_workbook

wb = load_workbook (имя файла = 'book.xlsx')
sheet_ranges = wb ['имена диапазонов']
print (sheet_ranges ['D18']. значение)
 

Возможным недостатком OpenPyXL является то, что он может довольно медленно обрабатывать большие файлы.Если вам нужно писать отчеты с тысячами строк и ваше приложение чувствительно ко времени, то лучше выбрать XlsxWriter или PyExcelerate.

XlsxWriter


Если вам нужно только писать книги Excel, а не читать их, то XlsxWriter - это простой в использовании пакет, который хорошо работает. Если вы работаете с большими файлами или особенно беспокоитесь о скорости, вы можете найти XlsxWriter лучшим выбором, чем OpenPyXL.

XlsxWriter - это модуль Python, который можно использовать для записи текста, чисел, формул и гиперссылок на несколько листов в файле Excel 2007+ XLSX.Он поддерживает такие функции, как форматирование и многие другие, в том числе:

  • 100% совместимые файлы Excel XLSX.
  • Полное форматирование.
  • Объединенные ячейки.
  • Определенные имена.
  • Графики.
  • Автофильтры.
  • Проверка данных и раскрывающиеся списки.
  • Условное форматирование.
  • Рабочий лист изображений PNG / JPEG / BMP / WMF / EMF.
  • Богатые многоформатные строки.
  • Комментарии в ячейке.
  • Текстовые поля.
  • Интеграция с пандами.
  • Режим оптимизации памяти для записи больших файлов.

Написать книги Excel с помощью XlsxWriter достаточно просто. Ячейки могут быть записаны с использованием записи адресов Excel (например, «A1») или номеров строк и столбцов. Ниже приведен базовый пример, показывающий создание книги, добавление некоторых данных и их сохранение в виде файла xlsx.

 
импортировать xlsxwriter

workbook = xlsxwriter.Workbook ('hello.xlsx')
рабочий лист = workbook.add_worksheet ()

worksheet.write ('A1', 'Привет, мир')

рабочая тетрадь.близко()
 

Если вы используете Pandas, вам следует использовать интеграцию XlsxWriter с Pandas. Написание Pandas DataFrames в Excel и даже создание диаграмм требует тяжелого труда.

 
импортировать панд как pd

# Создайте фреймворк Pandas из данных.
df = pd.DataFrame ({'Данные': [10, 20, 30, 20, 15, 30, 45]})

# Создайте писатель Pandas Excel, используя XlsxWriter в качестве движка.
Writer = pd.ExcelWriter ('pandas_simple.xlsx', engine = 'xlsxwriter')

# Получить объекты xlsxwriter из объекта записи фрейма данных.workbook = writer.book
рабочий лист = писатель.sheets ['Sheet1']

# Создать объект диаграммы.
диаграмма = workbook.add_chart ({'тип': 'столбец'})

# Настроить серию диаграммы из данных фрейма данных.
chart.add_series ({'значения': '= Sheet1! $ B $ 2: $ B $ 8'})

# Вставьте диаграмму в рабочий лист.
worksheet.insert_chart ('D2', диаграмма)

# Преобразовать фрейм данных в объект Excel XlsxWriter.
df.to_excel (писатель, sheet_name = 'Sheet1')

# Закройте Pandas Excel Writer и выведите файл Excel.
writer.save ()
 

При обращении к данным Pandas на листе (как это делает формула в приведенной выше диаграмме) вы должны выяснить, где данные будут находиться на листе, чтобы формулы указывали на правильные ячейки.Для отчетов, содержащих множество формул или диаграмм, это может стать проблематичным, поскольку выполнение такой простой задачи, как добавление дополнительной строки, требует корректировки всех затронутых формул. Для подобных отчетов может помочь пакет «xltable».

XL Таблица


XLTable - это библиотека более высокого уровня для создания отчетов Excel из pandas DataFrames. Вместо того, чтобы записывать ячейки книги по ячейкам или по строкам, добавляются целые таблицы и могут включать формулы, которые ссылаются на другие таблицы, без необходимости заранее знать, где эти таблицы будут.Для более сложных отчетов, содержащих формулы, xltable может быть очень полезен.

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

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

 
из импорта xltable *
импортировать панд как pd

# создаем фрейм данных с тремя столбцами, где последний - сумма первых двух
dataframe = pd.DataFrame ({
        'col_1': [1, 2, 3],
        'col_2': [4, 5, 6],
        'col_3': Ячейка ('col_1') + Ячейка ('col_2'),
    }, columns = ['col_1', 'col_2', 'col_3'])

# создаем именованный экземпляр таблицы xltable
table = Таблица ('таблица', фрейм данных)

# создать объекты Workbook и Worksheet и добавить таблицу на лист
лист = Рабочий лист ('Лист1')
простыня.add_table (таблица)

workbook = Книга ('example.xlsx')
workbook.add_sheet (лист)

# записываем книгу в файл с помощью xlsxwriter
workbook.to_xlsx ()
 

XLTable может использовать XlsxWriter для записи файла xlsx или pywin32 (win32com) для записи непосредственно в открытое приложение Excel (только для Windows). Запись непосредственно в Excel удобна для интерактивных отчетов. Например, у вас может быть кнопка на ленте Excel, которую пользователь может нажать, чтобы запросить некоторые данные и создать отчет.Записывая его непосредственно в Excel, они могут сразу же получить этот отчет в Excel без предварительной записи в файл. Подробнее о настройке ленты Excel в Excel см. PyXLL: настройка ленты.

Панды


Для работы с диапазонами данных и чтения или записи их в книги Excel без излишеств использование панд может быть очень быстрым и эффективным методом. Если вам не нужно много форматирования и вы просто заботитесь о переносе данных в книги Excel или из них, тогда функции pandas «read_excel» и «to_excel» могут быть именно тем, что вам нужно.

 
df = pd.DataFrame ([
        ('строка1', 1),
        ('строка2', 2),
        ('строка3', 3)
     ], columns = ['Имя', 'Значение'])

# Записываем фрейм данных в файл xlsx
df.to_excel ('tmp.xlsx')
 

Для более сложных задач, поскольку XlsxWriter, OpenPyXL и XLTable имеют интеграцию с Pandas, любой из них также можно использовать для записи Pandas DataFrames в Excel. Но для простого получения данных в Excel, используя Pandas напрямую, как указано выше, очень удобно.

XLRD / XLWT


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

pyexcel


Если вам нужно иметь дело с несколькими форматами файлов (например, xlsx, xls, ods или csv), тогда для обработки всех из них можно использовать pyexcel.Он объединяет некоторые из вышеперечисленных пакетов (xlrd / xlwt, openpyxl, xlxswriter и другие), чтобы предоставить единый согласованный API независимо от формата файла, с которым вы работаете.

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

 
импортировать pyexcel как pe
записи = pe.iget_records (имя_файла = 'ваш_файл.xls')
для записи в записи:
    print ('% s старше% d'% (запись ['Имя'], запись ['Возраст']))

# Печать ...
# Адаму 28 лет
# Беатрис 29 лет
# Кери 30 лет
# Дину 26 лет

pe.free_resources ()
 

Дополнительные ресурсы


Как создавать, читать, обновлять и искать в файлах Excel с помощью Python

Эта статья подробно покажет, как работать с файлами Excel и как изменять определенные данные с помощью Python.

Сначала мы научимся работать с CSV-файлами, читая, записывая и обновляя их. Затем мы рассмотрим, как читать файлы, фильтровать их по листам, искать строки / столбцы и обновлять ячейки файлов xlsx.

Начнем с самого простого формата электронной таблицы: CSV.

Часть 1 - Файл CSV

Файл CSV представляет собой файл значений, разделенных запятыми, в котором данные в виде простого текста отображаются в табличном формате. Их можно использовать с любой программой для работы с электронными таблицами, такой как Microsoft Office Excel, Google Spreadsheets или LibreOffice Calc.

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

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

Запись в файлы CSV

Сначала откройте новый файл Python и импортируйте модуль CSV Python.

  import csv  
CSV Module

CSV-модуль включает в себя все необходимые встроенные методы. В их число входят:

  • csv.reader
  • csv.writer
  • csv.DictReader
  • cs2683csv.DictWriter другие

В этом руководстве мы сосредоточимся на методах Writer, DictWriter и DictReader.Они позволяют редактировать, изменять и манипулировать данными, хранящимися в файле CSV.

На первом этапе нам нужно определить имя файла и сохранить его как переменную. Мы должны сделать то же самое с заголовком и информацией о данных.

  filename = "imdb_top_4.csv"
header = ("Ранг", "Рейтинг", "Заголовок")
данные = [
(1, 9.2, «Искупление Шоушенка (1994)»),
(2, 9.2, «Крестный отец (1972)»),
(3, 9, «Крестный отец: Часть II (1974)»),
(4, 8.9, «Криминальное чтиво (1994)»)
]  

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

  def writer (заголовок, данные, имя файла):
  pass  

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

  def writer (заголовок, данные, имя файла):
  с open (filename, "w", newline = "") как csvfile:
    фильмы = csv.писатель (csvfile)
    movies.writerow (заголовок)
    для x в данных:
      movies.writerow (x)  
Официальная документация Python описывает, как работает метод csv.writer. Я настоятельно рекомендую вам уделить минуту, чтобы прочитать его.

И вуаля! Вы создали свой первый файл CSV с именем imdb_top_4.csv. Откройте этот файл с помощью предпочитаемого вами приложения для работы с электронными таблицами, и вы должны увидеть что-то вроде этого:

Использование LibreOffice Calc для просмотра результата.

Результат может быть записан так, если вы решите открыть файл в другом приложении:

Использование SublimeText для просмотра результата.

Обновление файлов CSV

Чтобы обновить этот файл, вы должны создать новую функцию с именем updater , которая будет принимать только один параметр с именем filename .

  def Updater (имя файла):
    с open (filename, newline = "") как файл:
        readData = [строка для строки в csv.DictReader (файл)]
        # print (readData)
        readData [0] ['Рейтинг'] = '9,4'
        # print (readData)

    readHeader = readData [0] .keys ()
    Writer (readHeader, readData, filename, "update")  

Эта функция сначала открывает файл, определенный в переменной filename , а затем сохраняет все данные, которые она считывает из файла, внутри переменной с именем readData .Второй шаг - жестко запрограммировать новое значение и поместить его вместо старого в позицию readData [0] [‘Rating’] .

Последним шагом в функции является вызов функции writer путем добавления нового параметра update , который сообщит функции, что вы выполняете обновление.

csv.DictReader подробно описан в официальной документации Python здесь.

Чтобы writer работал с новым параметром, вам необходимо добавить новый параметр везде, где определено writer .Вернитесь к тому месту, где вы впервые вызвали функцию writer и , и добавьте «запись» в качестве нового параметра:

 Запись  (заголовок, данные, имя файла, «запись»)  

Чуть ниже функции записи вызовите Updater и передайте в него параметр filename :

  writer (заголовок, данные, имя файла, "запись")
updater (filename)  

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

  def writer (заголовок, данные, имя файла, параметр):  

С этого момента мы ожидаем для получения двух разных опций для функции Writer (запись и обновление ).По этой причине мы должны добавить два оператора if для поддержки этой новой функции. Первая часть - функция «if option ==« write: » вам уже известна. Вам просто нужно добавить раздел кода « elif option ==« update »: и часть else , как они написаны ниже:

  def writer (заголовок, данные, имя файла, параметр):
        с open (filename, "w", newline = "") как csvfile:
            если option == "написать":

                фильмы = csv.писатель (csvfile)
                movies.writerow (заголовок)
                для x в данных:
                    movies.writerow (x)
            elif option == "обновить":
                Writer = csv.DictWriter (csvfile, fieldnames = заголовок)
                writer.writeheader ()
                Writer.writerows (данные)
            еще:
                print («Вариант неизвестен»)  

Браво! Готово!

Теперь ваш код должен выглядеть примерно так:

Код.

Вы также можете найти код здесь:

https://github.com/GoranAviani/CSV-Viewer-and-Editor

В первой части этой статьи мы увидели, как работать с CSV-файлами. Мы создали и обновили один такой файл.

Часть 2 - Файл xlsx

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

Я создаю это решение, используя Python 3 и библиотеку openpyxl .Причина, по которой я выбрал openpyxl , заключается в том, что он представляет собой законченное решение для создания рабочих листов, их загрузки, обновления, переименования и удаления. Он также позволяет нам читать или писать в строки и столбцы, объединять или отменять объединение ячеек или создавать диаграммы Excel в Python и т. Д.

Терминология и базовая информация Openpyxl

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

Первый шаг - открыть среду Python и установить openpyxl в свой терминал:

  pip install openpyxl  

Затем импортируйте openpyxl в свой проект, а затем загрузите книгу в переменную theFile .

  импорт openpyxl

theFile = openpyxl.load_workbook ('Customers1.xlsx')
печать (theFile.sheetnames)
currentSheet = theFile ['клиенты 1']
print (currentSheet ['B4']. value)  

Как видите, этот код печатает все листы по их именам. Затем он выбирает лист с именем «клиенты 1» и сохраняет его в переменной currentSheet . В последней строке код печатает значение, которое находится в позиции B4 листа «клиенты 1».

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

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

theFile = openpyxl.load_workbook ('Customers1.xlsx')
allSheetNames = theFile.sheetnames

print ("Все имена листов {}".формат (theFile.sheetnames))


для x в allSheetNames:
    print ("Текущее имя листа: {}" .format (x))
    currentSheet = theFile [x]
    print (currentSheet ['B4']. value)  

Это лучше, чем раньше, но это все еще жестко запрограммированное решение, и оно по-прежнему предполагает, что значение, которое вы будете искать, находится в ячейке B4, что просто глупо: )

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

  импорт openpyxl

theFile = openpyxl.load_workbook ('Customers1.xlsx')
allSheetNames = theFile.sheetnames

print ("Все имена листов {}" .format (theFile.sheetnames))


для листа в allSheetNames:
    print ("Текущее имя листа: {}" .format (sheet))
    currentSheet = theFile [лист]
    # print (currentSheet ['B4']. значение)

    # print максимальное количество строк и столбцов для каждого листа
    #print (currentSheet.max_row)
    #print (currentSheet.max_column)

    для строки в диапазоне (1, currentSheet.max_row + 1):
        #print (строка)
        для столбца в "ABCDEF": # Здесь вы можете добавить или уменьшить столбцы
            cell_name = "{} {}". формат (столбец, строка)
            #print (имя_ячейки)
            print ("позиция ячейки {} имеет значение {}". format (cell_name, currentSheet [cell_name] .value))  

Мы сделали это, представив цикл « для строки в диапазоне .. ». Диапазон цикла for определяется от ячейки в строке 1 до максимального количества или строк листа. Второй цикл for выполняет поиск в пределах предварительно определенных имен столбцов « ABCDEF ».Во втором цикле мы отобразим полную позицию ячейки (имя столбца и номер строки) и значение.

Однако в этой статье моя задача - найти конкретный столбец с именем «телефон», а затем просмотреть все строки этого столбца. Для этого нам нужно изменить код, как показано ниже.

  импорт openpyxl

theFile = openpyxl.load_workbook ('Customers1.xlsx')
allSheetNames = theFile.sheetnames

print ("Все имена листов {}" .format (theFile.sheetnames))


def find_specific_cell ():
    для строки в диапазоне (1, currentSheet.max_row + 1):
        для столбца в "ABCDEFGHIJKL": # Здесь вы можете добавить или уменьшить столбцы
            cell_name = "{} {}". формат (столбец, строка)
            если currentSheet [cell_name] .value == "телефон":
                #print ("{1} ячейка расположена на {0}" .format (cell_name, currentSheet [cell_name] .value))
                print ("позиция ячейки {} имеет значение {}". формат (имя_ячейки, currentSheet [имя_ячейки]. значение))
                вернуть имя_ячейки

для листа в allSheetNames:
    print ("Текущее имя листа: {}".формат (лист))
    currentSheet = theFile [sheet]  

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

Следующий шаг - просмотреть все строки этого конкретного столбца и распечатать значения.

  импорт openpyxl

theFile = openpyxl.load_workbook ('Customers1.xlsx')
allSheetNames = theFile.sheetnames

print ("Все имена листов {}" .format (theFile.sheetnames))


def find_specific_cell ():
    для строки в диапазоне (1, currentSheet.max_row + 1):
        для столбца в "ABCDEFGHIJKL": # Здесь вы можете добавить или уменьшить столбцы
            cell_name = "{} {}". формат (столбец, строка)
            если currentSheet [cell_name] .value == "телефон":
                #print ("Ячейка {1} находится на {0}".формат (имя_ячейки, currentSheet [имя_ячейки]. значение))
                print ("позиция ячейки {} имеет значение {}". формат (имя_ячейки, currentSheet [имя_ячейки]. значение))
                вернуть имя_ячейки

def get_column_letter (specificCellLetter):
    письмо = specificCellLetter [0: -1]
    печать (письмо)
    ответное письмо

def get_all_values_by_cell_letter (письмо):
    для строки в диапазоне (1, currentSheet.max_row + 1):
        для столбца в письме:
            cell_name = "{} {}". формат (столбец, строка)
            #print (имя_ячейки)
            print ("позиция ячейки {} имеет значение {}".формат (имя_ячейки, currentSheet [имя_ячейки]. значение))



для листа в allSheetNames:
    print ("Текущее имя листа: {}" .format (sheet))
    currentSheet = theFile [лист]
    specificCellLetter = (find_specific_cell ())
    письмо = get_column_letter (specificCellLetter)

    get_all_values_by_cell_letter (письмо)
  

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

Завершение

Бюстгальтер! После этого вы можете многое сделать. Я планировал создать онлайн-приложение, которое будет стандартизировать все шведские телефонные номера, взятые из текстового поля, и предлагать пользователям возможность просто копировать результаты из того же текстового поля. Второй шаг моего плана заключался в расширении функциональности веб-приложения для поддержки загрузки файлов Excel, обработки телефонных номеров внутри этих файлов (стандартизации их в шведском формате) и предложения обработанных файлов обратно пользователям.

Я выполнил обе эти задачи, и вы можете увидеть их вживую на странице инструментов моего сайта Incodaq.com :

https://tools.incodaq.com/

Также код из второй части эта статья доступна на GitHub:

https://github.
Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

© 2019 Штирлиц Сеть печатных салонов в Перми

Цифровая печать, цветное и черно-белое копирование документов, сканирование документов, ризография в Перми.