Lesen und Schreiben der Zellen-Inhalte von Excel-Tabellen.

Lesen und Schreiben der Zellen-Inhalte von Excel-Tabellen.

Beide Excel-Dateiformate werden unterstützt:

Die Funktionen dienen zum Lesen und Schreiben von Textinhalten von Excel-Tabellen.

Tabellenformate werden von den priint:comet Plugins nicht ausgewertet.

Um es mal positiv zu sagen: Der Umgang von Excel mit Schriften ist sehr kreativ. Je nachdem, wo eine Schrift ausgewählt wurde und welche Schrift verwendet wird, gibt es sieben (!) verschiedene Schreibweisen für die Kombination aus Schriftfamilie und Schriftschnitt. Generell werden im Dialog Zelle formatieren->Schriftart und in der Liste der Schriften der Toolbar unterschiedliche Schriftnamen angezeigt (und verwendet!).

Die Tabelle zeigt die unterschiedlichen Schreibweisen examplarisch am (nicht existierenden) Font Howgrotesque.

Schriftname Beschreibung
Howgrotesque Bd Dialog Zelle formatieren->Schriftart
Howgrotesque Bold Liste der Schriften der Toolbar. Angezeigt wird darüberhinaus aber nur der Familenname Howgrotesque.
Howgrotesque-Bold In manchen Schriften wird Postscript-Name der Schrift verwendet.
HowgrotesqueBold Mitunter findet Excel einen Schriftnamen, den nicht mal die Schriftsammlung findet.
Howgrotesque Fett Manchmal wird der Stilname auch in lokaler übersetzung verwendet.
Howgrotesque Kursiv, Fett Hat die Schrift mehrere Einstellungen, kann der Stilname auch durch Komma getrennt sein.
Howgrotesque Extrabreit, Schrä Schriftnamen werden generell bei bei 31 Zeichen abgeschnitten. Die Information über den Bold-Schnitt geht hier also glatt verloren (und wird auch in Excel nicht mehr angewendet).

Mit den Zusatz-Einstellungen für Fett und Kursiv kann außerdem die Darstellung einer Schrift geändert werden. Ist kein entsprechender Schriftschnitt installiert oder verfügbar, wird die Fett- bzw. Kursivschrift dabei on the fly berechnet. Es entsteht ein sogenannter fake Bold bzw. Italic. Von InDesign®, Illustrator® oder PDF-Generatoren wird dieses Verhalten nicht unterstützt.

überprüfen Sie daher bei der Verwendung der Schriftschnitte Bold, Italic und BoldItalic vorher immer, ob die gewählte Schrift überhaupt einen entsprechenden Schriftschnitt hat.

Um das Maß vollzumachen, kommt Excel zusätzlich mit eigenen Schriften. So enthält das Mac-Bundle von Excel enthält im Ordner Microsoft Excel.app/Contents/Resources/DFonts über 200 eigene Schriften. Diese Schriften werden bei Bedarf geladen und können nur von Excel verwendet werden (jedenfalls solange sie nur in diesem Bundle liegen).

Das ist jetzt alles nicht besonders schön. Zur Lösung haben wir eine sogenannte FontDB eingerichtet, die fest eingebaut ist und bei Bedarf nach den jeweils gültigen Schriftnamen durchsucht wird. Die FontDB enthält aktuell fast 2.000 Schriftschnitte. Zusätzlich haben wir alle fast 500 Schriften, die wir gefunden haben in Excel im Dialog und in der Liste der Toolbar geprüft und die FontDB entsprechend angepasst.

Mit einiger Wahrscheinlichkeit werden die von Ihnen verwendeten Schriften also schon richtig angewendet werden können.

Wird ein Schriftname trotzdem nicht in der FontDB gefunden, werden automatisch alle auf Ihrem Rechner installierten TrueType-, TrueTypeContainer- und OpenType-Schriften (ttf, ttc, otf) durchsucht:

Das Durchsuchen der installierten Schriften kann einmalig nach Programmstart einige Zeit (etwa 2-4) Sekunden dauern! Falsche oder fehlende Angaben in den Schriften können darüberhinaus zu Fehlern bei der Suche nach einer Schrift führen - und Fehler in Schriften gibt es jede Menge. Bei der Erstellung der FontFB mussten wir feststellen, dass ungefähr 20-25% aller Schriften Fehler insbesondere in den Angaben zu Schriftstärke, Neigung und Laufweite haben.

Aus Performance-Gründen und zur Vermeidung von Fehlern raten wir dringend, unbekannte Schriften in Ihrer lokalen Font-DB einzutragen. Hinweise dazu finden Sie hier:

Zur Auflösung der verschiedenen von Excel verwendeten Schriftnamen kann der Excel-Schriftname mit # getrennt an den Namen der Schriftfamilie angefügt werden. So finden Sie die für einen FontDB-Eintrag nötigen Informationen:

Attribut Beschreibung Beispiel
font Name der Schriftfamilie wie er z.B. in InDesign® verwendet wird. font="Meta Pro"
font mit # Vollständiger Name aus Schriftfamilie und -schnitt wie er in Excel verwendet wird. Die Angabe wird mit # getrennt hinter dem Namen der Schriftfmilie angegeben. Den verwendeten Namen finden Sie im Logfile:
# Search definition for Excel font 'MetaPro-CondBook'
font="Meta Pro#MetaPro−CondBook"
face Name des Schriftschnittes wie er z.B. in InDesign® verwendet wird. face="Condensed Book"
style, weight, stretch Angaben zur Ausprägung der Schrift. Die Werte ergeben sich durch Vergleich mit den anderen Schriftschnitten der Schriftfamilie. Beachten Sie aber, dass es genau eine Variante mit den Werten n/400/0 geben muß! style="n"
weight="400"
stretch="-2"

Hier ein Beispiel für Erweiterungen der FontDB:

<variant
 	font="Meta Pro#MetaPro-CondBook"
 	face="Condensed Book"
 	style="n"
 	weight="400"
 	stretch="-2"
/>
<variant
 	font="Meta Pro#MetaPro-CondBold"
 	face="Condensed Bold"
 	style="n"
 	weight="700"
 	stretch="-2"
/>

Datum und Zeit können von Excel in etwa 175 verschiedenen Sprachen angezeigt werden. Alle dafür verwendeten Zeittrenner, Monats- und Tagenamen sind Teil der Programm-Resourcen von Excel. Von den priint:comet Plugins und von comet_pdf werden diese Angaben mit Hilfe der installierten Locales des Betriebssystems berechnet. Die jeweils benötigte Locale wird im Logfile ausgegeben:

# Set locale 'hy_AM' for Excel datetime format '[$-42B]dd/mmm/yyyy;@'

Kaum ein Betriebssystem enthält alle von Excel verwendeten Locales. Die Installation zusätzlicher Locales hängt stark vom Betriebsystem und von den bereits installierten Locales ab. Dabei können wir Ihnen leider nicht helfen. Sie können aber für jede Locale eine (möglichst nahe) Ausweich-Locale festlegen, die statt dessen verwendet werden wird. Mehr zu Ausweich-Locales finden Sie hier.

Nach der Übersetzung in die Zielsprache können Zeittrenner, Monats- und Tagnamen Zeichen enthalten, die in der Zellschrift nicht definiert sind. Zum Beispiel enthält die Standardschrift Calibri keine japanischen, hebräischen oder armenischen Schriftzeichen. Excel wählt dann für einen japanischen Monatsnamen automatisch eine passende Schrift aus. Welche Schrift dabei verwendet wird, kann nicht ausgewählt werden. Von den priint:comet Plugins und von comet_pdf werden standardmäßig keine Schriftersetzungen gemacht. Sie können aber für jede Locale geeignete Schriften festlegen. Mehr zu Schriftersetzungen für Locales finden Sie hier.

Wird für ein Excel-Datum die aktuelle Sprache des Betriebssystems verwendet, wird Excel das Datum auf einem anderen Rechnern automatisch an dessen Sprache zeigen. Mit einem deutschen Betriebssystem werden Sie also ein deutsches Datum sehen, mit einem englischen Betriebssystem ein englisches. Wollen Sie die eigene Sprache fest einstellen, müssen Sie das explizit in einem benutzerdefinerten Format festlegen!

Von den priint:comet Plugins wird in diesem Fall die Sprache der Plugins (de_DE, en_US, fr_FR, ja_JP) verwendet. In comet_pdf können Sie die Sprache mit Hilfe der Programm-Option --lang [DE|EN|FR|JP] festlegen.

