Photoshop CS3〜CC編 金額をチェック/消費税を計算(その2)

今回のスクリプトは、前回と同じ処理をPhotoshop用に作成したものです。同じスクリプトで動けば簡単なのですが、やはりコードを修正したり仕様を少し変更しないと駄目なようです。

最新版のPhotoshop CCではチェックしていませんが、多分動作するはずです(というか、Photoshop CCインストールしてない……)。

金額のパターンマッチは前回と同様、3桁区切りで文字の最後が円になっているものが対象です。なお、以下のスクリプトではレイヤーがロックされている(全てロックされている)テキストレイヤーは金額のチェックをしないようになっています。また、サブレイヤーも対象外です。


// テキスレイヤー内にある金額が範囲内か調べる
// ただし、ロックされているレイヤーは対象外。サブレイヤーも対象外
(function(){
var min = prompt("最低価格(含む)を入れてください", 100);
if (!min){ return; }
var max = prompt("最高価格(含む)を入れて下さい", 9999);
if (!max){ return; }
min = parseInt(min); // 小数値以下は切り捨て
max = parseInt(max);
var pricePat = new RegExp("(0|[1-9][0-9]{0,2}(,[0-9]{3}){0,2})円$", "g");
var layObj = app.activeDocument.layers;
for(var i=0; i<layObj.length; i++){
if (layObj[i].kind != LayerKind.TEXT){ continue; } // テキストレイヤー以外は処理しない
if (layObj[i].allLocked == true){ continue; } // Allロックされている場合は処理しない
layObj[i].textItem.contents.replace(pricePat, function(str, ptr, allStr){
var p = parseInt(str.split(",").join("")); // 数値に変換
if ((p >= min) && (p <= max)){ return str; }
alert("金額が範囲外です。"+p+"円");
i = layObj.length+ 1; // ループ脱出のために設定
return str;
});
}
})();

次に、消費税を自動的に計算するスクリプトです。使い方は前回と同じで最初に現在の消費税を入力し、次に新しい税率を入力します。金額に該当する文字列があれば、自動的に新しい税率を適用し新たな価格に置き換えます。

なお、レイヤーがロックされているものに関しては処理しないようになっています。また、サブレイヤーも処理しません。

// テキスレイヤー内にある金額に消費税を適用する
// ただし、ロックされているレイヤーは対象外。サブレイヤーも対象外
(function(){
var oldTax = prompt("現在の税金を入れてください(5%なら5)", 5);
if (!oldTax){ return; }
var newTax = prompt("新たな税金を入れて下さい(10%なら10)", 10);
if (!newTax){ return; }
oldTax = oldTax / 100;
newTax = newTax/100;
var pricePat = new RegExp("(0|[1-9][0-9]{0,2}(,[0-9]{3}){0,2})円$", "g");
var layObj = app.activeDocument.layers;
for(var i=0; i<layObj.length; i++){
if (layObj[i].kind != LayerKind.TEXT){ continue; } // テキストレイヤー以外は処理しない
if (layObj[i].allLocked == true){ continue; } // Allロックされている場合は処理しない
layObj[i].textItem.contents = layObj[i].textItem.contents.replace(pricePat,
function(str, ptr, allStr){
var p = parseInt(str.split(",").join("")); // 数値に変換
var price = p / (1 + oldTax);
var newPrice = Math.floor(price * (1+newTax));
$.writeln("元金額:"+price+"、元の税込み金額:"+p+"、新価格:"+newPrice);
newPrice = num3Format(newPrice);
return newPrice + "円";
});
}
})();
function num3Format(str){ // 3桁に区切る
var temp1 = (new String(str)).split(".")[0].match(/./g).reverse().join("");
temp1 = temp1.replace(/(d{3})/g,"$1,");
temp1 = temp1.match(/./g).reverse().join("").replace(/^,/,"");
if(!!(new String(str)).split(".")[1]) temp1 = temp1 +"."+ str.split(".")[1];
return temp1;
}

消費税計算した際に、小数値以下を切り捨てるようになっていますが、四捨五入したい場合は以下のように変更してください。(前回と同じです)

var newPrice = Math.floor(price * (1+newTax));
 ↓
var newPrice = Math.round(price * (1+newTax));

[サンプルをダウンロード]