- 追加された行はこの色です。
- 削除された行はこの色です。
RIGHT:> [[Pluxis クッキング]]
#br
たくさんの社員、煩雑な名刺作成管理をSVG変換で効率良く
#contents
#br
*レシピ1 Pluxisで名刺作成管理 [#q4778ffd]
*ユーザ要求 [#h6649f48]
-1,000人を超える社員の名刺作成と作成管理を効率良くスピーディにやりたい
#ref(jp.jpg,center,wrap)
#ref(en.jpg,center,wrap)
-現状の名刺入稿、名刺作成の問題点
--現物名刺に赤字を入れたものを依頼用紙に貼って印刷業者に発注している
--入稿が紙なので、業者のタイプミスなどによる出戻りが発生することがある
--人事システムなどで持っている社員情報を、名刺作成に利用することができない
-SVG(Scalable Vector Graphics)による入稿を受け付ける印刷業者がある
--SVGのテンプレートを用意しておき、人事担当者が入稿用のSVGファイルを作れないか?
--Adobeイラストレータなど、SVG作成ソフトは人事担当のPC にはないという前提
-名刺用の社員情報は、1,000人を超えるのでExcelシートで管理したい
*準備: Pluxisに、Excelシート→SVG の処理を組み込む [#m481161e]
SVG(Scalable Vector Graphics)はXML標準なので、その変換処理にはPluxisが大活躍します。
**社員情報の構造をXML構造にマッピングする [#p27563fb]
#ref(map.jpg,center,wrap)
**XML構造の設定には、簡単なXMLファイルを用意すればOK [#jaac8723]
<?xml version="1.0" standalone="yes"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<person>
<jp>
<LastName>幸田</LastName>
<FirstName>露伴</FirstName>
<hat1>営業部</hat1>
<hat2>営業2課</hat2>
<hat3>主任</hat3>
</jp>
<en>
<LastName>Kouda</LastName>
<FirstName>Rohan</FirstName>
<hat1>Sales Dept.</hat1>
<hat2>Sales Unit 2</hat2>
<hat3>Chief</hat3>
</en>
</person>
</list>
**SVG変換には、XSLTファイルを用意する [#k9f337ca]
+Adobe イラストレータなど、SVGを出力できるグラフィックツールで、名刺のテンプレートを用意し、SVGファイルを保存する
+XSLTファイルにSVGファイルを差し込み編集する
''card.xsl''
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
(中略:必要なENTITY宣言など)
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="list">
<svg
(中略)
xml:space="preserve">
(中略)
</svg>
</xsl:template>
</xsl:stylesheet>
社員情報を穴埋め(スロットフィリング)したい箇所には、xsl:value-of でXPath形式の情報参照を記述します。
<xsl:value-of select="person/jp/LastName"/>
<xsl:value-of select="person/jp/FirstName"/>
これで、名刺の固定部分(版下となるグラフィック)部分と、社員情報の可変部分とを合成する準備が整いました。
*準備: 社員情報のリストを、普通のExcelシートとして用意する [#n9ab495a]
#ref(list.jpg,center,wrap)
行選択した個人情報を、XMLマッピング用のシートに転記する、数行のVBAを組み込みます。
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Dim s1, s2, j
Set s1 = Worksheets("List")
Set s2 = Worksheets("Map")
For j = 1 To 10
s2.Cells(3, j).Value = s1.Cells(Target.Row, j).Value
Next
End Sub
#br
(この原稿は書き掛けです)