Überraschenderweise ersetzt Excel die Zeichen '/' und ':' in Zeitangaben automatisch durch die Datums- bzw. Uhrzeittrenner des Betriebsystemes (und nicht in der Locale des Zellformates). Daran haben wir uns in den priint:comet Plugins und in comet_pdf gehalten, verwenden aber (immerhin) die Sprache der Plugins (de_DE, en_US, fr_FR, ja_JP). In comet_pdf können Sie die Sprache mit Hilfe der Programm-Option --lang [DE|EN|FR|JP] festlegen.

Zur Definition von Ausweich-Locales und Schriftersetzungen verwenden Sie die Konfigurationsdatei datetime_locales.xml. Diese Datei wird (in dieser Reihenfolge) an folgenden Orten gesucht. Spätere Angaben überschreiben frühere:

  1. Ordner werkii Ihrer Voreinstellungen
  2. Ordner Plug-Ins von InDesign® bzw. Illustrator® (nicht bei comet_pdf)
  3. Ordner der Plugins bzw. Programm-Ordner von comet_pdf
  4. Aktuelle Datenverbindung (nicht in Datenbank-Verbindungen)

Es gibt zwei Typen von Definitionen:

Hier ein Beispiel:

<datetime_locales>
 
 	<!-- Map Afrikaans to English (US) - the default on Mac -->
 	<datetime_locale name="af_ZA">
 		<substitution>en_US</substitution>
 		<font/>
 		<face/>
 		<size/>
 	</datetime_locale>
 
 	<!-- Change font for Armenian datetimes -->
 	<datetime_locale name="hy_AM">
 		<substitution/>
 		<font>Arial Unicode MS</font>
 		<face/>
 		<size>120%</size>
 	</datetime_locale>
 
 	<!-- Change font for Japanese datetimes -->
 	<datetime_locale name="ja_JP">
 		<substitution/>
 		<font>HGPGothicE</font>
 		<face/>
 		<size>75%</size>
 	</datetime_locale>
 
</datetime_locales>

Bilder von Tabellenzellen werden als temporäre Dateien in den lokalen Cache-Ordner geladen. Bitte beachten Sie folgende Einschränkungen:

Folgende Rückgaben werden bei Bildern geliefert:

Bilder können zur Zeit nur von InDesign® importiert werden!

Zur vereinfachten Abfrage von Zellinhalten in Platzhaltern kann die 'Sprache' excelquery verwendet werden.

Bitte beachten Sie, dass die Sprache excelquery aussschließlich in Platzhaltern und nur zur Ermittlung der Inhalte einzelner Zellen definiert ist. In cScript wird excelquery nicht unterstützt; hier können die Abfragen auf einfache Weise mit den Befehlen des hier beschriebenen Moduls excel gemacht werden.

Die Definition der Sprache ist sehr einfach:

[functionVariables]

"excelFile"
select "formatString"
  with cell
  { ( and | , ) cell }

Zur Einleitung hier ein kleines Beispiel, das einen Preis in der gleichen Schrift wie in der Excel-Datei ausgibt und bei dem der Cent-Betrag hochgestellt ist. Aus dem Excel-Wert 123.56789 wird dann beispielsweise 123,57.

Der Wert steht in der Zelle B1 der Tabelle ttt der Datei aaa.xlsx des Desktops. Die erhaltene Zahl zuerst mit Hilfe der Funktion int auf eine Ganzzahl gekürzt. Danach wird die Zelle erneut gelesen, uns interessiert jetzt aber nur die Schrifteinstellung der Zelle, die soll auf den festen Wert "," angewendet werden (Damit das Komma in der gleichen Schrift erscheint wie der Preis). Und schließlich wird der Wert ein drittes Mal geholt, jetzt interessiert uns aber nur der Cent-Betrag, also die (gerundeten) ersten zwei Nachkommastellen des Wertes aus Excel. Wir erhalten also drei Strings. Im Formatstring werden diese Ausgaben entsprechend zusammengefasst.

"$DESKTOP/aaa.xlsx"
select "Unser Preis %s%s<cPosition:Superscript>%s<cPosition:>" with
    tt ttt!B1 int and
    tt ttt!B1 value "," and
    tt ttt!B1 cent

Wie in allen anderen Platzhaltern sind auch hier Funktionsvariablen zur Konfiguration der Platzhalter in InDesign® resp. Illustrator® erlaubt. Die Definitionen werden wie gewohnt direkt am Anfang der Platzhalter-Anweisung gemacht.

Hier ein einfaches Beispiel.

#pragma var "cell//Zelle"
#pragma var "fmt//Format" "plain//Unformatiert" "tt//TaggedText" "html//HTML"

Neben den per Funktionsvariablen defnierten <Tags> der Anweisung sind natürlich auch alle Tags der Platzhalterumgebung wie <ID>, <ID2>, usw. definiert.

Die Entscheidung, ob eine Anweisung ein Excel- oder ein XML-Query ist, wird anhand der Dateiendung getroffen. Excel-Dateien müssen die Endungen xlsx oder xls haben. Unvollständige Pfade werden relativ zum aktuellen XML-Ordner aufgelöst. $ALIASSE am Anfang des Pfades sind erlaubt.

Die Angabe der Datei erfolgt in Anführungszeichen.

Hier ein Beispiel.

"$DESKTOP/aaa.xlsx"

Im Formatstring legen Sie fest, wie die folgenden Zellinhalte formatiert werden und welche (Zwischen)texte zusätzlich ausgegeben werden sollen. Die Syntax entspricht der allgemein verwendeten Form für formatierte Textausgabe in cScript. Als Wert der %-Marker wird dabei jeweils der Inhalt der nächsten Zelldefinition der Anweisung verwendet. Die Inhalte der Zellen müssen dabei jeweils in das entsprechende Zielformat umgewandelt werden können. Ein %f erwartet also einen Zellinhalt, der in eine Zahl umgewandelt werden kann usw.. Es sind beliebig viele %-Marker erlaubt, aber fehlende Zelldefinitionen können zu Fehlern in der Ausführung führen!

Der Formatstring muss in Anführungszeichen eingeschlossen werden!

Hier ein Beispiel in TaggedText-Notation.

"Unser Preis : %s%s<cPosition:Superscript>%s<cPosition:>"

Die Zellen definieren die Inhalte der %-Marker im Formatstring. Für jeden %-Marker wird genau eine Zelldefinition mit dem passenden Datentyp erwartet. Die erste Zelldefinition wird mit dem Schlüsselwort with vom Formatstring getrennt. Zelldefinitionen werden durch and oder Komma (,) voneinander getrennt.

Hier die allgemeine EBNF-Syntax einer Zelldefinition:

cell			:= numtype address numfunctions
 				|  stringtype address functions
numtype := int   | float | double stringtype := string | plain   | tt   | html
address := [ sheet '!' ] ( cellName | cellAddress ) sheet := ( '"' Name_of_Sheet '"' ) | Name_of_Sheet | Index_of_Sheet cellName := [A-Za-z]+[0-9]+ cellAddress := row ',' col [onebased]
numfunctions := { numfunction } numfunction := int   | cent   | round fractions   | script action_id
functions := { function | numfunction } function := upper | lower   | reverse   | folder | file | shortfile | extender   | substr startpos length   | rsubstr startpos length   | trim '"' letter '"'   | token '"' letter '"' tokennumber   | value '"' any text '"'

Das sieht komplizierter aus, als es ist : Jede Zelldefinition beginnt mit der einleitenden Typdefinition. Darauf folgt die Adressierung der Zelle im Excel-Dokument. Danach können Zellinhalte, die einen Text enthalten (string, plain, tt, html) mit eingebauten oder selbst implmentierten Funktionen bearbeitet werden.

Zellinhalte können als Ganzzahlen, Kommazahlen oder als Text geholt werden. Beachten Sie bitte, dass Zahlen auch als Text geholt werden können. Umgekehrt können aber Texte in aller Regel nicht als Zahlen geholt werden!

Folgende Datentypen werden unterstützt:

Schlüssel Typ Beschreibung
int Ganzzahlen Liefere den Inhalt der Zelle als Ganzzahl. Kommazahlen der Excel-Tabelle werden auf den ganzzahligen Anteil verkleinert. (123.89 ergibt also 123) Textinhalte können in aller Regel nicht in Ganzahlen konvertiert werden!. Im Formatstring können diese Werte u.a. mit %d geschrieben werden.
float, double Kommazahlen Liefere den Inhalt der Zelle als Kommazahl (mit bis zu 20 Stellen). Textinhalte können in aller Regel nicht in Kommazahlen konvertiert werden!. Im Formatstring können diese Werte u.a. mit %f oder %.2f geschrieben werden.
plainstring Unformatierter Text

