Skriptujeme InDesign (18): Tabulky poprvé - Grafika.cz - vše o počítačové grafice

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Software

Skriptujeme InDesign (18): Tabulky poprvé

Adobe InDesign sazba

17. července 2006, 00.00 | Tabulky jsou v InDesignu objekty, které složitostí svého zpracování přímo volají po
nasazení skriptů. V tomto a příštím díle se tedy podíváme na skriptování u daných prvků
podrobněji. Tento díl bude přitom věnován tvorbě tabulek.

Tabulky jsou v InDesignu objekty, které složitostí svého zpracování přímo volají po nasazení skriptů. V tomto a příštím díle se tedy podíváme na skriptování u daných prvků podrobněji. Tento díl bude přitom věnován tvorbě tabulek.

Základní možnosti tvorby

Tabulky jsou objekty ukládané v kolekci tables, které jsou spojeny s textovým obsahem, tedy objekty Story, Paragraph, Word, Text atp. a samozřejmě i výběrem (pokud je textový) a vkládacím bodem (insertion point). Umístit tabulku do dokumentu znamená použít metodu add pro kolekci tables u objektů naznačených typů. Obecný tvar dané metody je:

add(způsob_umístění,reference,nastavení)

kde způsob_umístění je pozice, na kterou je tabulka umístěna (výchozí je za daný objekt), reference určuje k jakému objektu se určení umístění vztahuje, nastavení pak dovolují nastavit výchozí parametry tabulky. Všechny parametry dané metody jsou nepovinné. Příklady:

//Vytvoří tabulku na konci prvního odstavce první story v dokumentu
app.activeDocument.stories[0].paragraphs[0].tables.add();

//Umístí tabulku na začátek výběru
app.selection[0].tables.add(LocationOptions.atBeginning);

Co se nastavení tabulky týče, výchozí hodnoty jsou zde takové, že tabulka je nastavena přes celou šíři daného textového rámečku a má čtyři řádky a čtyři sloupce, přičemž nemá záhlaví ani zápatí. Dané hodnoty a spolu s tím i mnoho dalšího (včetně obsahu jednotlivých buněk) se dají měnit, jak již bylo řečeno, při samotném vytváření tabulky a pak i kdykoli později. Hodnoty, které je zde možno nastavit, si čtenář může nastudovat z referenční příručky skriptování (viz s. 1091-1097) a k leckterým vlastnostem se pak vrátíme v příštím výkladu o manipulaci s tabulkami, na tomto místě si tedy uvedeme jen základní příklad pro pochopení principu práce v daném případě:

//Umístí novou tabulku na konec první story dokumentu
//Její šířka je 20 cm, počet řádků 10, počet řádků záhlaví 1, počet sloupců 6,
//prvních šest buněk obsahuje čísla od jedné do šesti, osmá buňka obsahuje číslo 8, ostatní buňky jsou prázdné,
//tabulka je ohraničena tahy o šířce 1 mm
app.activeDocument.stories[0].tables.add(LocationOptions.atEnd,undefined,{width:"15 cm", bodyRowCount:10, headerRowCount:1,columnCount:6,
contents: ["1","2","3","4","5","6","","8"],
leftBorderStrokeWeight: "1mm", rightBorderStrokeWeight: "1mm", bottomBorderStrokeWeight: "1mm", topBorderStrokeWeight: "1mm",});

Převod textu

Jinou obvyklou metodou tvorby tabulek je převod textu vybraného v dokumentu InDesignu. Ten zajistí metoda convertToTable, která má následující syntaxi:

convertToTable(oddělovač_sloupců,oddělovač_řádků,počet_sloupců)

kde oddělovač_sloupců určuje znak, který odděluje sloupce, oddělovač_řádků znak, jenž odděluje řádky a počet_sloupců určuje počet sloupců, což je zapotřebí pouze jsou-li oddělovače řádků a sloupců totožné. Všechny uvedené parametry jsou nepovinné, nejsou-li použity, provede se konverze podle výchozích nastavení InDesignu.

Příklady:

Máme-li v dokumentu InDesignu vybrán následující textový úsek (mezi položkami jsou vloženy tabulátory)

Jméno   Příjmení    Datum narození
Jan     Novák   14. 5. 1995
Josef   Novák   12. 3. 1967
Jiří    Novák   1. 1. 2004

skriptidtab1-1f.jpg

provedeme jeho převod na tabulku následujícím příkazem:

