なでしこを明後日の方向に

日本語プログラム言語なでしこを応援しています

なでしこでエクセルを操作してみる

なでしこは標準でエクセルに関する命令があります。

たとえば…
エクセル起動
エクセル開く
エクセルシート列挙
エクセルシート注目
エクセルシート名変更
エクセルCSV保存
エクセルセル一括取得
…などなど

命令名だけで何ができそうか分かりやすいのがいいですね。

ただし「エクセル開く」で開いたファイルにしか操作が効かないので、用途はある程度限られます。

とりあえずサンプルを作ってみました。

なでしこでシートをたくさん作る

//シートをたくさん作る
エクセル起動
エクセル新規ブック
5回
  エクセル新規シート
  エクセルシート名取得
  それ回数エクセルシート名前変更

これで新規のエクセルに1~5という名前のシートが作られます。

エクセルシート名前変更の引数をくふうすればこうなります。↓

なでしこでフォルダ内のエクセルからCSVを作る

作業フォルダ「D:\」
エクセル起動
エクセル警告無視
「*.xlsx」ファイル列挙して反復
  「{作業フォルダ}{対象}」エクセル開く
  「{マイドキュメント}{対象}.csv」エクセルCSV保存
  エクセル閉じる
おわり

Dドライブ直下にあるxlsxファイルを列挙してエクセルCSV保存でCSVファイルにしていきます。
エクセル警告無視を入れてありますが、開いたら文句を言われるファイル対策になるかと思います。(適当)

なでしこの母艦にドロップしたファイルを操作する

母艦ファイルドロップ許可オン
母艦ファイルドロップした時
  母艦ドロップファイル反復
    エラー監視
      対象エクセル開く //エクセルが起動していれば開く
    エラーならば
      エクセル起動 //エクセルが起動してから開く
      対象エクセル開く
    「A1」から「D5」までエクセル一括取得して表示
    エクセル閉じる

ドロップしたファイルを処理する場合を考えてみます。
あらかじめエクセル起動をしておいてドロップしたファイルを開けばいいのですが、
ユーザーが途中でエクセルを閉じた場合エクセル開くが失敗します。

なでしこが操作できるエクセルが起動しているかどうかを調べる命令はないので、エラー監視してひらけばいいんじゃないかと思います。
データを取得した後は閉じておきましょう。
複数ファイルがドロップされたときもちゃんと動くようにしたいですね。

なでしこでエクセルのデータを変数に入れる

元データ

エクセル起動
「D:\えらげ.xlsx」エクセル開く
「A」エクセル最下行取得  //A列の最下行
「A1」から「E{それ}」までエクセル一括取得 //CSVの文字列で返ってくるらしいので
それCSV取得 //配列にする
それ反復
 もし回数ならば、見出し対象「,」配列結合
 対象見出し変数分配
 キャラ名表示
 属性表示
 ロール表示
 「--------」表示

結果

名簿てきなものなので、A列の最下行取得でエクセル一括取得の範囲を広げています。
列もやったほうがいいけど今回は省略。

エクセル一括取得は返ってくる型が文字列なので、CSV取得で配列にします。

変数分配の書式は
(配列)を「変数名,変数名,変数名」に変数分配
こんな感じです。

キャラ名=対象[0]
属性=対象[1]
ロール=対象[2]

と同じ結果になります。

変数分配を使うメリットとしては、元データに列が挿入されてもプログラムを直さなくて済む可能性があることです。

↑元データの2列目にレア度を挿入さえてしまったが

見出しを変数名にしているので結果はかわらない。
内部に変数が増えただけ。