Liefere den Inhalt der Zelle als unformatierten Text. Zahlen werden als Kommazahlen mit bis zu 20 Stellen dargestellt.

Bildzellen liefern den vollständigen Pfad der geladenen Bilddatei.

Im Formatstring können diese Werte u.a. mit %s geschrieben werden.

tt TaggedText-formatierter Text

Liefere den Inhalt der Zelle als TaggedText-formatierten Text. Bei nicht durch Funktionen nachbearbeitete Texte werden dabei, wenn vorhanden, die RichText-Einstellungen des Textes übernommen. Sonst wird die Schrifteinstellung der Zelle verwendet. Im Formatstring können diese Werte u.a. mit %s geschrieben werden.

Bildzellen liefern eine gültige <w2inline>-Definition zum Anlegen eines eingebetteten Inlines des Bildes.

Beginnt der Formatstring nicht mit einem gültigen TT-Trailer, wird automatisch ein %!TT vor den Text gesetzt. In einer Anweisung dürfen TaggedText und HTML nicht gemischt werden.

Die sogenannten Design-Farben von Excel und deren Abtönungen können aktuell nicht unterstützt werden. Schrift in diesen Farben wird schwarz dargestellt.

html HTML-formatierter Text

Liefere den Inhalt der Zelle als HTML-formatierten Text. Bei nicht durch Funktionen nachbearbeitete Texte werden dabei, wenn vorhanden, die RichText-Einstellungen des Textes übernommen. Sonst wird die Schrifteinstellung der Zelle verwendet. Im Formatstring können diese Werte u.a. mit %s geschrieben werden.

Bildzellen liefern eine gültige <img>-Definition zur geladenen Bilddatei.

Beginnt der Formatstring nicht mit einem gültigen HTML-Trailer, wird automatisch ein %!TT_html_ vor den Text gesetzt. In einer Anweisung dürfen HTML und TaggedText nicht gemischt werden.

Die sogenannten Design-Farben von Excel und deren Abtönungen können aktuell nicht unterstützt werden. Schrift in diesen Farben wird schwarz dargestellt.

Zellen werden über den Namen des Arbeitsblattes (sheet) und den Zellnamen oder den Zellindex adressiert. Platzhalter verwenden in der Regel 1-basierte Zellindexe zur Kennzeichnung der Zellen. Mit dem (optionalen) Post-Operator onebased werden die Zellindexe entsprechend um 1 verkleinert.

address		:= [ sheet '!' ] ( cellName | cellAddress)
sheet			:= ( '"' Name_of_Sheet '"' ) | Name_of_Sheet | Index_of_Sheet
cellName		:= [A-Za-z]+[0-9]+
cellAddress	:= row ',' col [onebased]

Folgende Angaben werden unterstützt:

Angabe Wert Beschreibung
Arbeitsblatt leer Das erste Arbeitsblatt der Tabelle wird verwendet
Zahl ! 0-basierter Index des Arbeitsblattes. Nach der Angabe muß zwingend ein Ausrufezeichen (!) folgen!
Name_ohne_Leerzeichen ! Name des Arbeitsblattes. Nach der Angabe muß zwingend ein Ausrufezeichen (!) folgen!
"Name mit Leerzeichen" !
'Name mit Leerzeichen' !
Name des Arbeitsblattes in Anführungszeichen. Nach der Angabe muß zwingend ein Ausrufezeichen (!) folgen!
Zelle A1, A2, ... Als Namen werden die in Excel gebräuchlichen Angaben A1, A2, ..., B1, B2, ... , AA1, ... unterstützt.
row, col 0-basierter Zeilen,Spalten-Index der Zelle. Als 0,0-Index wird die erste nicht-leere Zelle verwendet. Achtung : Die erste nicht-leere Zelle muß nicht zwangsläufig die Zelle A1 sein, siehe first_col und first_row.

Hier einige Angaben gültiger Adressen für Zellen:

A1              // Zelle A1 des ersten Arbeitsblattes
0,0             // Erste nicht-leere Zelle des ersten Arbeitsblattes
2!A1            // Zelle A1 des dritten Arbeitsblattes
2!0,0           // Erste nicht-leere Zelle des dritten Arbeitsblattes
Daten!A1        // Zelle A1 des Arbeitsblattes Daten
Daten!0, 0      // Erste nicht-leere Zelle des Arbeitsblattes Daten
"Daten M"!A1    // Zelle A1 des Arbeitsblattes Daten M
"Daten M"!0, 0  // Erste nicht-leere Zelle des Arbeitsblattes Daten M

Nachdem ein Wert aus der Excel-Datei abgeholt wurde, kann er mit Hilfe eingebauter oder selbst implementierter Funktionen bearbeitet werden. Beachten Sie bitte, dass die String-Funktionen wie upper, substr usw. nur für Textwerte verwendet werden können! Die Bearbeitung der Funktionen erfolgt strikt sequenziell: Die erste Funktion erhält den Originaltext aus der Excel-Datei, die zweite Funktion die Ausgabe der ersten Funktion usw..

Mögliche Funktionsparameter werden durch mindestens ein Whitespace (nicht Komma) getrennt.

RichText-Informationen der Excel-Zelle können, wie auch in Excel, in diesem Fall nicht übernommen werden. Für die formatierte Ausgabe wird immer die Schrifteinstellung der Zelle verwendet.

Folgende Funktionen sind definiert:

Funktion Parameter Beschreibung Beispiel
int keine

Entfernen der Nachkommastellen einer Zahl. Der Ganzzahl-Anteil der Zahl wird nicht gerundet!

Achtung:Werte vom Typ float bzw. double behalten ihren Datentyp. Um das Ergebnis im Ausgabestring ohne Nachkommastellen zu erhalten, verwenden Sie %.0f.

123.789 wird zu 123
round int - Genauigkeit Runden einer Ganzzahl auf die angegebene Genauigkeit (z.B. 100).

Runden einer Kommazahl auf die angegeben Anzahl von Nachkommastellen (z.B. 2)
round 100 macht aus 1187 1200

round 0 macht aus 123.789 124
cent keine

Umwandeln der ersten beiden Nachkommastellen in eine zweistellige und gerundete Ganzzahl zwischen 00-99.

Achtung: Werte vom Typ float bzw. double behalten ihren Datentyp. Um das Ergebnis im Ausgabestring ohne Nachkommastellen zu erhalten, verwenden Sie %.0f.

Aus 123.1004 wird 10
Aus 123.789 wird 79
Aus 123.001 wird 00
upper, lower keine Umwandeln des Textes in Groß- bzw. Kleinbuchstaben Aus Hallo Köln wird HALLO KÖLN
Aus PräHistorisch wird prähistorisch
reverse keine Umkehren eines Textes Aus Hänschen wird nicht Hans sondern nehcsnäH
folder, file, shortfile, extender keine Ermitteln von Teilen eines Pfades
substr int  - Startposition
int  - Zeichenzahl
Teilstring eines Textes. Position und Anzahl sind jeweils die Anzahl von Buchstaben (und nicht Bytes). substr 1 1 von Hänschen ist ä (obwohl das UTF-8 ä aus zwei Bytes besteht).
substr int - Startposition
int - Zeichenzahl
Teilstring vom Ende eines Textes. Position und Anzahl sind jeweils die Anzahl von Buchstaben (und nicht Bytes). rsubstr 2 1 von Köln ist ö (obwohl das UTF-8 ö aus zwei Bytes besteht).
trim str - Trennzeichen Entferne alle Vorkommen des Trennzeichens str an Anfang und Ende des Strings. trim "-" von ---Info--- ist Info.
token str - Trennzeichen
int - Index
Hole das n-te Token eines mit str getrennten Strings token " " 1 von Guten Morgen ist Morgen.
value str - Beliebiger Text Der ermittelte Zelltext wird duch str ersetzt. Die Funktion ist sinnvoll, wenn in die formatierte Textausgabe Zwischentext einegsetzt werden soll, der aber genauso formatiert werden soll, wie der Zelltext (siehe Beispiel).
script int - Action-ID Ausführen einer definierten Aktion der Tabelle/Datei actions des aktuellen Datenpools. Das Skript verfügt über folgende globale Variablen:
  • Die folgenden Variablen enthalten den aktuellen Wert der Zelle vor dem Skriptaufruf und dürfen im Skript geändert werden. Wird das Skript fehlerfrei beendet (im Allgemeinen also mit return 0;), wird der neue Wert zur Weiterverwendung übernommen. Welche Variable dabei verwendet wird, hängt vom Datentyp der Zell-Definition im excelquery-Aufruf ab:
    • int * gResultInt; Zelldefinitionen vom Typ int
    • float * gResultFloat; Zelldefinitionen vom Typ float oder double
    • String gResultString; Zelldefinitionen vom Typ plain, string, tt, ...
  • Folgende weitere globale Variablen sind definiert. Diese Variablen dürfen nicht geändert werden!
    • String gExcelPath; Vollständiger Pfad der aktuellen Excel-Datei.
    • ExcelBook gExcel; Die aktuell geöffnete Excel-Datei. Die Datei darf vom Skript nicht geschlossen werden!
    • Weiter sind die folgenden allgemeinen globalen Variablen definiert: gRecordID, gRecordID2, gRecordID3, gRecordStringID, gRecordStringID1, gRecordStringID2, gRecordStringID3 und gDocumentID.
