Skip to main content
Inspiring
November 26, 2022
해결됨

【JavaScript】上書き保存が出来る時と出来ない時がある

  • November 26, 2022
  • 4 답변들
  • 2240 조회

お世話になります。

 

保存時のオプションを変えて上書き保存するというスクリプトを作って、実際仕事の中で使用していたのですが、時々エラーが出ることがありました。

 

//保存時のオプション設定
var options = new IllustratorSaveOptions ;
with (options) { 
    pdfCompatible = true ; //PDF互換ファイル:作成

    embedLinkedFiles = false ; //配置した画像:埋め込まない

    embedICCProfile = true ; //ICCプロファイル:埋め込む

    compressed = true ; //圧縮を使用:する
}

var docObj = app.documents;
var arrTmp = []; //空の配列

for (i=0; i < docObj.length ; i++){
    arrTmp.push(docObj[i]);
};

for (i=0; i < arrTmp.length ; i++){
    app.activeDocument = arrTmp[i];

    var myDoc = arrTmp[i];
    var myFile = myDoc.fullName ;
    var aiPath = myFile.fullName ;
    var aiFile = new File(aiPath);

    myDoc.save(options);
};

 

実行後のエラーとしては、「保存されていないファイルなので上書きできませんよ」的なことだったと思います。

それで、optionsのところが不明です(?)みたいな記載がされてました。

 

なぜかは分かりませんが、一度そのファイル達をデスクトップにコピーしてから上記のスクリプトを実行してみると、普通に保存することが出来ました。

 

デスクトップでやったものに関しても、エラーが出た時に関しても、客先から送られてきたデータをコピーして、そのコピーしたものを上書きしていく流れは変わらないのですが・・・。

 

何が原因かわかる方いらっしゃいますか。

よろしくお願いします。

이 주제는 답변이 닫혔습니다.
최고의 답변: nekkoneko

上書き保存ができないケースがあった問題ですが、

客先から送られてきたデータをまとめているフォルダ名に、半角のスラッシュ「/」が入っているのが原因でした。そのスラッシュがファイル自体のパスに影響してしまったようです。

 

よく考えたら分かる問題でした。

お騒がせいたしました。申し訳ないです。

4 답변

nekkoneko작성자답변
Inspiring
November 29, 2022

上書き保存ができないケースがあった問題ですが、

客先から送られてきたデータをまとめているフォルダ名に、半角のスラッシュ「/」が入っているのが原因でした。そのスラッシュがファイル自体のパスに影響してしまったようです。

 

よく考えたら分かる問題でした。

お騒がせいたしました。申し訳ないです。

ajabon grinsmith
Community Expert
Community Expert
November 29, 2022

これ見て初めて思い出したんですが自分も過去に経験済みでした……肝心な時にお役に立てず。

ちなみにスクリプトのファイル名に半角スラッシュを入れておくと起動時にアプリがクラッシュします(役に立たない情報)

Ten A
Community Expert
Community Expert
November 28, 2022

とりあえず、コードを見ての疑問に感じた部分を書きます。

Documents自体がコレクションであり構造は配列ですが、これを新たに配列に取り込むのは何か意図がありますか?
myDoc、myFile、aiPath、aiFileの各変数はなんのために用意されているでしょう?

メッセージから言うと開いているドキュメントの中に新規ドキュメントでまだ保存されたことがないものが混じっていたということになるかと思います。パーミッションやその他ディレクトリへのアクセスの問題であれば日本語でメッセージが表示されて保存自体がキャンセルされるはずです。

nekkoneko작성자
Inspiring
November 28, 2022

ありがとうございます。

コードに関してなのですが、スクリプトを勉強して間もない頃に、配列に取り込むっていうのをここで教えていただいて、おそらく当時の私は習ったことを実際に使ってみたくてそうしたのだと思います。documentsが配列であることも知らなかったので。。。

 

で変数のことですが、これはネットに落ちてたのをそのまま使用した記憶があります。上書き保存の仕方と、オプションを変えて保存するというコードが分からず・・調べて辿り着いたのがこのコードだったので使ってました。

 

一番最初にこのコード書いてから、今まで特に不自由なく仕事の中でも使用出来てしまっていたので、正直違和感も感じず書き直すという頭もなくて・・(汗)過去に書いてきたスクリプトもちょっと見直してみます。

 

日本語でメッセージは表示されなかったので、別の問題なんでしょうね。

時間がある時にいろいろ試してみます。

 

monokano
Community Expert
Community Expert
November 29, 2022

今回のスクリプトを見直して、いろいろと試してたのですが、

確かに書いた当時は教わったことをそのまま実際に使用したくてやったんだと思います。ただdocumentsの配列で同じ様にループさせようとしたら出来なかったので、おそらく、最初に記載した書き方だと開いているファイルを全て保存することが出来たので、最終的にそうなったのかなと思います。

 

//保存時のオプション設定
var options = new IllustratorSaveOptions ;
with (options) { 
    pdfCompatible = true ; //PDF互換ファイル:作成

    embedLinkedFiles = false ; //配置した画像:埋め込まない

    embedICCProfile = true ; //ICCプロファイル:埋め込む

    compressed = true ; //圧縮を使用:する
}

var docObj = app.documents;

for (i=0; i < docObj.length ; i++){
    app.activeDocument = docObj[i];
    docObj[i].save(options);
};

 

上記だと出来ませんでした。

私のイラレの設定で、バックグラウンドで保存のチェックを外しているのも関係あるのかもしれませんが・・・。


app.activeDocument = docObj[i];

これは不要でしょう。

この1行のせいでapp.documents内の順序がそのつど変わってしまいます。

 

以前、「ドキュメントを最前面にしてペースト処理をしたい」という要望があり、そのためapp.documentsを配列に入れ直したコードを提示しましたが、今回はいちいちドキュメントを最前面にする必要がないので上記1行は不要です。

 

以前のスレッド

Illustratorスクリプト:開いている全てのファイルに処理をしたい

monokano
Community Expert
Community Expert
November 26, 2022

スクリプト以外のところに原因がありそうです。

OSとIllustratorのバージョンによるのかもしれません。このあたりの情報も書いた方がよいでしょう。

nekkoneko작성자
Inspiring
November 28, 2022

ありがとうございます。

 

OSはBig Sur バージョン11.6.7で、

イラレは26.5.2でした。

 

ちなみにエラー時のアラートですが、私の和訳の解釈が違っているかもしれないので、一応ここに記しておきます。

 

Error 9031: You must provide a file path for documents which have not yet been saved

Line: 34 -> myDoc.save(options);

monokano
Community Expert
Community Expert
November 28, 2022

「まだ保存されていないドキュメントは、ファイルパスを指定する必要があります」ってことなので、optionsは関係なく、save自体のエラーですね。

 

saveはファイルとして存在していないドキュメントに実行するとたしかにエラーになるのですけど、確実にファイルがあるのにエラーが出てしまうとのことですよね。

やはりスクリプトではなく環境側(ボリュームやフォルダの状態とか)に原因がある気がします。

Ten A
Community Expert
Community Expert
November 26, 2022
コード自体の検証はしていませんが、ファイル自体がロックされていたりパーミッションが異なるなど無いですか?
nekkoneko작성자
Inspiring
November 28, 2022

ありがとうございます。

ファイルがロックされていることはなく、(自分)は読み/書きのアクセス権があって、staffとeveryoneは読み出しのみになっていました。これはデスクトップにコピーした時も同様です。