Ausgabe
Ich möchte eine Funktion schreiben, die eine Reihe von Dateien aus geöffneten Dokumenten erstellt, die sich irgendwo auf einer Festplatte befinden.
Ich möchte keine Dateien in diesem Array, die nirgendwo gespeichert sind. Mit anderen Worten Dokumente wie: Datei-> Neu-> Datei erstellen-> Diese Datei nirgendwo speichern.
Ich habe diesen Code bisher erstellt:
var docsExistingOnDrive = filteringOpenedDocs();
alert(docsExistingOnDrive);
function filteringOpenedDocs() {
var imageTypes = [
/.png$/,
/.psd$/,
/.jpg$/,
/.tif$/,
/.bmp$/,
/.gif$/,
];
var openedDocsToProcess = new Array;
for (var i = 0; i < app.documents.length; i++) {
for ( var j = 0 ; j < imageTypes.length; j++ ) {
if ( app.documents[i].name.match(imageTypes[j]) ) {
openedDocsToProcess.push(app.documents[i]);
};
}
}
return openedDocsToProcess;
}
Ich habe festgestellt, dass Dokumente, die noch nicht gespeichert wurden, keine Erweiterungen ( png.
usw. psd.
) im Namen haben. Also habe ich diese Eigenschaft verwendet, um Dateien zu filtern.
Aber ich habe auch einen Fehler in einem Szenario gefunden, in dem Benutzer Dateinamen ( neues Dokument ) mit Erweiterungen ( png.
usw. psd.
) erstellen können.
Als Ergebnis erhalte ich ein falsches positives Ergebnis in if (app.documents[i].name.match(imageTypes[j])
Bedingung. Und dann fügt es dem Array eine Datei hinzu, die nirgendwo auf dem Laufwerk gespeichert ist openedDocsToProcess
.
=============================================== =========================
Hinweise:
Anstatt if ( app.documents[i].name.match(imageTypes[j])
Bedingung zu verwenden:
1. Ich habe versucht, exists
Methode in -> zu verwenden if (app.documents[i].exists)
, app.documents[i].exists
gibt aber immer undefined
2. Ich habe versucht, path
Methode in -> zu verwenden app.documents[i].path !== null
, aber dann erhalte ich unten ” Fehler 8103 ” und das Skript wird beendet. Danke im Voraus.
Lösung
app.documents
gibt ein Array von Document – Objekten zurück.
Dieses Objekt hat bereits eine raffinierte Eigenschaft für Ihren Anwendungsfall:fullName
Wenn eine Datei noch nicht irgendwo auf der Festplatte gespeichert ist, hat diese Eigenschaft keinen Wert. Wenn Sie jedoch versuchen, es aus einem nicht gespeicherten Dokument abzurufen, erhalten Sie leider ein Popup mit einer Fehlermeldung, die im Wesentlichen das Skript beendet.
Um dies zu umgehen, können Sie den Abruf von fullName
innerhalb eines Try-Catch-Blocks einschließen und einfach Dokumente zum openedDocsToProcess
Array hinzufügen, wenn der Versuch nicht fehlschlägt.
var openedDocsToProcess = new Array;
var failed=false;
var temp;
for (var i = 0; i < app.documents.length; i++)
{
try
{
failed=false;
temp=app.documents[i].fullName;
}
catch(e)
{
failed=true;
}
if(!failed)
{
openedDocsToProcess.push(app.documents[i]);
}
}
alert(openedDocsToProcess);
Beantwortet von – obskur
Antwort geprüft von – Katrina (FixError Volunteer)