[GastForen Programmierung/Entwicklung AppleScript Excel | Alle Zellen des ersten Workbooks als Text formatieren

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Excel | Alle Zellen des ersten Workbooks als Text formatieren

Uwe Laubender
Beiträge gesamt: 5316

14. Apr 2016, 11:57
Beitrag # 1 von 9
Bewertung:
(5849 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen zusammen,
folgendes Problem:

Wie steuere ich die Formatierung aller Zellen eines Excel Workbooks?

1. Ich möchte beispielsweise alle Zellen eines leeren Workbooks auf "Text" umstellen.

2. Oder eine Möglichkeit finden, eine Textdatei so zu importieren, dass die Zelleninhalte als "Text" formatiert in den Zellen ankommen.

Microsoft Excel 2011 v.14.6.3 auf OSX 10.7.5

Die Aufgabe ergibt sich aus folgender Problematik:

Ich erstelle per ExtendScript eine Textdatei, die Tabulator-separierte Zeichenketten enthält. Diese Textdatei soll nun in Excel geöffnet werden.

Dies gelingt problemlos, wenn ich die Endung *.xls anstatt *.txt verwende und über die Methode execute() in ExtendScript die Datei öffne. Die Dateiendung xls muss natürlich dazu im System mit Microsoft Excel assoziiert sein.

Leider landen dann Zahlen mit führenden Nullen wie 004 verkürzt als 4 in der Zelle. Preise werden beschnitten: 14,70 => 14,7 , 15,00 => 15 .

Es stellt sich also die Frage:
Kann Excel per AppleScript so voreingestellt werden, dass die Texte als "Text" formatiert in der geöffneten Datei landen? Zu Fuß gelingt das über "Textdatei importieren…" in drei Schritten mit vorangehender Auswahl der Textdatei.

Oder als Alternative:
Kann ich von TextEdit ausgehend die Textinhalte per AppleScript kopieren und in eine vorbereitete Excel-Datei mit einem Workbook über die Zwischenablage einfügen, dessen Zellen bereits als Text formatiert vorliegen? Zu "Fuß" funktioniert das jedenfalls. Das wäre möglicherweise die einfachere Variante.

Kommen wir zum konkreten Skripten. Was habe ich versucht?

Alle Zellen des ersten Worksheets ansprechen und bestehende Formatierung zurücksetzen. Funktioniert schon mal. Wobei sich bei einem leeren Worksheet der used range als falsche Strategie erweisen würde.

Code
tell application "Microsoft Excel" 

-- Funktioniert:
-- Setzt die Formatierung des aktiven Blatts auf "Standard" zurück.
tell active sheet
clear range formats used range
end tell

-- Funktioniert, aber natürlich nicht das gewünschte Ergebnis:
-- set number format of range "A1:B6" to "0"

-- Fehlermeldung.
-- format condition ist aber auch der falsche Ansatz, denke ich:
--set format condition text of range "A1:B6" to "Text"

-- Keine Fehlermeldung.
-- Aber falsches Ergebnis: "Datum" anstatt "Text"
set number format of range "A1:E16" to "Text"

end tell


Ich habe leider sehr wenig Erfahrung mit AppleScript im Allgemeinen und AppleScript und Excel im Besonderen.
Kann mir da jemand etwas auf die Sprünge helfen?
X

Excel | Alle Zellen des ersten Workbooks als Text formatieren

Uwe Laubender
Beiträge gesamt: 5316

14. Apr 2016, 13:40
Beitrag # 2 von 9
Beitrag ID: #548922
Bewertung:
(5822 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich kämpfe mich mittlerweile tapfer durch die (veraltete?) Dokumentation excel-2004-applescript-reference.pdf und bin bei open text file hängengeblieben.

Dort sollte ich über field info den Parameter für "Text" einstellen können.
In etwa so:

Code
tell application "Microsoft Excel" 
open text file filename " … :SampleTextFile.txt" data type delimited field info {{1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}} with tab
end tell


Wenn ich die Syntax korrekt verstanden habe, dann würden die Spalten 1-5 mit dem Parameter 2 gesetzt. Und der steht lt. Dokumentation für "Text" beim Import. Jetzt muss ich "nur" noch das mit dem Dateipfad hinbekommen, denke ich.

(Ein paar Minuten später)

Ja, das funktioniert!

Trotzdem:
Ich wüsste gerne, wie ich ein leeres Excel-Sheet mit "Text" vorformatieren kann.
Und wie ich die Anzahl der Spalten aus der Textdatei ermittelt bekomme. Ok. Das ist hier nicht das Problem, da ich die Textdatei selbst erstelle, aber prinzipiell wäre das doch interessant.


als Antwort auf: [#548915]
(Dieser Beitrag wurde von Uwe Laubender am 14. Apr 2016, 13:42 geändert)

Excel | Alle Zellen des ersten Workbooks als Text formatieren

Hans Haesler
  
Beiträge gesamt: 5826

14. Apr 2016, 17:54
Beitrag # 3 von 9
Beitrag ID: #548943
Bewertung:
(5786 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Uwe!

ich war den ganzen Tag abwesend und habe erst jetzt ganz kurz versuchen können,
für Dein "Trotzdem" eine Lösung zu finden.

Ohne Erfolg. Hatte dabei aber folgende Idee:
– Ein neues Excel-Dokument;
– Befehl+A (um alle Zellen auszuwählen);
– Menü "Format", Artikel "Zellen...";
– die Kategorie "Text" wählen;
– Klick auf den "OK"-Button;
– das Dokument speichern als "Leer.xlsx".

Später kann dieses Dokument per Script geöffnet und befüllt werden.

Gruss, Hans


als Antwort auf: [#548922]

Excel | Alle Zellen des ersten Workbooks als Text formatieren

kkauer
Beiträge gesamt: 661

14. Apr 2016, 20:08
Beitrag # 4 von 9
Beitrag ID: #548945
Bewertung:
(5759 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Hans Haesler ] Später kann dieses Dokument per Script geöffnet und befüllt werden.


Zum Beispiel so (nur mit Excel 2016 getestet):
Code
tell application "Microsoft Excel" 
do shell script "pbcopy < " & quoted form of POSIX path of alias "Macintosh HD:Users:user:Desktop:ESTK-Export.csv"
open alias "Macintosh HD:Users:user:Desktop:laubender.xlsx"
paste special on worksheet sheet 1
end tell



Ich kenne den Umfang des Projekts ja nicht, aber evtl. wäre das Erzeugen einer "echten" Excel-Datei via ExtentScript/Javascript die bessere Alternative? Ob/wie das geht kann ich allerdings ad hoc auch nicht sagen …


als Antwort auf: [#548943]
(Dieser Beitrag wurde von kkauer am 14. Apr 2016, 20:14 geändert)

Excel | Alle Zellen des ersten Workbooks als Text formatieren

Uwe Laubender
Beiträge gesamt: 5316

15. Apr 2016, 07:40
Beitrag # 5 von 9
Beitrag ID: #548946
Bewertung:
(5604 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Habt herzlichen Dank!

Im Moment für diese spezielle Geschichte werde ich die Textdateien öffnen wie ich das im Beitrag 2 hier mache. Da ist die Anzahl der Spalten bekannt. Ich weiss ja welche Spalte ich wie formatieren muss.

Alles andere lasse ich mir in Ruhe durch den Kopf gehen.
Falls ich heute Zeit habe, werde ich noch ein wenig pröbeln.

Interessant ist, dass es keine Möglichkeit zu geben scheint, die Zellen direkt über eine Property in Excel als Text zu formatieren. Den Menübefehl zu testen steht ja noch aus.


Die Idee, die Excel-Datei-Datei direkt zu erstellen, ist auch nicht schlecht.
Ich bin im amerikanischen InDesign-Scripting-Forum auf einen Weg gestoßen, der allerdings beim Test mit InDesign CS6 in einen Fehler lief. Diesen Fehler könnten wir mal analysieren, wenn Zeit ist.

Create Excel file using Indesign javascript
Script by Trevor marked as correct:
https://forums.adobe.com/message/7244998#7244998

Script stoppt in Zeile 69:
Code
app.doScript(myAppleScript,ScriptLanguage.APPLESCRIPT_LANGUAGE); 
// Fehler: "Es wurde Zeilenende erwartet, aber ein Eigenschaft wurde gefunden."


Aber hierfür ist die InDesign-Scriptwerkstatt möglicherweise der geeignetere Ort. Ich werde Trevor mal eine PM schicken.


als Antwort auf: [#548945]

Excel | Alle Zellen des ersten Workbooks als Text formatieren

drerol74
Beiträge gesamt: 507

15. Apr 2016, 09:16
Beitrag # 6 von 9
Beitrag ID: #548948
Bewertung: |||
(5571 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

eventuell noch ein anderer Ansatz:

Eine Excel-XML-Vorlage erstellen, mit »Speichern unter « als Excel 2004-XML-Arbeitsblatt speichern, diese dann als XML-Objekt ablegen und mit JavaSkript bearbeiten/befüllen und wieder in Excel öffnen.

Mit

Code
<Style ss:ID="s62"> 
<NumberFormat ss:Format="@"/>
</Style>


ist hier das Format festgelegt.

Beispiel im Anhang.

Schöne Grüße
Roland


als Antwort auf: [#548946]
Anhang:
zahlen_als_text.xml (2.26 KB)

Excel | Alle Zellen des ersten Workbooks als Text formatieren

Uwe Laubender
Beiträge gesamt: 5316

15. Apr 2016, 10:47
Beitrag # 7 von 9
Beitrag ID: #548958
Bewertung:
(5549 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke, Roland!

Im Moment komme ich gut hin, wenn ich in ExtendScript das entsprechende AppleScript über doScript() abarbeite.

Eine verkürzte Darstellung hier, die noch keinen Speicherbefehl enthält.

Auch ist meine ExtendScript-Funktion noch nicht zu sehen, die zum Erzeugen der Liste für die Spaltenformatierung dient.

Code
var filePath = "\"MB-2:SCRIPTING Documentation-MB-2:EXCEL:InDesign Table to Excel file:SampleTextFile.xls\""; 
var listString = "{{1,2},{2,2},{3,2},{4,2},{5,2}}";

var AppleScript = '''tell application "Microsoft Excel"
activate
open text file filename '''
+filePath+
''' data type delimited field info '''
+listString+
''' with tab
end tell''' ;

app.doScript
(
AppleScript,
ScriptLanguage.APPLESCRIPT_LANGUAGE
);


Die AppleScript-Liste erzeuge ich über das Auslesen der ersten Zeile der Textdatei mit ExtendScript unter Verwendung einer RegExp, um die Spaltenanzahl über die Anzahl der verwendeten Tabulatoren zu ermitteln.

Deinen vorgeschlagenen Weg über ein XML-Arbeitsblatt werde ich bei Gelegenheit mal prüfen. Hört sich interessant an. Danke dafür!


als Antwort auf: [#548948]

Excel | Alle Zellen des ersten Workbooks als Text formatieren

Uwe Laubender
Beiträge gesamt: 5316

15. Apr 2016, 10:57
Beitrag # 8 von 9
Beitrag ID: #548959
Bewertung:
(5534 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Noch eine Frage in die Runde von einem "Noob" was AppleScript angeht:

Gibt es eine Möglichkeit ein Statement über mehrere Zeilen im Skripteditor aufzuteilen? Ich würde gerne bestimmte Statements besser oder anders strukturiert darstellen.

Ein Beispiel wäre die oben im Skript genannte Liste, die man beispielsweise in ExtendScript als Array so wie unten dargestellt ausdrücken kann ohne dass das Skript bei Ausführung ein unverhofftes Zeilenende anzeigt:

Code
[ 
[1, 2],
[2, 2],
[3, 2],
[4, 2],
[5, 2]
]



als Antwort auf: [#548958]

Excel | Alle Zellen des ersten Workbooks als Text formatieren

Uwe Laubender
Beiträge gesamt: 5316

15. Apr 2016, 11:48
Beitrag # 9 von 9
Beitrag ID: #548963
Bewertung:
(5508 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ drerol74 ] Hallo Uwe,

eventuell noch ein anderer Ansatz:

Eine Excel-XML-Vorlage erstellen, mit »Speichern unter « als Excel 2004-XML-Arbeitsblatt speichern, diese dann als XML-Objekt ablegen und mit JavaSkript bearbeiten/befüllen und wieder in Excel öffnen.

Mit

Code
<Style ss:ID="s62"> 
<NumberFormat ss:Format="@"/>
</Style>


ist hier das Format festgelegt.


Hallo Roland,

Dein xml-Beispiel passt hervorragend!
Ich bin begeistert.

Alle Zellen, nicht nur die benutzten, werden als "Text" formatiert in Excel geöffnet. Also gibt's ja doch ein passendes "Property" für "Text" in "NumberFormat". Aber auch kein Wunder, da diese Eigenschaft irgendwie in XML ausdrückbar sein muss.

Super! Damit kann ich 'was anfangen!!


als Antwort auf: [#548948]
X