Hier ein sehr einfaches Skript:
int main ()
{
   string::append (
       gResultString,
       "from script");
   return 0;
}

Damit ist eigentlich alles gesagt.

static ExcelBook excel::open(
  char* path,
  int autosave = 0,
  int useGlobal = 1)

Öffne eine Excel-Datei.

Name Typ Default Beschreibung
Return ExcelBook   0 : Fehler
sonst : Geöffnete Excel-Datei zur Weiterverwendeng in den excel-Funktionen, siehe die Beschreibungen des Parameters useGlobal.
path char* oder String - Vollständiger Pfad der Excel-Datei. Der Pfad darf mit einem $ALIAS-Namen beginnen.
autoSave int 0 Soll die Datei vor dem Schließen automatisch gesichert werden?

0 : Nein
1 : Ja
useGlobal int 1 Datei global oder nur für das aktuelle Skript öffnen?

0 : Datei nur für das aktuelle Skript öffnen. In diesem Fall muss das erhaltene Ergebnis der Funktion mit close wieder geschlossen werden!

1 : Datei global öffnen. Die Excel-Datei bleibt bis zur nächsten Idle-Time oder zum close geöffnet. Wurde die Datei bereits in einem vorherigen Skript geöffnet, wird diese bereits geöffnete Datei zurückgegeben. Da Sie die Datei wahrscheinlich in mehreren Skripten verwenden wollen, ist das das empfohlene Vorgehen.

v4.1.7 R26836, 21. Apr 2020

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

close
comet.excel.open

static int excel::count_sheets(ExcelBook ebook)

Anzahl der Arbeitsblätter der Excel-Datei.

Name Typ Default Beschreibung
Return int   Anzahl der Arbeitsblätter in der Excel-Datei

0 : Fehler bei der Ausführung
ebook ExcelBook - Mit excel::open geöffnete Excel-Datei

v4.1.7 R26846, 22. Apr 2020

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

open
comet.CExcelBook.getSheetCount

static char* excel::nth_sheet(ExcelBook ebook, int nth)

Name des n-ten Arbeitsblattes einer Excel-Datei

Name Typ Default Beschreibung
Return char*   Name des n-ten Arbeitsblattes der Excel-Datei
"" : Fehler

Der Rückgabewert darf nicht verändert werden und wird bei folgenden Aufrufen der Funktion überschrieben. Hier finden Sie Informationen zu readonly-Rückgaben von Funktionen.

ebook ExcelBook - Mit excel::open geöffnete Excel-Datei
int nth - 0-basierter Index des Arbeitsblattes
#include "internal/types.h"
#include "internal/text.h"
int main () { ExcelBook ebook; String str = string::alloc (); int n;
// Open the Excel file // ebook = excel::open ("$DESKTOP/aaa.xlsx"); if (!ebook) { showmessage ("Cannot open Excel file"); string::release (str);
return 0; }
// Collect all sheet names // for (n = 0; n < excel::count_sheets (ebook); n++) { string::append (str, "%s\n", excel::nth_sheet (ebook, n)); } frame::replace (gFrame, str);
// Clean up // excel::close (ebook); string::release (str);
return 0; }

v4.1.7 R26846, 22. Apr 2020

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

open
count_sheets
comet.CExcelBook.getSheetName

static int excel::first_row(ExcelBook ebook, char* sheet)

Ermittle den Index der ersten verwendeten Zeile einer Excel-Tabelle.

Name Typ Default Beschreibung
Return int   >= 0 : 0-basierter Index der ersten benutzen Zeile im Arbeitslatt

-1 : Fehler
ebook ExcelBook - Mit excel::open geöffnete Excel-Datei
sheet char* oder String "" Name des Arbeitsblattes
"" : Erstes Arbteisblatt der Datei

v4.1.7 R26846, 22. Apr 2020

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

open
last_row
first_col
last_col
comet.CExcelBook.getFirstRow

static int excel::last_row(ExcelBook ebook, char* sheet)

Ermittle den Index der ersten nicht verwendeten Zeile unter einer Excel-Tabelle.

Name Typ Default Beschreibung
Return int   >= 0 : 0-basierter Index der ersten unbenutzten Zeile unter der Tabelle

-1 : Fehler
ebook ExcelBook - Mit excel::open geöffnete Excel-Datei
sheet char* oder String "" Name des Arbeitsblattes
"" : Erstes Arbteisblatt der Datei

v4.1.7 R26846, 22. Apr 2020

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

open
first_row
first_col
last_col
comet.CExcelBook.getLastRow

static int excel::first_col(ExcelBook ebook, char* sheet)

Ermittle den Index der ersten verwendeten Spalte einer Excel-Tabelle.

Name Typ Default Beschreibung
Return int   >= 0 : 0-basierter Index der ersten benutzen Spalte im Arbeitslatt

-1 : Fehler
ebook ExcelBook - Mit excel::open geöffnete Excel-Datei
sheet char* oder String "" Name des Arbeitsblattes
"" : Erstes Arbteisblatt der Datei

v4.1.7 R26846, 22. Apr 2020

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

open
first_row
last_row
last_col
comet.CExcelBook.getFirstColumn

static int excel::last_col(ExcelBook ebook, char* sheet)

Ermittle den Index der ersten nicht verwendeten Spalte hinter einer Excel-Tabelle.

Name Typ Default Beschreibung
Return int   >= 0 : 0-basierter Index der ersten unbenutzten Spalte hinter der Tabelle

-1 : Fehler
ebook ExcelBook - Mit excel::open geöffnete Excel-Datei
sheet char* oder String "" Name des Arbeitsblattes
"" : Erstes Arbteisblatt der Datei

v4.1.7 R26846, 22. Apr 2020

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

open
first_row
last_row
first_col
comet.CExcelBook.getLastColumn

static float excel::get_rowheight(
  ExcelBook ebook,
  char* sheet,
  int row)

Höhe einer Zeile einer Tabelle

Name Typ Default Beschreibung
Return float   > 0.0 : Höhe der Zeile in Punkten
0.0 : Fehler
ebook ExcelBook - Mit excel::open geöffnete Excel-Datei
sheet char* oder String - Name des Arbeitsblattes
"" : Erstes Arbeitsblatt der Datei
row int - 0-basierte Zeile der Tabelle

v4.1.7 R26848, 24. Apr 2020

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

get_colwidth
comet.CExcelBook.getRowHeight

static float excel::get_colwidth(
  ExcelBook ebook,
  char* sheet,
  int col,
  float* excelV)

Breite einer Spalte einer Tabelle relativ zur Gesamtbreite der Tabelle.

Name Typ Default Beschreibung
Return float   > 0.0 : Prozentualer Anteil der Spalte an der Gesamtbreite der Tabelle im Bereich [0.0 - 1.0)

0.0 : Fehler

Microsoft definiert die Breite von Spalten auf sehr eigenwillige Art:

Die Spaltenbreite wird als die Anzahl der Zeichen der maximalen Ziffernbreite der Zahlen 0, 1, 2, ..., 9 gemessen, wie sie in der Schriftart des normalen Stils dargestellt wird.

Was auch immer das bedeutet, dieser Wert wird jedenfalls in den Dokumenten als Spaltenbreite angegeben. Wir sagen da mal hier nichts dazu 😷 aber mit diesem Wert werden Sie wahrscheinlich nicht allzuviel anfangen können 😧.

Wir liefern als Ergebnis der Spaltenbreite daher den prozentualen Anteil der Spalte an der Gesamtbreite der Tabelle.

ebook ExcelBook - Mit excel::open geöffnete Excel-Datei
sheet char* oder String - Name des Arbeitsblattes
"" : Erstes Arbeitsblatt der Datei
col int - 0-basierte Spalte der Tabelle
excelV float* 0 In der Excel-Datei hinterlegte Spaltenbreite, siehe oben.

0 : Wert ignorieren

v4.1.7 R26848, 24. Apr 2020

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

get_rowheight
comet.CExcelBook.getColumnWidth

