ラベルプリンター

宛名ラベル印刷用のラベルプリンターを購入しました。ソフトも付いていて特にプログラムを作らなくても使用できますが、ラベルの印刷までにちょっと手数が多くなるので専用のプログラムを作りました。


2008-02-25

ブラザーのラベルプリンターです。本体と62mm×30mのラベルを購入して、送料込み¥18,067-

PICT6388.jpg

brother QL-550 パソコンとの接続はUSB

PICT6415.jpg

オートカット機能があるので、使用するスイッチは通常、電源だけです。

現在宛名はこんな手順で作っています。

おちゃのこネット標準の受注情報ダウンロード機能を使用して受注情報をダウンロードする。
ファイルの形式はCSVでダウンロードされる。
   ▼
ダウンロードしたCSVファイルをEXCELで取り込む
   ▼
EXCELワークシートにはちょっとした式が仕込んであって
印刷したいレコードを選択すると、宛名を印刷してくれる
   ▼
宛名はA4のコピー用紙に印刷されるので、それをはさみで切って、封筒に糊付けする

PICT6418.jpg

おちゃのこネットのダウンロード機能。ボタンを押してダウンロード先を選ぶだけ。ファイル名はsales.csvがデフォルト値。

PICT6373.jpg

これは差出人のラベルですが、ちょっと前までタックシールを使っていた。在庫が切れたので現在はA4用紙に印刷して糊付けしている。

62×100mmサイズでランニングコストは約¥6/枚です。

PICT6411.jpg

幅62mmのロール紙。ただの紙ではなく感熱紙です。もちろんシールになってます。

PICT6409.jpg

サンプルのラベルをつくってみたであります。

ラベルプリンターを使用した新方式の印刷手順は...

1.プログラムを起動してCSVファイル取り込みボタンを押す
  取り込むファイルはデスクトップに置くことに決めてあるので
  ファイル名を入力する必要はない。単にボタンを押すだけ。
     ▼
2.受注番号の横にある「▼」「▲」ボタンで印刷したい受注を選んで
     ▼
3.印刷ボタンを押すと宛名ラベルが印刷される

PICT6417.jpg

プログラムはVisualBasic2005を使いました。もちろん無料のやつです。最近2008年版が出たので1つ前のバージョンです。標準のソフト以外にb-PACというソフトが必要になりますが、これはブラザーのホームページからダウンロードできます。

PICT6414.jpg

宛名の雛形はプリンターの標準添付ソフトP-タッチエディターというので作ります。当方のパソコンにはプリンターが3台付いていますが、この雛形にプリンター名が記憶されているので印刷時にプリンターを選ぶ必要はありません。

