- Python. Работаем с xls через xlwt/xlrd и python-uno
- Python Excel: xlwt, xlrd, xlutils
- PyUNO
- Рекомендую почитать
- Saved searches
- Use saved searches to filter your results more quickly
- python-excel/xlutils
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.rst
- About
- Python. Работаем с xls через xlwt/xlrd и python-uno
- Python Excel: xlwt, xlrd, xlutils
- PyUNO
- Рекомендую почитать
Python. Работаем с xls через xlwt/xlrd и python-uno
Понадобилось без потери данных и функциональности модифицировать xls документы, то есть мы имеем несколько листов в документе, на одном из листов есть фильтры, списки и прочие компоненты современного екселя.
Первое что приходит на ум — это старый-добрый Python Excel (xlwt/xlrd), попробуем реализовать модификацию ячейки с помощью этого инструмента, а потом перейдем к PyUNO.
Python Excel: xlwt, xlrd, xlutils
Более подробно об этих пакетах можно почитать на странице Python Excel.
Для начала установим их:
sudo pip install xlwt xlrd xlutils
import xlwt, xlrd from xlutils.copy import copy as xlcopy source_filename = "/tmp/example.xls" destination_filename = "/tmp/example_new.xls" read_book = xlrd.open_workbook(source_filename, on_demand=True) # Открываем исходный документ read_sheet = read_book.get_sheet(0) # Читаем из первого листа write_book = xlcopy(read_book) # Копируем таблицу в память, в неё мы ниже будем записывать write_sheet = write_book.get_sheet(0) # Будем записывать в первый лист write_sheet.write(0, 0, read_sheet.cell_value(0, 0) + 42) # Прибавим к значению из ячейки "A1" число 42 write_book.save(destination_filename) # Сохраняем таблицу
Простейший пример использования испортит нам документ, в котором есть формулы, фильтры и прочие компоненты таблицы, поэтому это решение нам не подходит.
PyUNO
Теперь попробуем python-uno, его мы тоже установим, в добавок нам необходимо установить libreoffice, так как именно в libreoffice мы и будем производить изменения:
sudo apt-get install python-uno libreoffice
Пакеты python-uno и libreoffice можно установить на разные хосты, так как первый будет клиентом для второго.
Теперь запустим libreoffice на локальном хосте:
libreoffice --accept="socket,host=localhost,port=2002;urp;StarOffice.ServiceManager"
Пример кода по модификации одной ячейки через PyUNO:
import uno source_filename = "/tmp/example.xls" destination_filename = "/tmp/example_new.xls" def get_document(filename): """Небольшая обертка для корретного открытия документа""" local = uno.getComponentContext() resolver = local.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", local) context = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext") desktop = context.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", context) document = desktop.loadComponentFromURL(uno.systemPathToFileUrl(filename), "_blank", 0, tuple()) return document document = get_document(source_filename) # Окроем исходный документ sheet = document.getSheets().getByIndex(0) # Получем первый лист cell = sheet.getCellByPosition(0, 0) # Получим необходимую нам ячейку cell.setString(int(cell.getString()) + 42) # И запишем в неё новый результат # Сохраняем документ document.storeToURL(uno.systemPathToFileUrl(destination_filename), ())
Код далек от идеала, но для презентации возможностей это самое то.
Результат был достигнут - все компоненты в таблице остались не тронутыми, поменялась лишь ячейка, которую мы меняли.
Вообщем python-uno идеально подходит для автоматизации работы с офисными документами без потерь!Рекомендую почитать
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
python-excel / xlutils Public archive
Utilities for working with Excel files that require both xlrd and xlwt.
python-excel/xlutils
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.rst
This package provides a collection of utilities for working with Excel files. Since these utilities may require either or both of the xlrd and xlwt packages, they are collected together here, separate from either package.
xlutils.copy Tools for copying xlrd.Book objects to xlwt.Workbook objects. xlutils.display Utility functions for displaying information about xlrd-related objects in a user-friendly and safe fashion. xlutils.filter A mini framework for splitting and filtering Excel files into new Excel files. xlutils.margins Tools for finding how much of an Excel file contains useful data. xlutils.save Tools for serializing xlrd.Book objects back to Excel files. xlutils.styles Tools for working with formatting information expressed in styles.
Do the following in your virtualenv:
The latest documentation can also be found at: http://xlutils.readthedocs.org/en/latest/
Try the following in this order:
Copyright (c) 2008-2015 Simplistix Ltd. See docs/license.txt for details.
About
Utilities for working with Excel files that require both xlrd and xlwt.
Python. Работаем с xls через xlwt/xlrd и python-uno
Понадобилось без потери данных и функциональности модифицировать xls документы, то есть мы имеем несколько листов в документе, на одном из листов есть фильтры, списки и прочие компоненты современного екселя.
Первое что приходит на ум - это старый-добрый Python Excel (xlwt/xlrd), попробуем реализовать модификацию ячейки с помощью этого инструмента, а потом перейдем к PyUNO.
Python Excel: xlwt, xlrd, xlutils
Более подробно об этих пакетах можно почитать на странице Python Excel.
Для начала установим их:sudo pip install xlwt xlrd xlutils
import xlwt, xlrd from xlutils.copy import copy as xlcopy source_filename = "/tmp/example.xls" destination_filename = "/tmp/example_new.xls" read_book = xlrd.open_workbook(source_filename, on_demand=True) # Открываем исходный документ read_sheet = read_book.get_sheet(0) # Читаем из первого листа write_book = xlcopy(read_book) # Копируем таблицу в память, в неё мы ниже будем записывать write_sheet = write_book.get_sheet(0) # Будем записывать в первый лист write_sheet.write(0, 0, read_sheet.cell_value(0, 0) + 42) # Прибавим к значению из ячейки "A1" число 42 write_book.save(destination_filename) # Сохраняем таблицу
Простейший пример использования испортит нам документ, в котором есть формулы, фильтры и прочие компоненты таблицы, поэтому это решение нам не подходит.
PyUNO
Теперь попробуем python-uno, его мы тоже установим, в добавок нам необходимо установить libreoffice, так как именно в libreoffice мы и будем производить изменения:
sudo apt-get install python-uno libreoffice
Пакеты python-uno и libreoffice можно установить на разные хосты, так как первый будет клиентом для второго.
Теперь запустим libreoffice на локальном хосте:
libreoffice --accept="socket,host=localhost,port=2002;urp;StarOffice.ServiceManager"
Пример кода по модификации одной ячейки через PyUNO:
import uno source_filename = "/tmp/example.xls" destination_filename = "/tmp/example_new.xls" def get_document(filename): """Небольшая обертка для корретного открытия документа""" local = uno.getComponentContext() resolver = local.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", local) context = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext") desktop = context.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", context) document = desktop.loadComponentFromURL(uno.systemPathToFileUrl(filename), "_blank", 0, tuple()) return document document = get_document(source_filename) # Окроем исходный документ sheet = document.getSheets().getByIndex(0) # Получем первый лист cell = sheet.getCellByPosition(0, 0) # Получим необходимую нам ячейку cell.setString(int(cell.getString()) + 42) # И запишем в неё новый результат # Сохраняем документ document.storeToURL(uno.systemPathToFileUrl(destination_filename), ())
Код далек от идеала, но для презентации возможностей это самое то.
Результат был достигнут - все компоненты в таблице остались не тронутыми, поменялась лишь ячейка, которую мы меняли.
Вообщем python-uno идеально подходит для автоматизации работы с офисными документами без потерь!Рекомендую почитать