static float excel::get_colwidth_pt(
  ExcelBook ebook,
  char* sheet,
  int col)

Breite einer Spalte einer Tabelle.

Name Typ Default Beschreibung
Return float   Breite der Spalte in pt

0.0 : Fehler
ebook ExcelBook - Mit excel::open geöffnete Excel-Datei
sheet char* oder String - Name des Arbeitsblattes
"" : Erstes Arbeitsblatt der Datei
col int - 0-basierte Spalte der Tabelle


priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

get_rowheight

static float excel::get_merge(
  ExcelBook ebook,
  char* sheet,
  int row,
  int col,
  int* oRowStart,
  int* oRowEnd,
  int* oColStart,
  int* oColEnd)

Ermittle den verbundenen Bereich einer Zelle.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
ebook ExcelBook - Mit excel::open geöffnete Excel-Datei
sheet char* oder String - Name des Arbeitsblattes
"" : Erstes Arbeitsblatt der Datei
row int - 0-basierte Zeile der Tabelle
col int - 0-basierte Spalte der Tabelle
oRowStart int * - [Rückgabe] 0-basierte Zeilennummer der Ankerzelle
0 : Wert ignorieren
oRowEnd int * - [Rückgabe] 0-basierte erste Zeile, die nicht mehr zum Bereich gehört
0 : Wert ignorieren
oColStart int * - [Rückgabe] 0-basierte Spaltennummer der Ankerzelle
0 : Wert ignorieren
oColEnd int * - [Rückgabe] 0-basierte erste Spalte, die nicht mehr zum Bereich gehört
0 : Wert ignorieren


priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

comet.CExcelBook.getCellArea

static int excel::get_color(
  ExcelBook ebook,
  char* sheet,
  int row,
  int col,
  int which,
  int* oRed,
  int* oGreen,
  int* oBlue)

Ermittle die Farbeinstellungen einer Zelle.
Wenn Sie die äußeren Randfarben für verschmolzene Zellen abrufen, müssen Sie diese aus den tatsächlichen Indizes und nicht aus der Ankerzelle abrufen.
Wenn Sie z. B. versuchen, den rechten Rand einer Zelle zu bestimmen, die von Spalte 0-1 zusammengeführt wurde, müssen Sie die rechte Randfarbe an Spalte 1 abfragen.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
ebook ExcelBook - Mit excel::open geöffnete Excel-Datei
sheet char* oder String - Name des Arbeitsblattes
"" : Erstes Arbeitsblatt der Datei
row int - 0-basierte Zeile der Tabelle
col int - 0-basierte Spalte der Tabelle
which int - Welche Farbe soll geholt werden?

0: Rahmenfarbe links
1: Rahmenfarbe oben
2: Rahmenfarbe rechts
3: Rahmenfarbe unten
4: Rahmenfarbe diagonal
5: Muster Vordergrund
6: Muster Hintergrund
oRed int * - [Rückgabe] Rotanteil der Farbe im Bereich [0-255]
Wenn der Wert negativ ist, ist die Farbe nicht gesetzt.
oGreen int * - [Rückgabe] Grüanteil der Farbe im Bereich [0-255]
Wenn der Wert negativ ist, ist die Farbe nicht gesetzt.
oBlue int * - [Rückgabe] Blauanteil der Farbe im Bereich [0-255]
Wenn der Wert negativ ist, ist die Farbe nicht gesetzt.


priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

comet.CExcelBook.getColor

static int excel::get_border(
  ExcelBook ebook,
  char* sheet,
  int row,
  int col,
  int which,
  int* oStyle)

Ermittle den Rahmenstil einer Zelle.
Wenn Sie den äußeren Rahmenstil für verschmolzene Zellen abrufen, müssen Sie diese aus den tatsächlichen Indizes und nicht aus der Ankerzelle abrufen.
Wenn Sie z. B. versuchen, den rechten Rand einer Zelle zu bestimmen, die von Spalte 0-1 zusammengeführt wurde, müssen Sie die rechte Seite an Spalte 1 abfragen.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
ebook ExcelBook - Mit excel::open geöffnete Excel-Datei
sheet char* oder String - Name des Arbeitsblattes
"" : Erstes Arbeitsblatt der Datei
row int - 0-basierte Zeile der Tabelle
col int - 0-basierte Spalte der Tabelle
which int - Welcher Stil soll geholt werden?

0: Rahmenstil links
1: Rahmenstil oben
2: Rahmenstil rechts
3: Rahmenstil unten
4: Rahmenstil diagonal
oStyle int * - [Rückgabe] Gesetzter Rahmenstil:
-1 - Nicht gesetzt oder Fehler
0 - BORDERSTYLE_NONE
1 - BORDERSTYLE_THIN
2 - BORDERSTYLE_MEDIUM
3 - BORDERSTYLE_DASHED
4 - BORDERSTYLE_DOTTED
5 - BORDERSTYLE_THICK
6 - BORDERSTYLE_DOUBLE
7 - BORDERSTYLE_HAIR
8 - BORDERSTYLE_MEDIUMDASHED
9 - BORDERSTYLE_DASHDOT
10 - BORDERSTYLE_MEDIUMDASHDOT
11 - BORDERSTYLE_DASHDOTDOT
12 - BORDERSTYLE_MEDIUMDASHDOTDOT
13 - BORDERSTYLE_SLANTDASHDOT


priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

comet.CExcelBook.getBorderStyle

static int excel::read(
  ExcelBook ebook,
  char* sheet,
  int row,
  int col,
  int type,
  char* value,
  int maxlen = 0,
  int format = 0,
  int dtFormat = -1)

Lies einen Wert aus einer Excel-Tabelle.

Die sogenannten Design-Farben von Excel und deren Abtönungen können aktuell nicht unterstützt werden. Schrift in diesen Farben wird schwarz dargestellt.

Beachten Sie bitte die Hinweise zu Schriftname und -schnitt. Fehlende Schriftzuweisungen können mit lokalen Erweiterungen der Schrifttabelle (FontDB) lokal korrigiert werden.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
ebook ExcelBook - Mit excel::open geöffnete Excel-Datei
sheet char* oder String - Name des Arbeitsblattes
"" : Erstes Arbeitsblatt der Datei
row int - 0-basierte Zeile der Tabelle
col int - 0-basierte Spalte der Tabelle
type int - Datentyp der Rückgabe-Variable value.

1 - kInt : Ganzzahl
2 - kFloat : Kommazahl
3 - kString : Text, Datum oder Bild. Siehe Parameter dtFormat für Datumsformate

kInt und kFloat können nur in Zahlenzellen verwendet werden. In anderen Zellen erzeugt die Funktion einen Fehler!
value int*, float* char*, String - Rückgabevariable (abhängig vom Wert des Parameters type). Nach erfolgreicher Ausführung der Funktion enthält die Variable den Wert der Zelle. Beim Versuch, Zahlen aus Text- oder Datumszellen zu lesen, gibt die Funktion einen Fehler zurück!

1 - kInt : &int_var
2 - kFloat : &float_var
3 - kString : char* oder String
maxlen int 0 Nur bei type = kString und char* : Maximale Länge des Ergebnisses.

0 : Beliebig
format int 0 Nur bei type = kString : Format der Ausgabe

0 - kExportPlain : Unformatierter Text
1 - kExportTagged : TaggedText
12 - kExportHTML : HTML

-1 - kUndef : Direkter Wert. Die Ausgabe ist nützlich, wenn Sie den Zellinhalt ohne Excel-Formatierung erhalten wollen. Kommazahlen werden mit (bis zu) sechs Nachkommastellen angegeben. Zeitangaben erfolgen im Format dtFormat. Ist dtFormat = -1, wird yyyymmddhhmmss verwendet.

Für die Ausgabe von Bildern siehe hier.
dtFormat int -1 Behandlung von Datum und Uhrzeit. Die Angabe wird nur bei benutzerdefinierten Zellformaten angewendet!

-1 : Zellformat anwenden, siehe Datum & Uhrzeit

sonst : Gültiges DateTime-Format, siehe system::now
#include "internal/types.h"

Öffne eine Excel-Datei und schreibe den Inhalt der ersten Tabelle in den aktuellen Rahmen. Wenn die Datei nur einmal in diesem Skript verwendet werden soll, sollte sie mit excel::close am Skriptende geschlossen werden.

