[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt String von Javascript > Applescript, Kodierung?

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

String von Javascript> Applescript, Kodierung?

pixelstaub
Beiträge gesamt: 128

1. Nov 2015, 19:55
Beitrag # 1 von 1
Bewertung:
(768 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Liebe Scripting-Gurus,

kürzlich habe ich folgendes InDesign-Script entdeckt, das mit Hilfe von Applescript aus allen Tabellen des Dokumentes Excel generiert. Zu großen Teilen klappt das auch fantastisch – lediglich bei der Übergabe von tableData ans AppleScript scheinen einige Zeichen "komisch" kodiert zu werden.In Excel kommt beispielsweise das Viertelgeviert als <2009> an, was zwar dem eingeklammerten Unicodewert entspricht, aber dennoch wenig hilfreich ist …

Übergebe ich tableData als Parameter im doScript an das Applescript und speichere es in die Applescript-Variable mytableData, scheint bei "display dialog" in Excel auch alles gut anzukommen (aktuell unten aaskommentiert).
Lediglich das Einbinden von mytableData (das selbst Teile des Scripts enthält) ins Script will dann nicht mehr.

Jemand eine Idee?

Code
var newExcelDoc = ['tell application "Microsoft Excel"',   
'set theWorkbook to make new workbook',
'end tell\r'].join("\r");
app.doScript (newExcelDoc, ScriptLanguage.APPLESCRIPT_LANGUAGE);
var doc = app.properties.activeDocument && app.activeDocument;
myTables = getTable(doc);
n = myTables && myTables.length;

while (n--) exportTable (myTables[n].tables[0]);




function exportTable (myTable) {
var doc = app.properties.activeDocument && app.activeDocument,
myTable = myTable || getTable (doc);
var sheetName = myTable.cells[0].contents;
if (!myTable) {alert ("Take a break"); exit();};
var numberOfRows = myTable.rows.length,
rowNumber, columnNumber,
rowContents = [],
setRange, openMark, closeMark;

if ($.os.match(/Mac/i))
{
setRange = 'set value of range "A';
openMark = '" to {';
closeMark = '}';
}
else
{
setRange = 'app.Range("A';
openMark = '") = Array(';
closeMark = ')';
}
for (var z = 0, rowNumber = 0; rowNumber < numberOfRows; rowNumber++) {
var numberOfColumns = myTable.rows[rowNumber].columns.length,
toRange = GetExcelColumnName (numberOfColumns - 1),
columnContents = [];
for (columnNumber = 0; columnNumber < numberOfColumns; columnNumber++) {
var cellContents = myTable.rows[rowNumber].cells.everyItem().contents;
columnContents = '"' + cellContents.join('", "') + '"';
}
rowContents[rowNumber] = setRange + ++z + ":" + toRange+ z + openMark + columnContents + closeMark;
}

tableData = rowContents.join("\r");

if ($.os.match(/Mac/i))
{
var myParameters = [tableData];
myAppleScript = [
'tell application "Microsoft Excel"',
'tell active workbook',
'make new worksheet with properties {name:"' + sheetName +'"} at end',
// 'set mytableData to item 1 of arguments',
//funktioniert im dialog
// 'display dialog mytableData',
'tell active sheet',
tableData,
'end tell',
'end tell',
'end tell\r'].join("\r");
app.doScript (myAppleScript, ScriptLanguage.APPLESCRIPT_LANGUAGE, myParameters);
} }



function GetExcelColumnName (columnNumber) {// 0 is A 25 is Z 26 is AA etc.
var dividend = columnNumber + 1,
columnName = "",
modulo;

while (dividend > 0) {
modulo = (dividend - 1) % 26;
columnName = String.fromCharCode (65 + modulo) + columnName;
dividend = Math.floor((dividend - modulo) / 26);
}
return columnName;
}


function getTable (doc) {
if (!doc) return false;
app.findTextPreferences = null;
app.findTextPreferences.findWhat = "\x16";
var tables = doc.findText(true);
if (tables.length) return tables;
};


Danke und Grüße
Stephan
X