This is UltimateRPA Documentation
Excel a UltimateRPA

Excel

K používání této funkčnosti je nutné mít nainstalovaný program Excel od společnosti Microsoft.

Spuštění

Excel spustíme robotem pomocí funkce exec_excel_app. Funkce sama najde cestu k binárnímu souboru aplikace Excel. Jako nepovinný parametr se funkci může předat řetězec s cestou na soubor, který se má v aplikaci Excel otevřít. Pozor, cesta k souboru musí být absolutní. Tato metoda vrací objekt třídy AppExcel, tato třída dědí metody po třídě App a je rozšířená o metody, které usnadní práci v programu Excel.

V prvním příkladu spustíme program Excel a otevřeme v něm nový sešit. Nový sešit zpřístupní metoda add_workbook. Opakovaným použitím metody lze otevřít libovolný počet nových sešitů.

import urpa
def main():
excel_app = urpa.exec_excel_app()
excel_app.add_workbook()
excel_app.set_auto_close(False)

Aktivace aktuálního sešitu nebo listu

Pokud v aplikaci Excel otevřeme alespoň jeden sešit, můžeme ho aktivovat pomocí metod active_workbook nebo active_worksheet. První metoda vrátí objekt třídy ExcelWorkbook, která reprezentuje sešit v Excelu a druhá metoda vrátí objekt třídy ExcelWorksheet, která reprezentuje list. Obě metody v případě, že máme otevřeno více sešitů či záložek, vrátí tu, která je v daném okamžiku aktivní. Udržet si přehled v tom, jestli pracujeme s Excelem, sešitem nebo listem může být ze začátku matoucí a proto je vhodné volit jména proměnných tak, aby byl skript přehledný.

import urpa
def main():
excel_app = urpa.exec_excel_app()
excel_app.add_workbook()
workbook = excel_app.active_workbook()
excel_app.add_workbook()
worksheet = excel_app.active_worksheet()
excel_app.set_auto_close(False)

Seznam sešitů a záložek

Seznam všech aktuálně otevřených sešitů získáme použitím metody workbooks na instanci třídy AppExcel a seznam všech záložek získáme použitím metody sheets na objekt třídy ExcelWorkbook.

V cyklu se projdou všechny sešity, všechny jejich listy a vytiskne do konzole nejdříve jméno sešitu metodou full_name a pak jméno listu metodou name.

import urpa
def main():
excel_app = urpa.exec_excel_app()
excel_app.add_workbook()
excel_app.add_workbook()
workbooks = excel_app.workbooks()
for workbook in workbooks:
worksheets = workbook.sheets()
for worksheet in worksheets:
print(workbook.full_name(), worksheet.name())
excel_app.set_auto_close(False)

Pokud je tato problematika stále nejasná, doporučujeme předchozí příklad rozšířit o váš sešit, který můžete otevřít metodou exec_excel_app. Podle potřeby můžete pro vaše experimentování přidat další, již vytvořené sešity metodou open, které jako argument předáte absolutní cestu na soubor, který chcete otevřít.

Práce se sešitem

Sešit reprezentuje v UltimateRPA třída ExcelWorkbook. V předchozím příkladu jsme již představili dvě metody, které patří do této třídy a to sheets a full_name.

Změnit aktivní sešit lze metodou activate, která na popředí přenese vybraný sešit. V našem případě se po spuštění Excelu vytvoří dva nové sešity. Po tomto kroku je Sešit2 aktivní. Potom se vytvoří seznam všech sešitů a aktivuje se první sešit (Sešit1), který se přenese do popředí.

import urpa
def main():
excel_app = urpa.exec_excel_app()
excel_app.add_workbook()
excel_app.add_workbook()
workbooks = excel_app.workbooks()
workbooks[0].activate()
excel_app.set_auto_close(False)

Pokud bychom chtěli získat z sešitu instanci listu použijeme metodu active_worksheet. Tato metoda vrátí objekt třídy ExcelWorksheet, který představuje aktuálně aktivní list.

Práce s listem

Třída ExcelWorksheet představuje v UltimateRPA list. Z této třídy už jsme již ukázali metodu name, která vrací jméno listu a stejně jako v případě sešitu, se mohou aktivovat listy metodou activate.

Ostatní metody slouží pro výběr buněk, se kterými se bude pracovat. Nejjednodušší z nich je metoda cells, která vrátí objekt třídy ExcelCells, který reprezentuje všechny buňky v daném listu.