#pragma plain
#include "internal/types.h" #include "internal/text.h"
int main () { ExcelBook ebook; String str = string::alloc (); String vs = string::alloc (); String ipath = string::alloc (); ItemRef fr = item::alloc (); int r, c, hostApp; char sheet[256]; int result; int w, h, x, y;
system::version(&hostApp); if (hostApp < 2) item::define (fr, 0, item::getint (gFrame)); else item::define (fr, 0, 221); // comet_pdf
// Open the Excel file // ebook = excel::open ("$DESKTOP/Formats.xlsx"); if (!ebook) { showmessage ("Cannot open Excel file"); string::release (str);
return 0; } strcpy (sheet, "Table 2");
// Read data and build the output string *str* // string::append (str, "%!TT"); // Init the output
for (r = excel::first_row (ebook, sheet); r < excel::last_row (ebook, sheet); r++) { for (c = excel::first_col (ebook, sheet); c < excel::last_col (ebook, sheet); c++) { wlog ("", "\n##### CELL [%c%d]\n", c+0x41, r+1);
string::append (str, "<ParaStyle:aaa>[%c%d] Type = %d : ",   c+0x41,   r+1,   excel::get_type (ebook, sheet, r, c));
if (excel::get_type (ebook, sheet, r, c) == 8) { // It'a an image. // Add the image path and geometry to the output. // excel::read_image (ebook, sheet, r, c, ipath, &w, &h, &x, &y); string::append (str, "('%s', %d x %d with offset %d x %d) ",   ipath,   w, h,   x, y); }
// Read cell data as TaggedText. // Numbers are formatted as close as possible to Excel. // Images are created as embedded inlies automatically. // result = excel::read (ebook, sheet, r, c, kString, vs, 0, kExportTagged); if (result == 0) { string::append (str, "%s", vs); } else { string::append (str, "Error while reading\n"); } } string::append (str, "<ParaStyle:aaa>"); }
// Finally insert the complete text // frame::replace (fr, str);
// There is no need to close the book again. // This is done automatically at the next idle time. //
return 0; }

Für eine HTML-Ausgabe ersetzen Sie lediglich den Präfix %!TT durch %!TT_html_ und ändern bei excel::read das Format in kExportHTML.

 

v4.1.7 R26836, 21. Apr 2020
Parameter dtFormat und decimals seit v4.2 R32100

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

open
get_type
get_format
get_font
read_image
comet.CExcelBook.read
comet.CExcelBook.read

static int excel::read_image(
  ExcelBook ebook,
  char* sheet,
  int row,
  int col,
  String path = 0,
  int* width = 0,
  int* height = 0,
  int* xoffset = 0,
  int* yoffset = 0)

Lies ein Bild aus einer Excel-Tabelle. Das Bild wird dabei automatisch in eine egene Bilddatei geladen.

Zellen von Excel-Tabellen werden nur dann als 'Bildzellen' erkannt, wenn die Zelle keinen Text enthält! Die Zelle eines Bildes ist die Zelle der Tabelle, in der die linke obere Ecke des Bildes liegt. Ob eine Zelle ein Bild enthält, kann mit Hilfe der Funktion excel::get_type (=8) ermittelt werden.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode

noImageErr (101) : Keine Bildzelle
ebook ExcelBook - Mit excel::open geöffnete Excel-Datei
sheet char* oder String - Name des Arbeitsblattes
"" : Erstes Arbeitsblatt der Datei
row int - 0-basierte Zeile der Tabelle
col int - 0-basierte Spalte der Tabelle
path String oder char* 0 Bei erfolgreicher Ausführung der vollständige Pfad der geladenen Bilddatei. Sonst bleibt der Wert unverändert. Beachten Sie bitte, dass String und char* bereits Pointer sind, hier also das sonst für Ausgabevariablen übliche & nicht verwendet werden darf!

0 : Angabe ignorieren
width int* 0 Bei erfolgreicher Ausführung die Breite des Bildes in Pixeln. Sonst bleibt der Wert unverändert. Beachten Sie bitte, dass der Aufruf eine Adresse auf eine Zahl ist, üblicherweise also als &var geschrieben wird!

0 : Angabe ignorieren
height int* 0 Bei erfolgreicher Ausführung die Höhe des Bildes in Pixeln. Sonst bleibt der Wert unverändert. Beachten Sie bitte, dass der Aufruf eine Adresse auf eine Zahl ist, üblicherweise also als &var geschrieben wird!

0 : Angabe ignorieren
xoffset int* 0 Bei erfolgreicher Ausführung der Abstand des Bildes in Pixeln von der linken Seite der Zelle. Sonst bleibt der Wert unverändert. Beachten Sie bitte, dass der Aufruf eine Adresse auf eine Zahl ist, üblicherweise also als &var geschrieben wird!

0 : Angabe ignorieren
yoffset int* 0 Bei erfolgreicher Ausführung der Abstand des Bildes in Pixeln von der oberen Kante der Zelle. Sonst bleibt der Wert unverändert. Beachten Sie bitte, dass der Aufruf eine Adresse auf eine Zahl ist, üblicherweise also als &var geschrieben wird!

0 : Angabe ignorieren

v4.2 R32245, 1. Feb 2023

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

open
get_type
read

static int excel::get_font(
  ExcelBook ebook,
  char* sheet,
  int row,
  int col,
  int fmt,
  String tagsOpen,
  String tagsClose)

Schrifteinstellungen einer gegebenen Zelle. Die Funktion ist nötig, wenn Sie Zellen mit Zahlengaben (z.B. eine Währungsangabe) ausgeben wollen. Mit read erhalten Sie lediglich den Zahlenwert ohne Anwendung der Formatierung (z.B. zwei Nachkommenstellen und €). Diese Formatierung können Sie im Skript nachholen. Aber wenn Sie dieses Ergebnis dann in der gleichen Schrift wie in Excel ausgeben wollen, benötigen Sie die Schrifteinstellungen der Zelle.

Die Funktion gibt in Abhängigkeit von der Anzahl der Funktionsparameter den Zellstil entweder als HTML/CSS- bzw. TaggedText-String oder als Einzelwerte der Eigenschaften zurück:

Beachten Sie bitte, dass die Rückgabewerte weight und italic der Funktion eine Kombination aus der gewählten (fake)-Einstellung von Excel und dem verwendeten Schriftschnitt sind!

Die sogenannten Design-Farben von Excel und deren Abtönungen können aktuell nicht unterstützt werden. Schrift in diesen Farben wird schwarz dargestellt.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
ebook ExcelBook - Mit excel::open geöffnete Excel-Datei
sheet char* oder String - Name des Arbeitsblattes
"" : Erstes Arbeitsblatt der Datei
row int - 0-basierte Zeile der Tabelle
col int - 0-basierte Spalte der Tabelle
⇨ Ausgabe als Formatstring, genau 7 Parameter erforderlich
fmt int - Ausgabeformat

1 - kExportTagged : TaggedText
12 - kExportHTML : HTML
tagsOpen char* oder String - Allokierter String für die formatspezifische Ausgabe der Tags zum Setzen des Fonts der Zelle.
tagsClose char* oder String - Allokierter String für die formatspezifische Ausgabe der Tags zum Zurücksetzen des Fonts der Zelle.
⇨ Einzelwerte, mind. 8 Parameter erforderlich
fontname char* oder String - Name der Schriftfamilie
fontface char* oder String - Name des Schriftschnittes unter Berücksichtigung von bold und italic. Der Schriftschnitt wird für <cTypeface:...> von TaggedText benötigt. Für die Ausgabe von HTML wird der Schriftschnitt nicht benötigt.
size int* - Schriftgröße in Punkten.
red int* - Rot-Anteil der Schriftfarbe im Bereich 0-255
green int* 0 Grün-Anteil der Schriftfarbe im Bereich 0-255
blue int* 0 Blau-Anteil der Schriftfarbe im Bereich 0-255
weight int* 0 Schriftstärke mit den Werten 100, 200, ..., 900
italic int* 0 Schrägschrift?

0 : Nein
1 : Ja

Die Angabe wird die Ausgabe von HTML benötigt. Für TaggedText wird der Wert nicht benötigt, hier wird die Schriftneigung wird über den Schriftschnitt festgelegt.
strikeThru int* 0 Ist der Text durchgestrichen?

0 : Nein
1 : Ja
underline int* 0 Ist der Text unterstrichen?

0 : Nö
1 : Einfach unterstrichen über _
2 : Doppelt unterstrichen über _
3 : Einfach unterstrichen unter _
4 : Doppelt unterstrichen unter _
position int* 0 Schriftposition

0 : Normal
1 : Hochgestellt
2 : Tiefgestellt
stretch int* 0 Laufweite der Schrift

-4 : ultra-condensed
-3 : extr-condensed
-2 : condensed
-1 : semi-condensed
0 : normal
1 : semi-expanded
2 : expanded
3 : extrs-expanded
4 : ultra-expanded
#include "internal/types.h"

Schreibe den Inhalt der ersten Tabelle in der gleichen Textformatierung wie in Excel. Lokale Änderungen in den Zellen werden dabei ignoriert (können aber mit read gemacht werden.)

#include "internal/types.h"
#include "internal/text.h"
int main () { ExcelBook ebook; String str = string::alloc (); String openTags = string::alloc (); String closeTags = string::alloc (); String vs = string::alloc (); int r, c;
// Open the Excel file // ebook = excel::open ("$DESKTOP/aaa.xlsx"); if (!ebook) { showmessage ("Cannot open Excel file"); string::release (str);
return 0; }
frame::replace (gFrame, "");
// Load data // for (r = excel::first_row (ebook); r < excel::last_row (ebook); r++) { for (c = excel::first_col (ebook); c < excel::last_col (ebook); c++) { // Get the formated styles // excel::get_font (ebook, "", r, c, kExportTagged, openTags, closeTags);
string::set (str, "%%!TT[%c%d] : ", c+0x41, r+1);
if (excel::read (ebook, "", r, c, kString, vs, 0) == 0) { string::append (str, "%s", openTags); string::append (str, "%s", vs); string::append (str, "%s", closeTags); } else { string::append (str, "Error while reading\n"); }
frame::append (gFrame, str); frame::append (gFrame, "\n"); } frame::append (gFrame, "\n"); }
// Clean up // excel::close (ebook); string::release (str);
return 0; }

