Манипулирование файлами Excel 2007 с помощью Python

Используя python, я должен иметь возможность выполнять следующие операции с книгой для Excel 2007:

  1. удалить строки
  2. сортировка листа
  3. получать различные значения из столбца

Я смотрю в openpyxl; однако, кажется, что возможности ограничены.

Кто-нибудь может порекомендовать библиотеку, которая может выполнять вышеуказанные задачи?

1 ответ

Решение

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

Для начала мы хотим подключиться к Excel и получить доступ к первому листу в качестве примера.

#First we need to access the module that lets us connect to Excel
import win32com.client 

# Next we want to create a variable that represents Excel
app = win32com.client.Dispatch("Excel.Application")   

# Lastly we will assume that the workbook is active and get the first sheet
wbk = app.ActiveWorkbook
sheet = wbk.Sheets(1)

На данный момент у нас есть переменная с именем sheet, которая представляет собой рабочий лист Excel, с которым мы будем работать. Конечно, есть несколько способов доступа к листу, поэтому я обычно демонстрирую, как использовать win32com с Excel, потому что он очень интуитивно понятен.

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

     A    
1   "d"
2   "c"
3   "b"
4   "a"
5   "c"

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

sheet.Rows(1).Delete()

Это создает:

    A
1   "c"
2   "b"
3   "a"
4   "c"

Далее Позволяет отсортировать ячейки в порядке возрастания (хотя я бы порекомендовал извлечь значения в Python и выполнить сортировку в списке и отправить значения обратно)

rang = sheet.Range("A1","A4")
sheet.Sort.SetRange(rang)
sheet.Sort.Apply()

Это создает:

    A
1   "a"
2   "b"
3   "c"
4   "c"

А теперь мы получим различные значения из столбца. Главное, что нужно забрать здесь, - это как извлечь значения из ячеек. Вы можете выбрать несколько ячеек одновременно и с помощью sheet.Range("A1","A4") или получить доступ к значениям, просматривая ячейку за ячейкой с sheet.Cells (row, col). Диапазон на несколько порядков быстрее, но Cells немного легче для отладки.

#Get a list of all Values using Range
valLstRange = [val[0] for val in sheet.Range("A1","A4").Value]

#Get a list of all Values using Cells
valLstCells = [sheet.Cells(row,1).Value for row in range(1,4)]

#valLstCells and valLstRange both = ["a","b","c","c"]

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

wbk.SaveAs("C:/savedWorkbook.xlsx")

И все готово!

ИНФОРМАЦИЯ О COM

Если вы работали с VBA, .NET, VBscript или любым другим языком для работы с Excel, многие из этих методов Excel будут выглядеть одинаково. Это потому, что все они используют одну и ту же библиотеку, предоставленную Microsoft. Эта библиотека использует COM, который является способом Microsoft предоставлять API программистам, которые не зависят от языка. Сам COM - более старая технология, и ее сложно отладить. Если вы хотите получить больше информации о Python и COM, я настоятельно рекомендую Python Programming на Win32 от Mark Hammond. Он - парень, который кричит после установки Python на Windows в официальном установщике.msi.

АЛЬТЕРНАТИВЫ ДЛЯ WIN32COM

Я также должен отметить, что есть несколько фантастических альтернатив с открытым исходным кодом, которые могут быть быстрее, чем COM, в большинстве ситуаций и работать на любой ОС (Mac, Linux, Windows и т. Д.). Все эти инструменты анализируют заархивированные файлы, которые содержат.xlsx. Если вы не знали, что файл.xlsx - это.zip, просто измените расширение на.zip, и вы сможете изучить его содержимое (что интересно сделать хотя бы один раз в своей карьере). Из них я рекомендую Openpyxl, который я использовал для анализа и создания файлов Excel на сервере, где производительность была критической. Никогда не используйте win32com для действий сервера, так как он открывает внепроцессный экземпляр excel.exe для каждого экземпляра, который может иметь утечку.

РЕКОМЕНДАЦИЯ

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

Другие вопросы по тегам