Metodě cell se předají dva parametry integer, které představují sloupec a řádek v listu. Metoda vrací objekt třídy ExcelCells představující zvolenou buňku. Pro označení sloupce se nepoužívá abeceda jako je tomu v Excelu, ale číslo, které udává pořadí sloupce. Číslování nezačíná nulou, ale jedničkou. To znamená, že chceme-li získat například buňku A1 (buňka v prvním sloupci a prvním řádku) použijeme tento výraz cell_A1 = worksheet.cell(1, 1).

used_range je poslední metoda v této třídě, která opět vrací instanci třídy ExcelCells. V tomto případě se jedná o blok všech použitých buněk.

import urpa
def main():
excel_app = urpa.exec_excel_app()
excel_app.add_workbook()
worksheet = excel_app.active_worksheet()
all_cells = worksheet.cells()
cell_A1 = worksheet.cell(1, 1)
used_cells = worksheet.used_range()
excel_app.set_auto_close(False)

Práce s buňkami

Třída ExcelCells posune obrazovku na nejnižší možnou úroveň, která představuje buňky Excelu. Vyplnit hodnotu do buňky lze metodou set_value.

import urpa
def main():
excel_app = urpa.exec_excel_app()
excel_app.add_workbook()
worksheet = excel_app.active_worksheet()
cell_A1 = worksheet.cell(1, 1)
cell_A2 = worksheet.cell(2, 1)
cell_A1.set_value(10)
cell_A2.set_value("Robot")
excel_app.set_auto_close(False)

Pokud chceme zjistit, jaká hodnota je v buňce obsažená, použijeme metodu value. Pokud je buňka prázdná, metoda vrátí prázdný řetězec. Vrácená hodnota je vždy typu string a to i v případě, že do buňky byl zadán integer.

import urpa
def main():
excel_app = urpa.exec_excel_app()
excel_app.add_workbook()
worksheet = excel_app.active_worksheet()
cell_A1 = worksheet.cell(1, 1)
print(cell_A1.value())
cell_A1.set_value(10)
print(cell_A1.value())
print(type(cell_A1.value()))
excel_app.set_auto_close(False)

Pro zjištění sloupce a řádku na kterém se buňka nachází použijeme metody column pro sloupec a row pro řádek. Obě vrací integer s číslem sloupce nebo řádku. Číslovaní začíná od 1.

import urpa
def main():
excel_app = urpa.exec_excel_app()
excel_app.add_workbook()
worksheet = excel_app.active_worksheet()
cell_J10 = worksheet.cell(10, 10)
print(cell_J10.column())
print(cell_J10.row())
excel_app.set_auto_close(False)

Ke zjištění počtu sloupců a řádku slouží metody columns_count a rows_count. Obě vracejí integer.

import urpa
def main():
excel_app = urpa.exec_excel_app()
excel_app.add_workbook()
worksheet = excel_app.active_worksheet()
all_cells = worksheet.cells()
print(all_cells.columns_count())
print(all_cells.rows_count())
excel_app.set_auto_close(False)

Nasledující příklad je o něco složitější než předchozí. Ukážeme v něm, že k jedné buňce se lze dostat metodou cell na úrovni listu a nebo se k buňce lze dostat na úrovni množiny buněk metodou item. V první části kódu se v diagonále vyplní hodnoty 1 až 10. Pak skript 3 sekundy počká a následně zjistí rozsah obsazených sloupců a řádků. Ty se pak v dalším cyklu vyplní hodnotou 1.

from time import sleep
import urpa
def main():
excel_app = urpa.exec_excel_app()
excel_app.add_workbook()
worksheet = excel_app.active_worksheet()
for index in range(1, 11):
worksheet.cell(index, index).set_value(index)
sleep(3)
used_cells = worksheet.used_range()
columns = used_cells.columns_count()
rows = used_cells.rows_count()
for column in range(1, columns + 1):
for row in range(1, rows +1):
used_cells.item(column, row).set_value(1)
excel_app.set_auto_close(False)

Ostatní akce

Ovládací prvky Excelu jsou přístupné jako v jakékoliv jiné aplikaci a tak můžeme aplikaci Excel ovládat pomocí myši nebo klávesových zkratek. Například tímto způsobem lze robotem sešit uložit.