おいしいAS3 -12ページ目

CS3からあったんだね…ScriptUI

ScriptUIのことでなんかずいぶん
オーバーリアクションしちゃったけど
実はこれCS3ですでにあったみたいですね

スクリプティングはCS2でやって以来
ずいぶん長い事やってなかったので
完全に置いてかれてました


…で


CS3でもちょっとScriptUI使って
やってみたんですが

CS5だと新しいUIつくるときの
add()の第一引数のtypeのところ
"EditText"みたいにJavaライクに
大文字まじりなんですが

CS3だとこれが
"edittext"みたいに
全部小文字なんですね


InDesignでもCS2とCS3で
PDF書き出しメソッドかなんかの
引数の数が変わってたりとか
バージョンアップの度に
なんか細かい所が変わって
そのまま使えなくなってたりして

Adobeって仕様とかがカッチリしないうちに
見切り発車で開発してるのかしらと思ってしまう

InDesignの表をCSVに書き出す

こんどは書き出す方ですが
書き出すと言うより上書き

先のにしてもこれから作ろうとしてるものの副産物なんで
じつはそんなに実用性なんてなかったり…



tableToCSV(app.activeDocument.selection[0].tables[0],File.openDialog ("書き出し先のCSVを選択", isCSV ,false))


function isCSV(aFile){
var rtn=false
if(decodeURI(aFile.fullName).search(new RegExp("\\.csv$","g"))!=-1){
rtn=true
}
try{
aFile.getFiles ()
rtn=true
}
catch(e){
}
return rtn
}

function tableToCSV(tbl,csv){
if(csv==null)return;
csv.open("w")
for(var rowCnt=0;rowCnt<tbl.rows.length;rowCnt++){
for(var cellCnt=0;cellCnt<tbl.rows[rowCnt].cells.length-1;cellCnt++){
csv.write('"'+tbl.rows[rowCnt].cells[cellCnt].contents+'",')
}
csv.write('"'+tbl.rows[rowCnt].cells.lastItem().contents+((rowCnt+1==tbl.rows.length)?'"':'"\n'))
}
csv.close()
}

CSVをInDesignの表にする

CSVの読み込みをJSXでやってみましたよ

AS3では正則表現とかは使わずに愚直にやってましたが
ちょっと正則表現つかってごにょごにょしてみました

しかし、AS3よりちょっと正則表現まわりの機能が少ない

具体的にはフラグで s (.に改行を含む) x (拡張表現を使用する)がない
replace()で置き換えメソッドを使えない

とくにreplace()で置き換えメソッドが使えないのが…

おかげでなんだかんだで回りくどいやり方することになってしまいました




csvToTable(app.activeDocument.selection[0].tables.add(),File.openDialog ("読み込むCSVを選択", isCSV ,false))

function isCSV(aFile){
var rtn=false
if(decodeURI(aFile.fullName).search(new RegExp("\\.csv$","g"))!=-1){
rtn=true
}
try{
aFile.getFiles ()
rtn=true
}
catch(e){
}
return rtn
}

function csvToTable(tbl,csv){
if(csv==null)return;
csv.open("r")
var csvStr=csv.read()
csvStr=csvStr.replace(/(\n|\r)+/,"\n")
var textItem=csvStr.match(/\"(.|\n)*?\"/gm)
csvStr=csvStr.replace(/\"(.|\n)*?\"/gm,"::textItem::")
var rows=csvStr.match(/.+?$/gm)
while(tbl.rows.length>rows.length)tbl.rows.lastItem().remove()
while(tbl.rows.length<rows.length)tbl.rows.add()
for(var i=0;i<rows.length;i++){
var cells=rows[i].match(/\".*?\"|[^,]+/g)
while(tbl.columns.length>cells.length)tbl.columns.lastItem().remove()
while(tbl.columns.length<cells.length)tbl.columns.add()
for(var j=0;j<cells.length;j++){
if(cells[j].search("::textItem::")!=-1){
tbl.rows[i].cells[j].contents=cells[j].replace("::textItem::",textItem.shift()).replace(/\"/g,"")
}
else{
tbl.rows[i].cells[j].contents=cells[j]
}
}
}
}








$おいしいAS3


CSVを表として読み込むぐらいできるだろうと思って
ここをチェックしたら読み込めると思ったんだけどダメ

テキストを表としてペーストする場合はtab区切り
(どっかでコンマ区切りで読み込む設定にできた気がするのだけど
べつのアプリケーションだったかな…?)

配置でもxlsは表として読み込めるけどnumbersはダメ

一応Numbersで表を選択してコピーすると
テキストとしてはtab区切りのテキストがコピーされるので
テキストとしてコピペすると(上のチェックを入れないと)
InDesingの表にペーストできるけど
表としてコピペするとなんか改行がうまくいかないかんじ

…ふつう逆じゃない?