app.selection[0].convertToTable("\t","\r");

skriptidtab1-2f.jpg

Z jediného vybraného odstavce pak uděláme tabulku například takto:

app.selection[0].convertToTable("\r","\r",1);

Jinou možnost tvorby tabulky daným způsobem představuje načtení obsahu textového souboru, této variantě se nicméně budeme věnovat až v části věnované databázovému publikování.

Import z Excelu

Konečně často používanou možnost jak vytvořit tabulku, představuje i odpovídající import z Microsoft Excelu. Importní dialog zde dovoluje nastavit řadu charakteristik, jak je ostatně nejlépe vidět z příslušného dialogového okna.

skriptidtab1-3f.jpg

Použití dané funkce ve skriptech je nicméně komplikováno chybou ve skriptovacím enginu InDesignu CS2. Správně by totiž příkaz place, použitý například pro textové objekt či rámeček měl zajistit vložení určité části dokumentu Excelu podle následující syntaxe:

place(soubor,dialog,nastavení)

kde soubor je určení souboru, jenž má být importován, dialog je logická hodnota vypínající/zapínající importní dialog a nastavení pole hodnot, určujících parametry importního dialogu. Když jsme ale spustili následující skript:

var myDoc=app.activeDocument;
myDoc.pages[0].textFrames[0].place(File("/c/clanky/skriptid/tabulka.xls"),false,{tableFormatting: TableFormattingOptions.excelFormattedTable});

odmítl se importní dialog vypnout a jeho hodnoty zůstaly ve výchozí podobě. Daný problém by mohl samozřejmě nepříjemně nabourat automatizované zpracování obsahu uvedeného typu. V diskusní fóru o skriptování InDesignu jsme nicméně našli kód Davea Saunderse, který daný problém řeší skriptem vypínajícím uživatelskou interaktivitu. Netvrdíme, že se jedná o jediné možné a zcela bezproblémové řešení, daný skript zde každopádně s drobnými úpravami uvádíme, a to i jako ukázku toho, co vše a jak lze při importu z Excelu kontrolovat.

//Určení dokumentu Excelu, který budeme importovat
var myFile=File("/c/clanky/skriptid/tabulka.xls");
//Lze i jinak, D. Saunders nabízí například
//var myFile = File.openDialog("Choose an Excel file");
//if (myFile == null) { exit() }

//Určení dokumentu do kterého budeme importovat
var myDoc = app.activeDocument;


//Vypnutí interaktivity v CS i CS2
if (app.version == 3) {
 app.userInteractionLevel = UserInteractionLevels.neverInteract;
} else {
 app.scriptPreferences.userInteractionLevel = UserInteractionLevels.neverInteract;
}

//Použití preferencí importu, které jsou nastaveny dále
setXLimportPrefs();
try {
//Import na zadanou pozici
 myDoc.pages[0].textFrames[0].place(myFile);
} catch (e) {
 alert (e + " " + app.excelImportPreferences.errorCode);
 exit();
}
if (app.version == 3) {
 app.userInteractionLevel = UserInteractionLevels.interactWithAll;
} else {
 app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;
}

//Určení charakteristik importu
//některá nastavení jsou zakomentována, tj. v platnosti je místo nich výchozí nastavení importního dialogu
//- v případě potřeby tedy odkomentujeme a nastavíme na vlastní požadované hodnoty.
//Všimněte si zajímavého triku s nastavením aligmentStyle a tableFormatting
//- eliminuje potřebu listování referenční příručkou při změně hodnot po delším čase.
function setXLimportPrefs() {
 with (app.excelImportPreferences) {
  alignmentStyle = [AlignmentStyleOptions.spreadsheet,
    AlignmentStyleOptions.leftAlign,
    AlignmentStyleOptions.rightAlign,
    AlignmentStyleOptions.centerAlign][0];
  //decimalPlaces = 3;
  //errorCode = 0;
  //preserveGraphics = true;
  //rangeName = "";
  //sheetIndex = 0;
  //sheetName = "";
  //showHiddenCells = true;
  tableFormatting = [TableFormattingOptions.excelFormattedTable,
    TableFormattingOptions.excelUnformattedTable,
    TableFormattingOptions.excelUnformattedTabbedText][2];
  useTypographersQuotes = true;
  //viewName = "";
 }
}

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » VSE  

 » Rubriky  » Go verze  

 » Rubriky  » Sazba  

 » Rubriky  » Polygrafie  

 » Rubriky  » Software  

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: