/*
* @Author: Vitaly Batushev
* @Date: 2020-01-11 18:44:44
* @Last Modified by: Vitaly Batushev
* @Last Modified time: 2020-01-12 12:10:09
*/
var XlsxUpdate = (function(){
var doc, progressbar;
/**
* Основная функция
*/
var main = function() {
if (!app.documents.length) exit();
doc = app.activeDocument;
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT;
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALL;
if (doc.spreads.length < 2) {
alert('В разделе менее двух разворотов!');
exit();
}
progressbar = new ProgressBar("Обновление данных...");
progressbar.show();
var updated = 0;
for (var i = 1, l = doc.spreads.length; i < l; i++) {
updated += processSpread(doc.spreads.item(i), i);
}
progressbar.close();
alert("Обновлено " + updated+ " записей");
}
/**
* Обработка разворота
* @param {Spread} spread Разворот публикации
* @param {int} idx Порядковый номер разворота
*/
function processSpread(spread, idx) {
var updated = 0;
var xlsPath = doc.filePath.absoluteURI + "/links";
progressbar.reset('Обновление данных на развороте ' + idx, spread.textFrames.length);
for (var i = 0, l = spread.textFrames.length; i < l; i++) {
progressbar.increase();
var textFrame = spread.textFrames.item(i);
if (textFrame.parentStory.itemLink !== null && textFrame.parentStory.itemLink.isValid) {
var link = textFrame.parentStory.itemLink;
var pFile = File(textFrame.parentStory.itemLink.filePath);
if (getExtension(pFile.name) == "xlsx") {
var rFile = File([xlsPath, idx + ".xlsx"].join("/"));
if (File(rFile).exists) {
textFrame.parentStory.itemLink.relink(rFile);
textFrame.parentStory.itemLink.update();
updated++;
}
}
textFrame.clearObjectStyleOverrides();
}
}
return updated;
}
/**
* Получение расширения файла в нижнем регистре
* @param {string} name Имя файла
*/
function getExtension(name) {
var parts = name.split(".");
return parts[parts.length - 1].toLowerCase();
}
var ProgressBar = function(title) {
var w = new Window('palette', title, { x: 0, y: 0, width: 440, height: 60 }, { closeButton: false }),
pb = w.add('progressbar', { x: 20, y: 32, width: 400, height: 12 }),
st = w.add('statictext', { x: 20, y: 12, width: 400, height: 20 });
st.justify = 'left';
w.center();
this.reset = function(msg, maxValue) {
st.text = msg;
pb.value = 0;
pb.maxvalue = maxValue;
// w.show();
};
this.show = function() {
w.show();
};
this.increase = function() {
++pb.value;
};
this.hide = function() {
w.hide();
};
this.close = function() {
w.close();
};
};
return {
run: main
}
})();
app.doScript("XlsxUpdate.run();", ScriptLanguage.JAVASCRIPT, [], UndoModes.ENTIRE_SCRIPT, "XlsxUpdate");