Hier ein Vorschlag zum Umsetzen der Excel-Schrifteigenschaften in HTML/CSS.

#include "internal/types.h"
#include "internal/text.h"
int get_style (String sopen, String sclose, ExcelBook ebook, int r, int c, char * sheet) { String fontname = string::alloc (); String fontface = string::alloc (); int size; int red, green, blue; int weight, italic, strikeThru, underline, position, stretch; int res;
// Init // string::set (sopen, ""); string::set (sclose, "");
// Read font settings of cell // res = excel::get_font (ebook, sheet, r, c,   fontname, fontface,   &size,   &red, &green, &blue,   &weight,   &italic,   &strikeThru,   &underline,   &position,   &stretch); if (res != 0) { return 1; }
// Create and fill a new HTML span // string::append (sopen, "<span style='");
string::append (sopen, "font-family:\"%s\"; ", fontname); string::append (sopen, "font-size:%dpt; ", size); string::append (sopen, "font-weight:%dpt; ", weight); string::append (sopen, "color:rgb (%d, %d, %d); ", red, green, blue);
if (strikeThru) string::append (sopen, "text-decoration:line-through; "); if (underline) string::append (sopen, "text-decoration:underline; ");
if (position == 1) string::append (sopen, "vertical-align:super; "); if (position == 2) string::append (sopen, "vertical-align:sub; ");
if (stretch == -4)      string::append (sopen, "font-stretch:ultra-condensed; "); else if (stretch == -3) string::append (sopen, "font-stretch:extra-condensed; "); else if (stretch == -2) string::append (sopen, "font-stretch:condensed; "); else if (stretch == -1) string::append (sopen, "font-stretch:semi-condensed; "); else if (stretch == 0)  string::append (sopen, "font-stretch:normal; "); else if (stretch == 1)  string::append (sopen, "font-stretch:semi-expanded; "); else if (stretch == 2)  string::append (sopen, "font-stretch:expanded; "); else if (stretch == 3)  string::append (sopen, "font-stretch:extra-expanded; "); else if (stretch == 4)  string::append (sopen, "font-stretch:ultra-expanded; ");
string::append (sopen, "'>");
// Add italic if needed // if (italic) string::append (sopen, "<i>");
// Create the close tags in reverse order // if (italic) string::append (sclose, "</i>"); string::append (sclose, "</span>");
// Clean up // string::release (fontname); string::release (fontface);
return 0; }
int main () { String str = string::alloc (); ExcelBook ebook; int vi; float vf; String vs = string::alloc (); String format = string::alloc (); String formula = string::alloc (); String sopen = string::alloc (); String sclose = string::alloc (); int r, c; int formatID; int convqu = prefs::get_convert_quotas (); int dtY, dtM, dtD, dth, dtm, dts;
// Open the Excel file // ebook = excel::open ("$DESKTOP/aaa.xlsx"); if (!ebook) { showmessage ("Cannot open Excel file"); string::release (str);
return 0; }
prefs::set_convert_quotas (kOff);
// Load some data here // frame::replace (gFrame, ""); for (r = excel::first_row (ebook); r < excel::last_row (ebook); r++) { for (c = excel::first_col (ebook); c < excel::last_col (ebook); c++) { get_style (sopen, sclose, ebook, r, c, "");
string::set (str, "%%!TT_html_[%c%d] : %s", c+0x41, r+1, sopen);
if (excel::read (ebook, "", r, c, kInt, &vi) == 0) { string::append (str, "%d", vi); } else if (excel::read (ebook, "", r, c, kFloat, &vf) == 0) { string::append (str, "%.6f", vf); } else if (excel::read (ebook, "", r, c, kString, vs) == 0) { if (excel::get_type (ebook, "", r, c) == 5) { system::time_scan (vs, yyyymmddhhmmss, &dtY, &dtM, &dtD, &dth, &dtm, &dts); string::append (str, "%02d.%02d.%d, %02d:%02d:%02d", dtD, dtM, dtY, dth, dtm, dts); } else { string::append (str, "%s", vs); } }
string::append (str, sclose);
formatID = 0; string::set (format, ""); excel::get_format (ebook, "", r, c, &formatID, format); if (formatID > 0) string::append (str, " / Format %d", formatID); if (string::length (format)) string::append (str, " <span class=\"format\">%s</span>", format);
if (excel::get_formula (ebook, "", r, c, formula) == 0) { string::append (str, " / <span class=\"formula\">%s</span>", formula); }
string::append (str, " ");
frame::append (gFrame, str); frame::append (gFrame, "\n"); } frame::append (gFrame, "\n"); }
// Clean up // string::release (str); string::release (format); string::release (formula); string::release (sopen); string::release (sclose); excel::close (ebook);
prefs::set_convert_quotas (convqu);
return 0; }

v4.1.7 R26855, 23. Apr 2020

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

open
read
get_format
comet.CExcelBook.getFontFamily
comet.CExcelBook.getFontFace
comet.CExcelBook.getFontSize
comet.CExcelBook.getFontColor
comet.CExcelBook.getFontStrikeThrough
comet.CExcelBook.getFontUnderline
comet.CExcelBook.getFontPosition
comet.CExcelBook.getFontWeight
comet.CExcelBook.getFontItalic
comet.CExcelBook.getCellFormatTags

static int excel::get_type(
  ExcelBook ebook,
  char* sheet,
  int row,
  int col)

Typ einer Zelle einer Excel-Tabelle.

Name Typ Default Beschreibung
Return int   Typ der Tabellenzelle

0 : Fehler
1 : Zahl (int oder float)
3 : Text
4 : Boolean
5 : Datum, Uhrzeit
6 : Blank, die Zelle enthält lediglich eine Format-Information
7 : Empty, die Zelle existiert nicht
8 : Bild (seit v4.2 R32250) Die Zelle eines Bildes ist die Zelle, in der die linke obere Ecke des Bildes liegt. Nur Zellen ohne Text können als Bildzellen erkannt werden.
ebook ExcelBook - Mit excel::open geöffnete Excel-Datei
sheet char* oder String - Name des Arbeitsblattes
"" : Erstes Arbeitsblatt der Datei
row int - 0-basierte Zeile der Tabelle
col int - 0-basierte Spalte der Tabelle

v4.1.7 R26836, 21. Apr 2020

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

comet.CExcelBook.getCellType

static int excel::get_formula(
  ExcelBook ebook,
  char* sheet,
  int row,
  int col,
  char* formula,
  int maxlen = 0)

Formel einer Zelle einer Excel-Tabelle.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
ebook ExcelBook - Mit excel::open geöffnete Excel-Datei
sheet char* oder String - Name des Arbeitsblattes
"" : Erstes Arbeitsblatt der Datei
row int - 0-basierte Zeile der Tabelle
col int - 0-basierte Spalte der Tabelle
formula char* oder String - Formel zur Berechnung des Inhaltes der Zelle
maxlen int 0 Nur bei char* : Maximale Länge des Ergebnisses.

0 : Beliebig

v4.1.7 R26836, 21. Apr 2020

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

comet.CExcelBook.getCellFormula

static int excel::get_format(
  ExcelBook ebook,
  char* sheet,
  int row,
  int col,
  int* formatID,
  char* format,
  int maxlen = 0)

