シールラベルの印刷

プリンタで印刷可能なシールラベルがいろいろ売り出されている。小さいものだと、1シートに10枚くらいのラベルがあって、 ラミネートシールもついてて、なかなか便利である。

シールラベル

この前、百数十台分のPCの管理シールを作ることがあったのだが、これをRubydeExcelを使って作ってみよう。

まずはExcelテンプレートの作成

まずは、シートのレイアウトにあわせたテンプレートを作っておく。1つのセルが1つのラベルに対応するようにセルの高さや幅を調整 しておく。また、印刷時のフォントの指定も済ませておく。

シールラベルテンプレート

ラベルの指定が楽にできるように、セルには"ラベル_01"のような名前をつけておく。今回の例では、1シート10枚のラベルなので、 "ラベル_01"〜"ラベル_10"という名前をつける。

セルに名前をつけるときは、セルを選択して、セルの名前の表示ボックスに名前を書き込めばよい。

シールラベルテンプレート

こうして作ったExcelテンプレートを"label_template.xls"という名前で保存しておく。

ラベル作成スクリプト

ラベルに書き込む文字列はテキストファイルに一行一情報で用意しておく。これをスクリプトで読み出して、"ラベル_01"〜"ラベル_10" のシートに書き出していく。10セル分書き出した時点で、ワークシートを追加していく。これを繰り返せば目的達成である。

セルに名前をつけるスクリプト

セルのレイアウトが済んだら、各セルに名前をつけていくわけだが、これを手作業でやるのもあほらしいので、これもRubudeExcelを 使って効率よく設定していこう。

  01: require 'excel_lib'
  02:
  03: excel = Excel.new
  04: sheet = excel.open_book('label_template.xls').sheets(1)
  05: range_left = sheet.range("B2")
  06: range_right = sheet.range("D2")
  07: cursol_left = range_left.get_cursol()
  08: cursol_right = range_right.get_cursol()
  09: label_id = 1
  10: 5.times do
  11:   cursol_left.range.name = sprintf("ラベル_%02d", label_id)
  12:   cursol_right.range.name = sprintf("ラベル_%02d", label_id+1)
  13:   label_id += 2
  14:   cursol_left.v_move(2)
  15:   cursol_right.v_move(2)
  16: end
  
  • シートの名前を設定後、上書き保存できるように、04行目ではcopy_bookではなく、open_bookを使っている。
  • 今回のサンプルでは、シートは2列なので、左用と右用の2つのRangeを使って名前を設定していく(05:,06:行目)
  • 名前を設定するセルは移動させるので、07:,08:行目はget_cursolでExcel::RangeCursolオブジェクトを得ている。
  • 11:,12:行目でセルに名前をつけている。
  • これを上書き保存する

ラベル作成スクリプト

リストから10個づつ切り出して、シートの各ラベルに貼り付けていく。 次にはまたシートを追加して、次の10個を切り出していく。

以下のスクリプト(set_label.rb)と、テンプレートである"label_template.xls"とラベルのリストが載っている labels.txt を同じフォルダにおいておき、以下のコマンドでスクリプトを実行すれば、 あっというまにラベルができる。

  > ruby -Ks set_label.rb labels.txt
  

 

  01: #!ruby -Ks
  02: require 'excel_lib'
  03:
  04: def make_onesheet(label_list, sheet)
  05:   label_offset = 0
  06:   label_list.each {|label_str|
  07:     label_name = sprintf("ラベル_%02d", label_offset+1)
  08:     sheet.range(label_name).text = label_str
  09:     label_offset += 1
  10:   }
  11: end
  12:
  13: info_list = []
  14: while oneline = gets
  15:   info_list.push oneline.chomp
  16: end
  17:
  18: excel = Excel.new
  19: book = excel.copy_book('label_template.xls')
  20: template_sheet = book.sheets(1)
  21: offset = 0
  22: loop do
  23:   label_list = info_list[offset, 10]
  24:   offset += 10
  25:   break if label_list == nil
  26:   new_sheet = book.add_sheet(template_sheet)
  27:   make_onesheet(label_list, new_sheet)
  28: end
  29:
  30: template_sheet.delete
  


戻る