Python 3 работа с excel: библиотеки для работы с данными / Блог компании OTUS. Онлайн-образование / Хабр
Обработка Excel файлов с использованием Python / Хабр
По работе пришлось столкнуться с задачей обработки xls файлов средствами python. Немного по гуглив, я натолкнулся на несколько библиотек, с помощью которых можно работать с файлами excel.
Библиотеки:
— xlrd – дает возможность читать файлы Excel
— xlwt – создание и заполнение файлов Excel
— xlutils – набор утилит для расширения возможности предыдущих двух библиотек
— pyExcelerator – также дает возможность работать с файлами Excel, но давно не обновлялась.
Для своей задачи я использовал первые три библиотеки.
Задача была разбита на несколько частей: чтение файла с расширением xls; создание нового и заполнение его; создание копии файла на основе входного файла; удаление необходимых строк в выходном файле.
Чтение входного файла
Эта задача не отличается высокой сложностью. Документация и примеры, идущие в комплекте с xlrd, помогли быстро решить ее.
Пример кода:
import xlrd
rb = xlrd.open_workbook('d:/final.xls',formatting_info=True)
sheet = rb.sheet_by_index(0)
for rownum in range(sheet.nrows):
row = sheet.row_values(rownum)
for c_el in row:
print c_el
Создание нового файла и заполнение его
Эта задача оказалась не сложнее предыдущей. Документация и примеры помогли.
Пример кода:
import xlwt
from datetime import datetimefont0 = xlwt.Font()
font0.name = 'Times New Roman'
font0.colour_index = 2
font0.bold = Truestyle0 = xlwt.XFStyle()
style0.font = font0style1 = xlwt.XFStyle()
style1.num_format_str = 'D-MMM-YY'wb = xlwt.Workbook()
ws = wb.add_sheet('A Test Sheet')ws.write(0, 0, 'Test', style0)
ws.write(1, 0, datetime.now(), style1)
ws.write(2, 0, 1)
ws.write(2, 1, 1)
ws.write(2, 2, xlwt.Formula("A3+B3"))wb.save('example.xls')
Создание копии файла на основе входного файла
Эта задача может решаться двумя путями. Вариант первый: открываем на чтение входной файл, создаем новый файл и по циклу переписываем все данные с одного файла в другой. Такое решение не сложно реализовать, поэтому пример кода выкладывать нет смысла. Вариант второй: воспользоваться библиотекой xlutils. В данной библиотеке есть много чего интересного и полезного, но для нашей задачи будет интересен именно xlutils.copy.
И так, пример кода по созданию файла на основании входного с использованием xlutils.copy:
import xlrd
import xlwt
from xlutils.copy import copyrb = open_workbook('final.xls',on_demand=True,formatting_info=True)
wb = copy(rb)
wb.save("final_complete.xls")
Вот такой вот небольшой код получился. Для того чтобы он работал, обязательно должен стоять флаг on_demand=True. Благодаря использованию флага formatting_info выходной файл получается с такими же стилями оформления, как и входной. Для моей задачи это оказалась нужная опция.
Удаление строк по заданному условию
Для решения данной задачи было решено использовать фильтр. Один из вариантов — это переписывание из одного файла в другой, исключая те варианты, которые не выполняют заданное условие. Но тут есть одна загвоздка, если необходимо сохранить стиль оформление документа, то этот подход не подойдет (Если конечно вы заранее не знаете стиль оформления и можете задать его программно). Решение поставленной задачи было достигнуто посредством использования xlutils.filter. Задача: оставить в выходном Excel файле только те записи, которые содержатся в передаваемом списке.
Код, который решает данную задачу:
from xlutils.filter import GlobReader,BaseFilter,DirectoryWriter,process
myfile='final2.xls'
mydir='d:/'class MyFilter(BaseFilter):
goodlist = None
def __init__(self,elist):
self.goodlist = goodlist
self.wtw = 0
self.wtc = 0
def workbook(self, rdbook, wtbook_name):
self.next.workbook(rdbook, 'filtered_'+wtbook_name)def row(self, rdrowx, wtrowx):
passdef cell(self, rdrowx, rdcolx, wtrowx, wtcolx):
value = self.rdsheet.cell(rdrowx,rdcolx).value
if value in self.goodlist:
self.wtc=self.wtc+1
self.next.row(rdrowx,wtrowx)
else:
return
self.next.cell(rdrowx,rdcolx,self.wtc,wtcolx)
data = """somedata1
somedata2
somedata3
somedata4
somedata5
"""goodlist = data.split("\n")
process(GlobReader(os.path.join(mydir,myfile)),MyFilter(goodlist),DirectoryWriter(mydir))
Заключение
Используя набор из трех библиотек, поставленные задачи были решены. Было замечено следующее: при наличии во входном Excel файле графических элементов (картинки и т.д) в выходной файл они не переносятся. Возможно изучив эти библиотеки можно будет решить и эту часть задачи.
Ссылки
sourceforge.net/projects/pyexcelerator
www.python-excel.org — на три первых библиотеки.
groups.google.com/group/python-excel — группа, в которой обсуждают использование библиотек xlrd, xlwt и xlutils.
P.S. Думаю было бы неплохо перенести данный пост в тематический блог.
Работа с Excel в Питоне
Работа с Excel в Питоне.
Для работы с файлами Excel в Python создано несколько библиотек. Часть из них ориентирована на работу только с файлами типа XLS, а другие могут обрабатывать и файлы типа XLSX. Файлы первого типа двоичные и кодированные, файлы второго типа текстовые, и на самом деле в действительности состоят из ряда папок (директорий). Это можно увидеть, если изменить тип файла на неизвестный системе, например, XL,DO,PP.
При просмотре в Total Commander мы увидим только гипертекстовые файлы типа XML.
Я пока предпочитаю работать в старой системе 2003.
Для обработки файлов Excel необходимо сначала скачать необходимые библиотеки, но на первом этапе надо установить программы PIP или PIP3 – установщики пакетов. Эти программы типа EXE.
После установки ПИПОВ скачиваем сами библиотеки. Для начала это могут быть пакеты чтения файлов Excel, записи файлов Excel, утилит, обработки файлов Excel в формате близком к VBA.
Все скачиваемые пакеты будут иметь расширение WHL и длинное имя. Лучше имена укоротить до XLRD, XLWT, XLUTILS и PYWIN32. Все имена файлов скачиваются в строчном формате. Я их просто выделил.
Для установки пакетов вызываем командное окно системы. Я это делаю через Выполнить и cmd в окне. В начале лучше войти в папку, где находятся пакеты для установки. Я скопировал эти пакеты в директорию scripts папки Python 3_7 на диске С.
Поэтому набираю в командном окне
cd C:\ Python 3_7\scripts
Т.к. по умолчанию система ПК предполагает выбор директории Мои Документы или User в некоторых случаях, то в ней можно создать Bat файл с командами выше. Я это делаю. Файл можно назвать питон.bat или python.bat. Для Анаконда я создаю файл conda.bat.
После установки exe файлов pip.exe или pip3.exe можно начать устанавливать пипами выбранные пакеты.
pyp3 install xlrd, потом pyp3 install xlwt и т.д.
Установка библиотек для работы с файлами Excel происходит быстро. Если возникают ошибки, то они видны в окне CMD. О попытке загрузки уже установленной ранее библиотеки также появляется сообщение. Пакет может быть, хотя и установлен, но не работать по каким-то причинам. Так у меня в начале произошло с пакетом PANDAS. В этом случае для удаления сбойного пакета вызывается в том же окне CMD команда UNINSTALL. Между прочим у меня не пошла установка и пакета Anaconda3. Все правильно установилось только тогда, когда я снёс старый Питон и почистил реестр Windows методом тупого поиска ссылок. Хотя это можно сделать было и программно.
Пакет utils связующий между пакетами xlrd, xlwt.
Что я заметил при обработке файлов Excel?
Обработка файлов Excel в питоне с помощью COM32 (Win32) более понятна и близка по виду к работе с макросами. Но время обработки зато приближается к времени обработке в самом Excel или даже больше. Обработка файлов Excel командами библиотек XLRD и XLWT происходит быстро, очень быстро.
Второй момент. Модуль XLRD служит лишь для чтения и обработки считанного файла. Записать открытый файл, сохранить его нельзя. Это приводит к ошибке.
Обязательно надо сначала создать модулем XLWT новый файл Excel и добавить в него необходимое число листов, затем переписать в него данные со считанного ранее файла и записать новые сведения. Новый файл можно создать и методом копирования. Обработку данных надо вести в считанном по XLRD файле, формировать данные на листах выходного файла, а только потом записывать, перезаписывать или добавлять вниз. К листу можно обратиться или по имени, или по индексу.
Ниже один из примеров с полей Интернет
Пример просто на чтение и обработку:
import xlrd
wb_path = r’c:\Python 3_7\Работа с Excel\analiz.xls’
output_path = r’c:\Python 3_7\Работа с Excel\output.txt’
wb = xlrd.open(wb_path)
ws = wb.sheets()[0]# Это обращение к первому листу файла
# assuming you want to work with the first sheet in the workbook with open(output_path, ‘w’) as output_file:
for i in xrange(ws.nrows):
row = [cell.value for cell in ws.row(i)]
# … replace the following if statement with your own conditions …
if row[0] == u’interesting’:
output_file.write(‘\t’.join(row) + ‘\r\n’)
Пример на создание нового файла и запись в него данных
# тут важно поставить ‘utf-8’, если надо писать русские символы и так далее
import xlwt
wbk = xlwt.Workbook(‘utf-8’)
# добавляем лист
sheet = wbk.add_sheet(‘sheet 1’)
# пишем в первую строку и первый столбец
sheet.write(0, 0, ‘bla bla’)
print (2**3)
# сохраняем в файл
wbk.save(‘C:/Python 3_7/test.xls’)
Параметры команд каждого модуля можно просмотреть командой Dir, например, dir(xlrd), dir (xlwt). При работе с Питоном не стоит забывать, что он чувствителен к написанию команд и идентификаторов в строчном или заглавном формате, например, команда Print (…..) вызовет ошибку, т.к. она должна набираться как print.
P.S. Сегодня день ракетных войск и артиллерии 19 ноября, посвященный фактически началу зимнего контрнаступления под Сталинградом. Я служил когда-то в ракетных войсках, так что это и мой праздник.
А теперь к теме. Наконец-то я написал свой работающий модуль обработки Экселовского файла диагностических работ. В нем данные со 2 строки по 861. Шапка в первой строке. Файлы диагностики есть на моём сайте, поэтому я его не размещаю. В исходном файле данные почему-то по 107 столбец, хотя заполнено всего 27, а вернее 28. Питон ведь ведёт отсчёт с нуля. К этому тоже надо привыкать после VBA. В VBA проблема выделения столбцов решается переходом с метода UsedRange на метод XlEnd. В питоне пришлось действовать пока более грубо путём поиска пустого первого столбца.
В своём модуле я создавал много проверочных операторов print, чтобы отладить программу. Часть из них я до сих пор оставил по привычке делать программы более удобные для диагностики и обучения.
Какая ещё проблема возникла у меня? Очень простая, но я долго из-за неё искал ошибку. Это тип данных и их преобразование.
Вариант программы для обработки файлов Excel Анализ диагностических работ.
Напомню, что этот файл состоит из 7 основных полей –
Муниципалитет | Общеобразовательная организация | Класс | Участник | Сумма баллов | Процент выполнения | Оценка |
Далее идут столбцы заданий. В моём проверочном файле было 20 заданий в столбцах 8-27. В питоне это range(7,27). По каждому выполненному заданию выставляется оценка-критерий 0,1,2 или X-латинское. Поиск школ – это лишнее в алгоритме, но использовалось для проверки. Была попытка использовать функцию для подсчета количества данных критериев по столбцу, что логично. Но это приводило к смещению выводимых данных на столбец вправо. Так и не сумел в этом разобраться. Поэтому использовал алгоритм подсчёта количества записей по данному критерию в данном столбце в данной школе в самом тексте программы. У меня есть аналогичная программа в макросах VBA. Но в питоне обработка ведётся в десятки раз быстрее, не смотря на операторы вывода, правда пока не сумел сохранить форматирование. В макросах я могу моделировать и функции Excel, а возможно ли это здесь? Пока не знаю.
Выходные данные работы программы
Sheet: Лист1
Число столбцов = 107
Число строк на листе – 861 А число найденных столбцов на листе – 107
Определяем пустую ячейку и колонку
Номер первого пустого столбца = 27
Диапазон поиска: строк= 861 столбцов 27
#Список 29 школ и числа учащихся в них опущен
spList= [0.0, 1.0, 2.0, ‘X’]
Список оценок заданий, отсортированный по убыванию – [‘X’, ‘2.0’, ‘1.0’, ‘0.0’]
Список оценок заданий, отсортированный по возрастанию – [‘0.0’, ‘1.0’, ‘2.0’, ‘X’]
#Выше видно, что уже изначально список был Питоном отсортирован по возрастанию, но типы данных разные
#Из-за этого сортировка давала бы ошибку, если бы не было приведению к одному типу
Число значений = 4
0.0
1.0
2.0
X
Число оценок = 4
X <class ‘str’>
s.nrows= 861
>>>
Текст программы
from xlrd import open_workbook
import xlrd
import xlwt
import xlutils
import sys
wb_path = r’c:\Python 3_7\Работа с Excel\analiz.xls’
output_path = r’c:\Python 3_7\Работа с Excel\output_school_kriterii_schools.xls’
wb = open_workbook(wb_path,formatting_info=True)
#Создаём новую рабочую книгу
wbk = xlwt.Workbook(‘utf-8’)
ws = wbk.add_sheet(‘A Test Sheet’)
#print (wb.sheet.name)
for s in wb.sheets():
print (‘Sheet:’,s.name)
# s=wb.sheets(0)
print(“Число столбцов =”,s.ncols)
#Определяем номер последней строки и последней колонки на листе WB
i=s.nrows
j=s.ncols
#Число колонок часто больше по UsedRange в VBA, чем заполненных
#Ищем последнюю колонку таблицы
print (“Число строк на листе -“,i,” А число найденных столбцов на листе -“,j)
print (“\nОпределяем пустую ячейку и колонку”)
for p in range(s.ncols):
if s.cell(1,p).value==””:
break
print (“\nНомер первого пустого столбца = “,p)
j=p
print (“\n\nДиапазон поиска: строк=”,i, ” столбцов”,j)
#Заводим значения типа Set для получения значений критериев и наименований школ
values = set()
schools = set()
#Получение данных о количестве и значении оценок заданий
for row in range(1,i):
n=row%100 # Ниже условие для подсчета числа обработанных строк
# if n==0:
#Вывод количества обработанных строк с шагом 100
# print (“Обработано строк-“,row)
#Заполнение наименований школ из колонки №2
school=s.cell(row,1).value
schools.add(school)
for col in range(7,j):
value = (s.cell(row,col).value)
# try : value = str(int(value))
# except : pass
values.add(value)
#Печать найденных школ после преобразования в список
spSchool=list(schools)
spSchool.sort(reverse=False)
#for s1 in spSchool:
# print (“\n”,s1)
# Предыдущий и этот циклы можно было объединить
#Подсчет числа записей в конкретной школе и вывод на печать для контроля
n=1
for sps in spSchool:
for i in range(2,s.nrows):
school=s.cell(i,1).value
if sps==school:
n+=1
print (sps,” -“, n)
n=0
#Вывод критериев – оценок задания диагностической работы
global spList
spList=list(values)
print(“spList=”,spList)
#Перевод всех значений в строковый вид, иначе будет ошибка ниже, т.к 1.0 – float. а Х – str
for k in range(len(spList)):
spList[k]=str(spList[k])
#Печать значений в прямой и обратной сортировке
spList.sort(reverse=True)
print (“Список оценок заданий, отсортированный по убыванию – “,spList)
spList.sort(reverse=False)
print (“Список оценок заданий, отсортированный по возрастанию – “,spList)
print (spList[3],type(spList[3]))
#Перезапись в новый файл первой строки шапки, запоминание текущей школы во второй строке
for j in range(p):
ws.write(0,j,s.cell(0,j).value)
#Начало вывода данных в файл и формирование сумм по критериям задания по каждой школе
school1=s.cell(1,1).value #Запоминание школы
stroka_end=0 #Конечная строка в текущей школе
stroka_begin=stroka_end #Начальная строка в текущей школе
stroka_ws=1 #Запоминание текущей строки вывода в выходной файл
for i in range(1,s.nrows): # Исправить на s.nrows
school2=s.cell(i,1).value
if school2==school1:
stroka_end+=1
#stroka_ws+=1
for j in range (p):
ws.write(stroka_ws,j,s.cell(i,j).value)
stroka_ws+=1
else:
#Школа2 не равна Школе1
school1=school2
stroka_ws+=1
stroka_end+=1
for j1 in range (7,p):
n1=n2=n3=n4=0
for i in range(stroka_begin,stroka_end):
value =str(s.cell(i,j1).value)
if value==spList[0]:
n1+=1
if value==spList[1]:
n2+=1
if value==spList[2]:
n3+=1
if value==spList[3]:
n4+=1
ws.write(stroka_ws+1,j1,n1)
ws.write(stroka_ws+2,j1,n2)
ws.write(stroka_ws+3,j1,n3)
ws.write(stroka_ws+4,j1,n4)
ws.write(stroka_ws+1,6,spList[0])
ws.write(stroka_ws+2,6,spList[1])
ws.write(stroka_ws+3,6,spList[2])
ws.write(stroka_ws+4,6,spList[3])
stroka_ws+=6
#Дополнительная корректировка вывода, т.к. иначе теряется первая строка новой школы
for j in range (p):
ws.write(stroka_ws,j,s.cell(i+1,j).value)
stroka_ws+=1
stroka_begin=stroka_end
print(“Школа1=”,school1,” Школа2=”,school2,n1,n2,n3,n4,stroka_begin,stroka_end,stroka_ws)
stroka_ws+=1
ws.write(stroka_ws+1,6,spList[0])
ws.write(stroka_ws+2,6,spList[1])
ws.write(stroka_ws+3,6,spList[2])
ws.write(stroka_ws+4,6,spList[3])
for j1 in range (7,p):
n1=n2=n3=n4=0 #Обнуляем значения
for i in range(stroka_begin,stroka_end):
value =str(s.cell(i,j1).value)
if value==spList[0]:
n1+=1
if value==spList[1]:
n2+=1
if value==spList[2]:
n3+=1
if value==spList[3]:
n4+=1
ws.write(stroka_ws+1,j1,n1)
ws.write(stroka_ws+2,j1,n2)
ws.write(stroka_ws+3,j1,n3)
ws.write(stroka_ws+4,j1,n4)
wbk.save(output_path)
#Выход из программы, если обработка больше не нужна
sys.exit([n])
Рекомендую установить Anaconda3. Среди её модулей есть прекрасное приложение JupiterLab. Это и прекрасный редактор и программная среда, сохраняющая и текст программы и результаты её работы.
Пример созданной в JupiterLab статьи на основе информации из Интернет
Пример подключения файла Excel для получения входных данных для круговой диаграммы
Эти статьи надо скачать и запустить на своём ПК, но можно вставлять непосредственно и на свой сайт.
Эти примеры созданы в JupiterLab и переведены в файлы HTML через File-> Export->HTML
Посмотрите новую заметку по консолидации
Консолидация данных Excel в Питоне
Интеграция MS Excel и Python · Заметки разработчика
Добрый день, уважаемые читатели.
В сегодняшней статье я хотел бы, как можно подробнее, рассмотреть интеграцию приложений Python и MS Excel. Данные вопрос может возникнуть, например, при создании какой-либо системы онлайн отчетности, которая должна выгружать результаты в общепринятый формат ну или какие-либо другие задачи. Также в статье я покажу и обратную интеграцию, т.е. как использовать функцию написанную на python в Excel, что также может быть полезно для автоматизации отчетов.
Работаем с файлами MS Excel на Python
Для работы с Excel файлами из Python мне известны 2 варианта:
- Использование библиотек, таких как xlrd, xlwt, xlutils или openpyxl
- Работа с 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)
#получаем список значенний из всех записей
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
получает следующее:
- Объект модуля, полученный на предыдущем шаге
- Имя вызываемой функции
- Параметры, передаваемые функции (передаются в виде списка)
Функция PyTuple
, получает на вход какие-либо значения и преобразует их в объект tuple языка Python.
Ну и, соответственно, PyVar
выполняет операцию пребразования результата функции python, к типу понятному Excel.
Теперь, чтобы убедиться в работоспособности нашей связки, вызовем нашу свежеиспеченую функцию на листе в Excel:
Как видно из рисунка все отработало правильно.
Надо отметить, что в данном материале используется старая версия ExcelPython, и на GitHub’e автора доступна новая версия.
Заключение
В качестве заключения, надо отметить, примеры в данной статье самые простые и для более глубоко изучения данных методов, я рекомендую обратиться к документации по соответсвующим пакетам.
Также хочу заметить, что указанные пакеты не являются единственными и в статье опущено рассмотрение, таких пакетов как xlwings, который может работать с Excel файлами “на лету” или же PyXLL, который выполняет аналогичные функции ExcelPython.
Кроме этого в статье я попвтался несколько обобщить разборасанный по сети материал, т.к. такие вопросы часто фигурируют на формух и думаю некоторым будет полезно иметь, такую “шпаргалку” под рукой.
Please enable JavaScript to view the comments powered by Disqus.
comments powered by
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: в более удобочитаемом виде 🙂 :
import os #Подгружаем библиотеку для обработки системных команд
import openpyxl #Подгружаем библиотеку для обработки Excel-файлов
import re
path = os.chdir('c:\\Users\\Oleksiy\\Desktop\\Полный список аптек в Украине\\')
list_directory = os.listdir(path) #В переменную загоняем список файлов в целевой директории
#print('Список всех файлов \n', list_directory) #Выводим полный список файлов в каталоге
#print(type(list_directory))
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) #Начинаем парсить по номеру (напоминаю, номер уже окультурили)
#typer = type(result_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 #Увеличиваем на единицу - что бы работать с ячейкой ниже
Для начала по тематике Python — работа с Excel — достаточно. В ближайшем будущем эта тема будет рассмотрена подробнее 🙂
Код в исходном виде доступен на Git-e. В случае возникновения вопросов — пожалуйста, пишите 🙂
Похожее
Про то, как я Python с Excel’ем подружил — «Хакер»
Содержание статьи
Бредовая идея
Есть миллионы людей, которые бесхитростно работают в Excel с самыми обычными электронными таблицами. Есть очень редкие гики, которые используют максимум возможностей встроенного VBA-языка, чтобы, к примеру, обойти ограничение на запуск менеджера задач, реализовав свой собственный. Я отношусь к первому типу :). Я сильно не люблю составлять отчеты. Придумать более унылое занятие невозможно: взять данные оттуда, вставить в таблицу, взять данные из другого места и опять вставить в таблицу. После третьего такого отчета я решил это занятие автоматизировать. Задача казалась вполне земной, если бы не одно но — иметь дело со встроенным VBA совершенно не хотелось. К тому же нужно было обрабатывать сложные форматы файлов, а писать с нуля парсер нисколько не привлекало. С документом надо было работать постоянно, поэтому вариант написать внешний скрипт на Python, который на основе xls-шаблона создавал бы отчет, вставляя нужные данные, не годился (хотя изначально я хотел делать именно так). «Вот если бы в Excel был встроен Python для скриптинга, то все было бы в десять раз проще», — подумал я и набрал в Google: «excel with python». Оказалось, что подобной ерундой был озадачен не только я :).
Excel + Python
Один из первых найденных проектов —PyXLL позволял быстро писать на питоне функции, которые далее можно было использовать наравне со стандартными функциями Excel’я (вроде СУММА()). Я даже попробовал его в действии. Выглядит это так: ты пишешь Python-скрипт в соответствии с некоторыми правилами, реализуя необходимые действия с получаемыми данными, после чего через специальный аддон для Excel’я импортируешь написанные функции. Не так плохо, но хотелось прямо в коде Python обращаться к нужным ячейкам электронной таблицы. И это позволял другой найденный аддон DataNitro. После его установки в Excel’е появляется новая вкладка, откуда вызывается редактор. Интеграция выполнена очень удобно, поэтому можно, не сильно заморачиваясь, написать что-то вроде:
Cell("A1").value = "Hello, World!"
Далее запускаем сценарий с помощью кнопки на панели тулбара и получаем нужное значение в ячейке A1! Недолго думая, я стал наращивать функционал, который мне был нужен. Пробую импортировать библиотеки для работы с нужными форматами и прочитать данные — все работает. Запрашиваю через API информацию из нескольких онлайн-сервисов — все отлично агрегируется. Пишу простенькую приблуду для рассылки отчетов — все отлично отправляется. В итоге за тридцать минут удается сделать скрипт, который будет экономить два часа — те, что превращались для меня в пытку :). Сперва я даже начал выполнять в Python все расчеты, лишь позже вспомнив, что с этим справится сам Excel. Впрочем, если нужно посчитать что-то серьезное, то ничего не стоит подгрузить математический модуль NumPy и делать любые научные вычисления.
Вкладка аддона, с помощью которой реализуется интеграция DataNitro и Excel
Выжать максимум
Скриптинг на Python — всегда гарантия хорошей расширяемости приложения. Взять хотя бы редактор Sublime Text: плагины для него есть уже на любой случай жизни. Впрочем, можно не ходить далеко за примером. Один из создателей DataNitro в качестве иллюстрации возможностей своей разработки написал на Excel’е Twitter-клиент (подробнее можно прочитать здесь: bit.ly/Res2mZ). Причем минимальными усилиями благодаря питоновской обертке для Twitter API — tweepy. Конечно, это всего лишь Proof-of-Concept, но зато хорошая иллюстрация того, что интеграция с Python с его огромным количеством готовых модулей на любой случай жизни может быть очень полезной. Кстати, сделать такую фишку не так уж и сложно, о чем пишется в официальной документации Python. А освоить основы языка можно за полчаса. К слову, интерактивная школа по программированию Codeacademy как раз выпустила неплохой курс (http://www.codecademy.com/tracks/python).
Пишем файл 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 👈
1 077
Чтение и запись в файл Excel с использованием модуля Python openpyxl
Python предоставляет модуль openpyxl для работы с файлами Excel.
Как создавать файлы Excel, как писать, читать и т. Д., Можно реализовать с помощью этого модуля.
Для установки модуля openpyxl мы можем написать эту команду в командной строке
pip install openpyxl
Пример кода
import openpyxl my_wb = openpyxl.Workbook() my_sheet = my_wb.active my_sheet_title = my_sheet.title print("My sheet title: " + my_sheet_title)
Вывод
My sheet title:Sheet
Чтобы изменить название заголовка
Пример кода
import openpyxl my_wb = openpyxl.Workbook() my_sheet = my_wb.active my_sheet.title = "My New Sheet" print("sheet name is : " + sheet.title)
Вывод
sheet name is : My New Sheet
Вставить данные или записать в лист Excel
Пример кода
import openpyxl my_wb = openpyxl.Workbook() my_sheet = my_wb.active c1 = my_sheet.cell(row = 1, column = 1) c1.value = "Aadrika" c2 = my_sheet.cell(row= 1 , column = 2) c2.value = "Adwaita" c3 = my_sheet['A2'] c3.value = "Satyajit" # B2 = column = 2 row = 2. c4 = my_sheet['B2'] c4.value = "Bivas" my_wb.save("C:\Users\TP\Desktop\Book1.xlsx")
Вывод
Чтобы добавить листы в рабочую книгу
Пример кода
import openpyxl my_wb = openpyxl.Workbook() my_sheet = my_wb.active my_wb.create_sheet(index = 1 , title = "new sheet") my_wb.save("C:\Users\TP\Desktop\Book1.xlsx")
Вывод
Показать общее количество строк.
Пример кода
import openpyxl my_path = "C:\Users\TP\Desktop\Book1.xlsx" my_wb_obj = openpyxl.load_workbook(my_path) my_sheet_obj = my_wb_obj.active print(my_sheet_obj.max_row)
Вывод
2
Показать определенное значение ячейки.
Пример кода
import openpyxl # Give the location of the file My_path = "C:\Users\TP\Desktop\Book1.xlsx" wb_obj = openpyxl.load_workbook(my_path) my_sheet_obj = my_wb_obj.active my_cell_obj = my_sheet_obj.cell(row = 1, column = 1) print(my_cell_obj.value)
Вывод
Aadrika
Показать общее количество столбцов.
Пример кода
import openpyxl # Give the location of the file My_path = "C:\Users\TP\Desktop\Book1.xlsx" My_wb_obj = openpyxl.load_workbook(path) my_sheet_obj = my_wb_obj.active print(sheet_obj.max_column)
Вывод
2
Показать название всех столбцов.
Пример кода
import openpyxl # Give the location of the file my_path = "C:\Users\TP\Desktop\Book1.xlsx" # workbook object is created my_wb_obj = openpyxl.load_workbook(my_path) my_sheet_obj = my_wb_obj.active my_max_col = my_sheet_obj.max_column for i in range(1, my_max_col + 1): my_cell_obj = my_sheet_obj.cell(row = 1, column = i) print(my_cell_obj.value)
Вывод
Aadrika Adwaita
Показать значение первого столбца.
Пример кода
import openpyxl # Give the location of the file my_path = "C:\Users\TP\Desktop\Book1.xlsx" my_wb_obj = openpyxl.load_workbook(my_path) my_sheet_obj = my_wb_obj.active my_row = my_sheet_obj.max_row for i in range(1, my_row + 1): cell_obj = my_sheet_obj.cell(row = i, column = 1) print(cell_obj.value)
Вывод
Aadrika Satyajit
Распечатать определенное значение строки.
Пример кода
import openpyxl # Give the location of the file my_path = "C:\Users\TP\Desktop\Book1.xlsx" my_wb_obj = openpyxl.load_workbook(my_path) my_sheet_obj = my_wb_obj.active my_max_col = my_sheet_obj.max_column for i in range(1, my_max_col + 1): cell_obj = my_sheet_obj.cell(row = 2, column = i) print(cell_obj.value, end = " ")
Вывод
Satyajit Bivas
Инструменты для работы с 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.
Кэш объектов
Для функций, которые возвращают объекты 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 / комплекты
Весь 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')
Теперь у нас есть объект Application, и мы можем вызвать метод Range таким же образом, как и код VBA выше.Первое важное отличие, которое следует отметить, заключается в том, что в VBA простой вызов ‘Range (). Select’ вызывает метод Select, но в Python нам нужно использовать ‘()’ для вызова метода.
xl.Range ('B11: K11'). Выбрать ()
В следующей строке требуется константа «xlFillDefault». Для доступа к той же константе в Python мы используем модуль win32com.client.constants. Также обратите внимание, что в VBA круглые скобки не используются при вызове метода объекта, но в Python они есть.
от win32com.константы импорта клиента xl.Selection.AutoFill (Назначение = xl.Range ('B11: K16'), Type = constants.xlFillDefault)
Остальной код похож на те строки, которые мы только что переведены, поэтому вся функция выглядит как
из win32com.client.gencache импорт EnsureDispatch из констант импорта win32com.client def Macro1 (): xl = EnsureDispatch ('Excel.Application') xl.Range ('B11: K11'). Выбрать () xl.Selection.AutoFill (Назначение = xl.Диапазон ('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 предоставляет оболочку для Excel COM API, описанного выше, для упрощения многих общих задач, таких как запись Pandas DataFrames в открытую книгу Excel. Он использует COM-оболочки pywin32 и предоставляет вам доступ к ним, поэтому вы всегда можете перейти к использованию обычного API Excel, если вам это необходимо.
Так же, как pywin32 и comtypes, xlwings может взаимодействовать с Excel из обычного приглашения Python или записной книжки Jupyter. Для вызова кода с использованием xlwings из самого Excel PyXLL предоставляет удобный способ получения объекта приложения Excel как объекта xlwings.Это позволяет создавать сценарии Excel на Python и запускать запуск кода с помощью кнопки на ленте или пункта меню. Примером использования может быть кнопка на ленте для извлечения данных из базы данных, создания отчета и записи его прямо в работающий Excel.
Ниже показано, как значения могут считываться и записываться в работающую книгу Excel, включая фрейм данных Pandas.
импортировать xlwings как xw wb = xw.Book ('workbook.xlsx') # Открытие существующей книги лист = wb.листы ['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']) sht.range ('A1'). value = 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 между функциями рабочего листа через кеш объектов |
IntelliSense | ✘ | ✘ | ✔ | Всплывающая подсказка IntelliSense при вводе — PyXLL интегрируется с надстройкой ExcelDNA Intellisense |
Потокобезопасные функции рабочего листа | ✘ | ✘ | ✔ | Повышение скорости отклика рабочего листа за счет использования пула потоков Excel для одновременного выполнения функций рабочего листа |
Асинхронные функции | ✘ | ✘ | ✔ | Не блокировать Excel в ожидании длительных функций |
Макросы | ✘ | ✔ | ✔ | Макросы — это функции, которые могут быть прикреплены к элементам пользовательского интерфейса, например кнопкам, или вызваны из VBA |
Сочетания клавиш | ✘ | ✘ | ✔ | Сочетания клавиш могут быть назначены макросам с PyXLL |
Эквивалентные функции листа макросов | ✘ | ✘ | ✔ | Обратный вызов в Excel из функции рабочего листа |
Функциональная документация | ✘ | ✔ | ✔ | Включить строки документации функции Python в мастер функций Excel |
Автоматически изменять размер массивов | ✘ | ✔ | ✔ | Функции массива могут автоматически изменять размер |
Энергозависимые функции | ✘ | ✔ | ✔ | Неустойчивые функции вызываются каждый раз, когда лист пересчитывается |
Доступен полный API Excel | ✘ | ✔ | ✔ | xlwings использует pywin32, пользователи PyXLL могут выбирать между pywin32, comtypes или xlwings |
Перезагрузить без перезапуска Excel | ✔ | ✔ | ✔ | Модули можно перезагружать без перезапуска Excel.PyXLL также поддерживает «глубокую перезагрузку», при которой также перезагружаются все зависимости модуля. |
Автоматическая перезарядка | ✘ | ✘ | ✔ | Автоматическая перезагрузка при внесении изменений в ваш код. |
См. Возможности PyXLL
.
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
скриптов или кода на 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, оба
собраны вместе, но отделены друг от друга.Следовательно, это
Модуль целостного типа очень эффективен при работе с электронными таблицами.
Даны ссылки на его документацию и на скачивание пакета.
ниже.
.
ресурсов Python для работы с Excel
Этот сайт содержит указатели на лучшую доступную информацию о работе с файлами Excel на языке программирования Python.
Чтение и запись файлов Excel
Существуют пакеты python для работы с файлами Excel, которые будут работать на любой платформе Python и не требуют использования Windows или Excel. Они быстрые, надежные и открытые:
openpyxl
Рекомендуемый пакет для чтения и записи файлов Excel 2010 (например:.xlsx)
Загрузить | Документация | Bitbucket
xlsxwriter
Альтернативный пакет для записи данных, информации о форматировании и, в частности, диаграмм в формате Excel 2010 (например, .xlsx)
Скачать | Документация | GitHub
pyxlsb
Этот пакет позволяет читать файлы Excel в формате xlsb
.
Скачать | GitHub
пилайтxl
Этот пакет позволяет читать файлы 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 Sheet для Python 3.4?
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.