Hole das Format einer Zelle einer Excel-Tabelle.

Die folgende Tabelle enthält eine Liste der Standardformate. Der Ergebnisstring format der Standardformate ist leer. Benutzerdefinierte Formate haben IDs >= 164. Die Definition dieser Formate wird im Ergebnisstring format zurückgegeben. Die IDs 36-163 sind unbenutzt.

IDBeschreibungBeispiel
general format
general number1000
number with decimal point1000,00
number with thousands separator100.000
number with decimal point and thousands separator100.000,00
monetary value, negative in brackets(1000 €)
monetary value, negative is red in brackets(1000 €)
monetary value with decimal point, negative in brackets(1000,00 €)
monetary value with decimal point, negative is red in brackets(1000,00€)
percent value, multiply the cell value by 10075%
percent value with decimal point, multiply the cell value by 10075,00%
scientific value with E character and decimal point1,00E+1
fraction value, one digit10 1/2
fraction value, two digits10 23/95
date value, depends on OS settings11.3.2009
custom date value11. Mär. 09
custom date value11. Mär.
custom date valueMär. 09
custom date value8:30
custom date value8:30:00
custom date value8:30
custom date value8:30:00
custom datetime value11.3.2009 8:30
number with thousands separator, negative in brackets(4.000)
number with thousands separator, negative is red in brackets(4.000)
number with thousands separator and decimal point, negative in brackets(4.000,00)
number with thousands separator and decimal point, negative is red in brackets(4.000,00)
account value5.000
account value with currency symbol5000 €
account value with decimal point5.000,00
account value with currency symbol and decimal point5.000,00 €
custom time value30:55
custom time value20:30:55
custom time value30:55.0
custom value15,2E+3
text valueany text

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
ebook ExcelBook - Mit excel::open geöffnete Excel-Datei
sheet char* oder String - Name des Arbeitsblattes
"" : Erstes Arbeitsblatt der Datei
row int - 0-basierte Zeile der Tabelle
col int - 0-basierte Spalte der Tabelle
formatID int* - ID der Formatanweisung

< 164 : Excel-Standardformat
>= 164 : Benutzerdefiniertes Format. Die Formatanweisung ist im Ergebnisstring format angegeben.
format char* oder String - Benutzerdefinierte Formatanweisung für den Zellinhalt
maxlen int 0 Nur bei char* : Maximale Länge des Ergebnisses.

0 : Beliebig
#include "internal/types.h"

v4.1.7 R26836, 21. Apr 2020

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

comet.CExcelBook.getCellFormat

static int excel::write(
  ExcelBook ebook,
  char* sheet,
  int row,
  int col,
  int type,
  char* value,
  int maxlen = 0)

Schreibe einen neuen Wert in eine Zellen einer Excel-Tabelle.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
ebook ExcelBook - Mit excel::open geöffnete Excel-Datei
sheet char* oder String - Name des Arbeitsblattes
"" : Erstes Arbeitsblatt der Datei
row int - 0-basierte Zeile der Tabelle
col int - 0-basierte Spalte der Tabelle
type int - Welchen Datentyp hat die Zelle in der Excel-Tabelle?

1 - kInt : Ganzzahl
2 - kFloat : Kommazahl
3 - kString : Text
4 - kBool : Bool
value int, float char*, String - Der Datentyp der Variable ist abhängig vom Wert des Parameters type:

1 - kInt : int
2 - kFloat : float
3 - kString : char* oder String
4 - kBool : int
#include "internal/types.h"

Schreiben von Excel-Inhalten

#include "internal/types.h"
#include "internal/text.h"
int main () { ExcelBook ebook; int r;
// Open the Excel file // ebook = excel::open ("$DESKTOP/bbb.xlsx"); if (!ebook) { showmessage ("Cannot open Excel file"); string::release (str); return 0; }
// Write some data here // for (r = 1; r < 11; r++) { excel::write (ebook, "", r, 0, kString, "28.10.2018, 12:34"); }
// Clean up // excel::save (ebook); excel::close (ebook);
return 0; }

v4.1.7 R26836, 21. Apr 2020

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

comet.CExcelBook.write

static int excel::save(ExcelBook* ebook)

Sichern einer Excel-Datei.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
ebook ExcelBook - Mit excel::open geöffnete Excel-Datei

v4.1.7 R26836, 21. Apr 2020

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

open
close
comet.CExcelBook.save

static int excel::to_xml(
  ExcelBook* ebook,
  char* sheet,
  int destType,
  char* dest,
  int maxLen = 0)

Export einer Excel-Tabelle in XML. Die Funktion erzeugt das folgende XML-Format:

<?xml version="1.0" encoding="utf-8"?><rows>
 	<row num="1" id="0">
 		<col name="A" num="1" id="0">
 			<format>Zellformat</format>
 			<value>Direkter Zellinhalt</value>
 			<text>Zellinhalt mit angewendetem Zellformat</text>
 		</col>
 		...
 	</row>
 	...
</rows>

Wir möchten ausdrücklich darauf hinweisen, dass der XML-Export ein Datenexport ist. Für ein komplettes XML mit Zellgrößen, Farben, Linien etc. ist der Export nicht geeignet! Aber Sie können das mit den Funktionen dieses Moduls leicht auch selbst als Skript implementieren.

Hier einige gültige xmlquery-Abfragen

// Alle Zellen mit Nummer und Inhalt
select ...num, num, value node rows.row.cols.col
// Alle Zellen mit Name (A1...) und Inhalt select name||...num, value node rows.row.cols.col
// Alle Zellen mit dem Inhalt 'a' select ...num, num, value node rows.row.cols.col where value='a'
// Alle Zeilen, deren erste beiden Spalten 'a' enthalten select ..num, col.num node rows.row.cols where child_0.value='a' and child_1.value='a'

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
ebook ExcelBook - Mit excel::open geöffnete Excel-Datei
sheet char* oder String - Name des Arbeitsblattes
"" : Erstes Arbeitsblatt der Datei
destType int - Was ist der folgende Parameter dest?

-1 : Allokierter Ergebnisstring
0 : Vollständiger Dateipfad für das Ergebnis
1 : Vollständiger Dateipfad einer überschreibbaren Datei
dest char* oder String - Ergebnisstring oder Dateipfad in Abhänigkeigt des Parameters destType
maxlen int 0 Maximallänge des Ergebnisses in Byte. Der Parameter hat nur dann eine Bedeutung, wenn destType = -1 und dest vom Typ char* / char[nnn] sind.

0 : beliebig lang (Dann sollten Sie aber sicher sein, dass Ihre Zielvariable groß genug ist!)

v4.2 R32320, 9. Feb 2023

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

open
close

static int excel::close(ExcelBook* ebook)

Schließe eine Excel-Datei und entferne das Objekt aus dem Speicher.

Name Typ Default Beschreibung
Return int   0 oder Fehlercode
ebook ExcelBook - Mit excel::open geöffnete Excel-Datei

v4.1.7 R26836, 21. Apr 2020

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

comet.CExcelBook.close

static int excel::col2i(char* colname)

Umrechnen eines Excel-Spaltennamens der Form A, B, ..., Z, AA, AB, ... in eine Zahl.

Name Typ Default Beschreibung
Return int   0-basierter Zahlenwert des Eingabestrings
colname char* oder String - Zeichenkette bestehend aus den Buchstaben A-Z und a-z. Kleinbuchstaben werden dabei automatisch als Großbuchstaben ausgewertet.

Beachten Sie bitte, dass Excel maximal 214 = 16.384 Spalten unterstützt. Das entspricht der Buchstabenkette XFD.

v4.1.7 R27182, 9. Jun 2020

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

i2col
comet.excel.columnToIndex

static char* excel::i2col(int colnum)

Umrechnen einer Spaltenzahl in die in Excel gebräuchliche Form A, B, ..., Z, AA, AB, ... .

Name Typ Default Beschreibung
Return char*   Excel-Name des gegebenen 0-basierten Spaltenindexes
"" : Fehler

Der Rückgabewert darf nicht verändert werden und wird bei folgenden Aufrufen der Funktion überschrieben. Hier finden Sie Informationen zu readonly-Rückgaben von Funktionen.

colnum int - 0-basierter Spaltenindex

Beachten Sie bitte, dass Excel maximal 214 = 16.384 Spalten unterstützt. Das entspricht der Buchstabenkette XFD.

v4.1.7 R27182, 9. Jun 2020

priint:comet InDesign® Plug-Ins, comet_pdf, Illustrator

col2i
comet.excel.indexToColumn

Seit
v4.1.7 R26836, 21. Apr 2020

Alphabetic index HTML hierarchy of classes or Java