| Satoさん以下の一括で30個まで大丈夫なようです。 コマンドをよく見て勉強すれば難しくはないと思います。
表 * &STR=#cond(#winver<5 .and .not #文字位置(#OSVER,"NT")<1,"C:\WINDOWS\My Documents\*.xls"\ ,1,#getenv("USERPROFILE")+"\My Documents\*.xls") &STR = #一括パス名 ファイル名入力 初期値 = &STR ,プロンプト= "読み込む表の指定" , 許可作業 = なし , &STR if (&STR="") 確認 "ファイル名が選択されなかったので中止します" else if (#ファイル名(&STR,4)="xls" .or #ファイル名(&STR,4)="xlsx") call 読み込み書き出し(&STR,1) else if (#ファイル名(&STR,4)="csv") call 読み込み書き出し(&STR,2) else if (#ファイル名(&STR,4)="tbl") call 読み込み書き出し(&STR,3) else 確認 "指定ファイルが桐関連ではないので変換できません" end Proc 読み込み書き出し(文字列 &Sexcel,整数 &Imode) 変数宣言 整数{&Iend},文字列{&S項目並="分類コード,分類名,",&St,&Stenkai="横展開.csv"} if (&Imode=1) エクセル &Sexcel,"sheet1",,項目名行=する,,表名="顧客横展開.tbl",上書き=する,終了状態=&Iend else if (&Imode=2) ファイル変換 CSV,&Sexcel,"顧客横展開.tbl",項目名行=あり,自動設定=する,終了状態=&Iend else if (&Imode=3) 表 &Sexcel, モード=専有, リトライ=しない, 終了状態 = &Iend end 遅延 10 call 項目取(&Imode,&S項目並,&St) if (&Imode) 確認 #ファイル名(&Sexcel,2)+" に項目名 "+&St + " がないので処理不可能" 終了 else call 書出表(&S項目並,&Iend,&Stenkai) end 表 ファイル変換 CSV,&Stenkai,"横展開.tbl",項目名行=あり,自動設定=しない,終了状態=&Iend 表形式編集 End proc 項目取(参照 整数 &I入,Str &出力,参照 str &St) var 整数{&C,&M=#項目数},Str{&出} for &C=1,&M,1 &出=#S(&出,&C,#項目属性(&C,1)) &出力=#cond(#対応番号(&出力,#項目属性(&C,1))>0,#S(&出力,#項目属性(&C,1)+",",""),1,&出力) end &I入=#cond(&出力="",0,1,1),&St=#cond(&I入=0,&出,1,&出力) end proc 書出表(Str &Sitem,Int &Iend,str &Sk3) var Int {&Imax = #総件数 , &Icount , &In = #L(&Sitem) - #L(#s(&Sitem,",","")) , &It } var Str {&SQ = """" , &SQC = """" + "," , &SQCQ=""""+","+"""" , &Sstr } 印字開始 &Sk3, 終了状態=&Iend for &Icount=1,30 for &It=1,&In &Sstr = &SQ+#項目属性(&It,1)+#Str(&Icount)+#cond((&Icount=30)*(&It=2),&SQ,1,&SQC) 印字 &Sstr, end end 印字 while (.not #EOF) for &Icount=1,30 印字 &SQ,[分類コード],&SQCQ,[分類名],&SQC, ジャンプ 行番号 = 次行 end end 印字 印字終了 改頁=しない end
|