動いているところのMOVIEと、プログラムのソースとインストールイメージ
ファイル ファイルタイプ 添付ファイルの解説
labelprinter.wmv MOVIE 印刷しているところ。印刷の最後にカッターが往復してラベルを切り離している。印刷しているのは売店の差出人ラベル。
SalesLabel.zip OTHER プログラムソース他、プロジェクトファイル一式。
プログラムの解説
0001  Imports System
0002 Imports Microsoft.VisualBasic.FileIO
0003
0004 Public Class Form1
0005 Dim atesaki(1000, 45) As String
0006 Dim syohin(2000, 9) As String
0007 Dim a_index As Integer
0008 Dim s_index As Integer
0009 Dim disp_index As Integer
0010
0011 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
0012 Dim i As Integer
0013
0014 Using parser As New TextFieldParser("C:\Documents and Settings\IIZUKA\デスクトップ\sales.csv", System.Text.Encoding.GetEncoding("Shift_JIS"))
0015 parser.TextFieldType = FieldType.Delimited
0016 parser.SetDelimiters(",")
0017
0018 a_index = 0
0019 s_index = 0
0020 Dim header As String() = parser.ReadFields() ' ヘッダー1行空読み
0021 While Not parser.EndOfData
0022 Dim row As String() = parser.ReadFields() ' 1行読み込み
0023
0024 If row(3) <> "" Then
0025 For i = 0 To 44
0026 atesaki(a_index, i) = row(i)
0027 Next
0028 a_index = a_index + 1
0029 End If
0030 syohin(s_index, 0) = row(0)
0031 For i = 47 To 54
0032 syohin(s_index, i - 46) = row(i)
0033 Next
0034 s_index = s_index + 1
0035
0036 End While
0037 disp_index = a_index - 1
0038 disp_sales(disp_index)
0039
0040 End Using
0041 End Sub
0042
0043 Private Sub disp_sales(ByVal index As String)
0044 Dim i, j As Integer
0045 Dim buf As String
0046 Dim jyusyo_len As Integer
0047 Dim jyusyo_arr() As String
0048 Const MAX_CHAR As Integer = 32
0049
0050 TextBox_jyucyu.Text = atesaki(index, 0)
0051 TextBox_yubin.Text = "〒" & atesaki(index, 37)
0052 TextBox_todofuken.Text = atesaki(index, 38)
0053 ' TextBox_jyusyo1.Text = atesaki(index, 39)
0054 TextBox_kaisya.Text = atesaki(index, 33)
0055 TextBox_busyo.Text = atesaki(index, 34)
0056 TextBox_name.Text = atesaki(index, 35) & " 様"
0057
0058 TextBox_syokei.Text = atesaki(index, 12)
0059 TextBox_souryo.Text = atesaki(index, 17)
0060 TextBox_goukei.Text = atesaki(index, 20)
0061
0062 jyusyo_len = atesaki(index, 38).Length
0063 jyusyo_arr = Split(atesaki(index, 39), Chr(10))
0064 For i = 0 To jyusyo_arr.Length - 1
0065 jyusyo_len = jyusyo_len + System.Text.Encoding.GetEncoding("shift-jis").GetByteCount(jyusyo_arr(i))
0066 If jyusyo_len >= MAX_CHAR Then
0067 buf = ""
0068 For j = i To jyusyo_arr.Length - 1
0069 buf = buf + jyusyo_arr(j)
0070 Next
0071 TextBox_jyusyo2.Text = buf
0072 Exit For
0073 End If
0074 Next
0075 buf = TextBox_todofuken.Text
0076 For j = 0 To i - 1
0077 buf = buf + jyusyo_arr(j)
0078 Next
0079 TextBox_jyusyo1.Text = buf
0080
0081 ListBox1.Items.Clear()
0082 For i = 0 To s_index - 1
0083 If atesaki(index, 0) = syohin(i, 0) Then
0084 buf = syohin(i, 2) & " " & syohin(i, 1) & " \" & syohin(i, 3) & " " & syohin(i, 4) & "個"
0085 ListBox1.Items.Add(buf)
0086 End If
0087 Next
0088 End Sub
0089
0090 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
0091 If disp_index < a_index - 1 Then
0092 disp_index = disp_index + 1
0093 End If
0094 Call disp_sales(disp_index)
0095 End Sub
0096
0097 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
0098 If disp_index > 0 Then
0099 disp_index = disp_index - 1
0100 End If
0101 Call disp_sales(disp_index)
0102 End Sub
0103
0104 Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
0105 'b-PACオブジェクトを生成
0106 Dim ObjDoc As BrssCom.Document
0107 ObjDoc = CreateObject("BrssCom.Document")
0108
0109 'P-touch Editorで作成したテンプレートファイルをオープン
0110 Dim bRet As Boolean
0111 bRet = ObjDoc.Open("C:\Documents and Settings\IIZUKA\My Documents\Visual Studio 2005\Projects\SalesLabel\label.lbl")
0112
0113 If (bRet <> False) Then
0114 ObjDoc.SetText(ObjDoc.GetTextIndex("郵便番号"), TextBox_yubin.Text)
0115 ObjDoc.SetText(ObjDoc.GetTextIndex("住所1"), TextBox_jyusyo1.Text)
0116 ObjDoc.SetText(ObjDoc.GetTextIndex("住所2"), TextBox_jyusyo2.Text)
0117 ObjDoc.SetText(ObjDoc.GetTextIndex("会社名"), TextBox_kaisya.Text)
0118 ObjDoc.SetText(ObjDoc.GetTextIndex("部署名"), TextBox_busyo.Text)
0119 ObjDoc.SetText(ObjDoc.GetTextIndex("氏名"), TextBox_name.Text)
0120
0121 '印刷を実行
0122 ObjDoc.DoPrint(0, &H1)
0123 Else
0124 MsgBox("LBLファイルがありません。")
0125 End If
0126
0127 'b-PACオブジェクトを解放
0128 ObjDoc = Nothing
0129 End Sub
0130 End Class
行番号
解説
5
宛先を格納する配列。メモリー上に確保している。1000件以上あるとこのプログラムは異常終了する。
6
購入した商品を格納する配列。これも宛先同様に2000商品以上購入されると異常終了してしまう。
11
CSVファイルの読み込みボタンを押した時の処理
14
CSVファイルの置き場所はデスクトップにしている。IIZUKAなんていう個人名が入っていて、当方の環境に依存したプログラムになっている。普通は設定変更できるようにするのだが、こういう汎用性のないプログラムの方が実は読みやすいのでプログラムに直接ファイル名を記述してしまっている。
15~38
CSVファイルを各フィールドに分割するための仕組はTextFieldParserを呼び出すだけでよい。この処理でCSVファイルの各フィールドをatesaki配列、syohin配列に格納している。
43
atesaki配列およびsyohin配列の内容を画面に表示している。
90,97
▲ボタン および ▼ボタン を押したときの処理。
104
印刷ボタンを押したときの処理。
106,107
ブラザーの用意した印刷サブルーチンの呼び出し準備。決まり文句だ。
111
P-TOUCHエディターで作ったテンプレートを呼び出す
114~119
テンプレート上の各フィールドに印刷する住所、氏名などを書き込んでいる
122
ここで印刷している。&H1というのはカッターを動かしてラベルを切り離す命令。

明日以降出荷の物からこのラベルを使って発送します。だいぶ楽になったものの少ない利益を食いつぶしてしまった。何か他の用途を見つけないと...

2008-05-12

表札を作りました。紙ですが...

PICT6868.jpg

プラスチックの台座に空いている穴でラベルの用紙種類を判別しています。

PICT6872.jpg

表札です。裏側の黒いマークでタックシールの切れ目を認識しているようです。印刷するときもちょっと後ずさりしてから印刷を開始するので、用紙ロールを交換しても無駄が出無い仕組みになっています。