(無料)Zoomウェビナー 「PDFの表をExcelに変換し、データを再利用する際の課題」

2022年4月5日(火)16時よりZoomのよるウェビナーを開催します。

タイトルは、
PDFの表をExcelに変換し、データを再利用する際の課題 〜 複数ページ、ページ指定、回転、範囲指定への対処法を実例を用いて解説 〜

として、PDFの中の表をExcelデータに変換するための課題、ツール、テクニックおよび実際の変換例をご紹介します。

どなたでもご参加いただけますので、ご興味をお持ちの方は、次のご案内ページよりお申込みください。


画像をクリックすると、外部サイト(マジセミ)の申込ページに遷移します。




瞬簡PDF 書けまっせ 2024
PDFに文字が書ける! 入力欄を自動認識


瞬簡PDF 編集 2024
かんたん操作でPDFを自由自在に編集

月曜日連載! Microsoft Wordスタイル探索(51)インデント関係コマンド(続き)

前回、インデント関係のコマンドの一覧を作りました。

コマンドの機能を調べて表にしてみました。

コマンド

キーボード・ショートカット

機能

リボン

Indent

Ctrl+M

インデントを増やす

IndentIncreaseWord

IndentChar

インデントを字送り分増やす

IndentFirstChar

字下げインデントを字送り分増やす

IndentFirstLine

字下げインデントを2文字分増やす

IndentLine

インデントを2文字分増やす

IndentSpecialFirstLine

不明

IndentSpecialHanging

不明

IndentSpecialNone

不明

UnIndent

Ctrl+Shift+M

インデントを減らす

IndentDecreaseWord

UnIndentChar

インデントを字送り分減らす

UnIndentFirstChar

字下げインデントを字送り分減らす

UnIndentFirstLine

字下げインデントを2文字分減らす

UnIndentLine

インデントを2文字分減らす

IncreaseIndent

インデントを字送り分増やす

HangingIndent

Ctrl+T

ぶら下げインデントを次のタブ位置まで増やす

UnHang

Chtl+Shift+T

ぶら下げインデントを前のタブ位置まで減らす

DecreaseIndent

インデントを2文字分減らす

AdjustListIndents

リストの位置を変更する

ListIndent

選択範囲を1レベル下げる

ListOutdent

選択範囲を1レベル上げる

Wordのリボン「ホーム」には「インデントを増やす」「インデントを減らす」というメニュー(ボタン)があります。これらは、キーボードショートカットとは異なるコマンドに対応しているようです。


【広告】
「ちょっと一息・アンテナハウスウェビナー」YouTubeのご案内。

Vol.1:Word文書をWebページにした例の紹介
Word文書を実際にWebページ(HTML)に変換した実例を紹介します。
Vol.2:Webページ構成要素別のWord編集例
Wordが持つ文書編集機能とWebページ作成時に必要となるHTMLタグがどのように対応しているかをご紹介します。
Vol.3:CSSによる、Webページのレイアウト
見栄えの良いWebページを作成するうえで必須のCSSについて、サンプルファイルを交えながら設定例をご紹介します。
Vol.4:Wordから上手にHTMLにする為の編集アドバイス
WordでWebページの原稿を作成するにあたり注意するべきポイントをご紹介します。


月曜日連載! Microsoft Wordスタイル探索
◆前回:(50)インデント関係コマンド
シリーズ総目次




瞬簡PDF 変換 2024
PDFをOffice文書へ高精度変換


瞬簡PDF 作成 2024
ドラッグ&ドロップでPDF作成

月曜日連載! Microsoft Wordスタイル探索(50)インデント関係コマンド

Microsoft Wordの機能はコマンドとして用意されていて、そのコマンドをリボンのメニューやキーボードのショートカットに割当られているようです。

コマンドの割り当ては、次のようにして変更できます。
①リボン「ファイル」の「オプション」メニューをクリックする。
②Wordのオプションダイアログが開くので、「リボンのユーザー設定」メニューをクリックする。
③「リボンのユーザー設定」ダイアログの左下「ユーザー設定」を開く。
するとキーボードにコマンドを割り当てるダイアログ(下図)が表示されます。

コマンド割り当てダイアログ

コマンド割り当てダイアログ


コマンドがカテゴリーに分類されて表示されます。

これをみるとインデント関係のコマンドが沢山あります。まずはどんなコマンドがあるかリストアップしてみましょう。

  • Indent
  • IndentChar
  • IndentFirstChar
  • IndentFirstLine
  • IndentLine
  • IndentSpecialFirstLine
  • IndentSpecialHanging
  • IndentSpecialNone
  • UnIndent
  • UnIndentChar
  • UnIndentFirstChar
  • UnIndentFirstLine
  • UnIndentLine
  • IncreaseIndent
  • HangingIndent
  • UnHang
  • DecreaseIndent
  • AdjustListIndents
  • ListIndent
  • ListOutdent

インデントに関係ありそうなのはこんなところです。ずいぶんたくさんありますね。

とりあえず、前回((49)インデントとタブの密な関係))使ったコマンドは次のようになっています。

リボン「ホーム」の「インデントを増やす」コマンド:Indent
[Ctrl]+[T]キー(ぶら下げインデントを深くする):HangingIndent


【広告】
「ちょっと一息・アンテナハウスウェビナー」YouTubeのご案内。

Vol.1:Word文書をWebページにした例の紹介
Word文書を実際にWebページ(HTML)に変換した実例を紹介します。
Vol.2:Webページ構成要素別のWord編集例
Wordが持つ文書編集機能とWebページ作成時に必要となるHTMLタグがどのように対応しているかをご紹介します。
Vol.3:CSSによる、Webページのレイアウト
見栄えの良いWebページを作成するうえで必須のCSSについて、サンプルファイルを交えながら設定例をご紹介します。
Vol.4:Wordから上手にHTMLにする為の編集アドバイス
WordでWebページの原稿を作成するにあたり注意するべきポイントをご紹介します。


月曜日連載! Microsoft Wordスタイル探索
◆前回:(49)インデントとタブの密な関係
◆次回:(51)インデント関係コマンド(続き)
シリーズ総目次




瞬簡PDF 編集 2024
かんたん操作でPDFを自由自在に編集


アウトライナー
PDFを解析して しおり・目次を自動生成

月曜日連載! Microsoft Wordスタイル探索(49)インデントとタブの密な関係

前回((48)段落先頭行のインデント、タブの基本)は、タブ機能を使うと、字下げインデント、ぶら下げインデントと似たようなレイアウト指定ができることをお話しました。

今回はタブとインデントの関係をもう少し探索してみます。

まず、任意設定のタブ位置を次のように3文字毎に設定してみます。

任意設定のタブ位置を3文字毎にする

任意設定のタブ位置を3文字毎にする

そして、リボン「ホーム」の「インデントを増やす」コマンドでインデントを増やしてみます。すると、次の図のようにコマンドを一回クリックすると左インデント位置が任意設定の最初のタブ位置になります。そして、コマンドをクリックするごとに左インデント位置が任意設定の次のタブ位置に移動します。

インデントを増やすコマンドで左インデントが次のタブ位置に移動する

インデントを増やすコマンドで左インデントが次のタブ位置に移動する

タブ設定位置がインデントを増やすコマンドの左インデント位置として使われていることが分かります。

次は、ぶら下げインデントの場合です。まず、次のように任意設定のタブ位置を2文字毎に設定します。

任意設定のタブ位置を2,4,6,8文字に設定

任意設定のタブ位置を2,4,6,8文字に設定

次に、[Ctrl]+[T]キーを入力します。すると、次のようにぶら下げインデントが、最初の任意設定のタブ位置である2文字の位置になります。そして、[Ctrl]+[T]キーを入力するごとにぶら下げインデントの位置が深くなっていきます。

[Ctrl]+[T]でぶら下げインデントの位置が次の任意設定のタブ位置に移動する

[Ctrl]+[T]でぶら下げインデントの位置が次の任意設定のタブ位置に移動する

このようにインデント関係のコマンドとタブ設定位置には深い関係があることが分かりました。


【広告】
11月16日(火曜日)16時からの「ちょっと一息・アンテナハウスウェビナー」YouTubeのご案内。

Vol.1:Word文書をWebページにした例の紹介
Word文書を実際にWebページ(HTML)に変換した実例を紹介します。
Vol.2:Webページ構成要素別のWord編集例
Wordが持つ文書編集機能とWebページ作成時に必要となるHTMLタグがどのように対応しているかをご紹介します。
Vol.3:CSSによる、Webページのレイアウト
見栄えの良いWebページを作成するうえで必須のCSSについて、サンプルファイルを交えながら設定例をご紹介します。
Vol.4:Wordから上手にHTMLにする為の編集アドバイス
WordでWebページの原稿を作成するにあたり注意するべきポイントをご紹介します。


月曜日連載! Microsoft Wordスタイル探索
◆前回:(48)段落先頭行のインデント、タブの基本
◆次回:(50)インデント関係コマンド
シリーズ総目次




瞬簡PDF 変換 2024
PDFをOffice文書へ高精度変換


HTML on Word
WebページをWordで作る!

月曜日連載! Microsoft Wordスタイル探索(48)段落先頭行のインデント、タブの基本

第45回で説明した右インデントと左インデントは用紙の余白を規準にして段落全体の開始位置と終了位置を変更(設定)する機能です。

月曜日連載! Microsoft Wordスタイル探索 (45)インデント機能の基本

それに対して、段落の最初の行だけの開始位置を変更するインデントが字下げインデントとぶら下げインデントです。

一行目(先頭行)インデントの設定

一行目(先頭行)インデントの設定

次の図は字下げインデントとぶら下げインデントをそれぞれ1文字に設定した段落の例です。

字下げインデント、ぶら下げインデントの設定例

字下げインデント、ぶら下げインデントの設定例

字下げインデントは段落の始まりを分かりやすくするために使います。日本語のレイアウトでは段落の先頭を1文字字下げするのが一般的ですが、活字方式では行頭に空白文字を1文字置きます。Wordの段落でこのようなレイアウトをするときは段落の先頭に空白文字を入力しないで、字下げインデントを使う方が、いろいろと好都合です。

タブ
インデントと類似の機能にタブがあります。タブは行の中にタブ位置を設定しておき、タブ文字(タブキーで入力する文字)から始まる文字列の始まりをタブ位置に設定する機能です。タブ位置は「タブとリーダー」ダイアログを使って「既定のタブ位置」の変更、または任意の位置にタブ位置を設定できます。

任意に設定したタブ位置はルーラーに表示されます。次の図は2文字の位置にタブを設定した例です。

任意の位置にタブをタブの設定

任意の位置にタブを設定

段落の先頭で「タブ」を入力(Tabキーを押下)すると段落の先頭が2文字目から始まります。これは先頭行インデントと似ていますね。

段落の先頭にタブを入力

段落の先頭にタブを入力

「Ctrl」キーと「T」キーで、2行目以降をタブ位置に揃えることができます。これはぶら下げインデントに似ています。

段落の先頭で字下げのタブを入力

段落の先頭でぶら下げのタブを入力

このようにタブ機能を使うと、一見、字下げインデント、ぶら下げインデントと似たようなレイアウト指定ができます。


【広告】
11月16日(火曜日)16時からの「ちょっと一息・アンテナハウスウェビナー」YouTubeのご案内。

Vol.1:Word文書をWebページにした例の紹介
Word文書を実際にWebページ(HTML)に変換した実例を紹介します。
Vol.2:Webページ構成要素別のWord編集例
Wordが持つ文書編集機能とWebページ作成時に必要となるHTMLタグがどのように対応しているかをご紹介します。
Vol.3:CSSによる、Webページのレイアウト
見栄えの良いWebページを作成するうえで必須のCSSについて、サンプルファイルを交えながら設定例をご紹介します。
Vol.4:Wordから上手にHTMLにする為の編集アドバイス
WordでWebページの原稿を作成するにあたり注意するべきポイントをご紹介します。


月曜日連載! Microsoft Wordスタイル探索
◆前回:(47)本文領域の幅が文字数×文字サイズの値に一致しないときの余りの調整を探索
◆次回:(49)インデントとタブの密な関係
シリーズ総目次




瞬簡PDF 編集 2024
かんたん操作でPDFを自由自在に編集


HTML on Word
WebページをWordで作る!

e-na伊那谷 旅便り 第83回 二年参りと伊那スキーリゾート

明けましておめでとうございます。
年末年始は如何お過ごしでしたでしょうか。

長野県では「二年参り」を行う風習があります。
「二年参り」は初詣の一種で大晦日の夜から年明けにかけての初詣のことを「二年参り」と呼んでいます。
この風習により、年明けカウントダウンを行うような時間帯では神社に人が集まることが多く、
最寄りの神社などでは二年参りの際に知人と出会うことも珍しくありません。

今年は感染症予防を加味して、アンテナハウス伊那支店が所在する南箕輪村の神社に時間を早めてお参りしてきました。
南箕輪村役場の横に位置する八幡宮です。

お宮へ続く道からライトアップされていて神秘的な景観でした。(参拝者がいなかったこともあり)

破魔矢をお焚き上げして頂き、新しい破魔矢と家族分のお守りを授かって帰りました。
お守りには今年も家族が健康で過ごせるよう願いが詰まっています。

年末年始は運動不足になりがちなので、伊那スキーリゾートにいってウィンタースポーツで運動不足の解消です。
正直なところ白馬のゲレンデなどと比べるとコースは少なく距離も短いのですが、伊那市内から20分かからずにいけることが大きなメリットです。
中央道伊那インターからも近いですよ。

年始にいきましたが人も多く皆さん今年の初滑りを楽しんでいました。

久しぶりにスキーに挑戦しましたが、滑り方を忘れていて一度転んだまま動けませんでした・・
慣れているスノーボードに切り替えて(お守りの効果もあってか)怪我もなく楽しむことができました。

以上、「二年参り」「伊那スキーリゾート」についてお送りしました。
本年もどうぞ宜しくお願い致します。




瞬簡PDF 変換 2024
PDFをOffice文書へ高精度変換


HTML on Word
WebページをWordで作る!

『Office Open XML Formats入門 第2版』を制作しました

2021年12月07日 16:00~17:00 に「ちょっと一息アンテナハウスウェビナー『Office Open XML Formats入門 第2版』制作報告」を発表しました。販売、公開よりも発表が先になってしまったため、内容が気になっていた方もいらっしゃるのではないでしょうか。

こちらが表紙画像です。

Amazon POD用表紙画像

2021年12月07日ウェビナーのバナー

組版をAH XSL Formatter V7.2で行ったため、『AH Formatter XML関連出版物の紹介』ページに掲載しています。

Amazonの販売ページへのリンクは次の通りです。

https://www.amazon.co.jp/gp/product/4900552836

また、本書のPDF版は弊社オンラインショップからご購入いただけます。印刷版とレイアウトの微調整を行いました。

https://web.antenna.co.jp/shop/html/products/detail.php?product_id=1301

HTML版はOffice Servers資料室のページからご覧いただけます。


ウェビナー概要や書籍紹介ページにある通り、アンテナハウス『Office Open XML Formats入門』の初版は2007年に出版社から刊行されました。
今年は2021年、つまり14年程前の書籍の改訂版ということになります。
内容的な修正は必要とはいえ、以前の版の原稿をベースに新たな版を制作するというとき、XML原稿はほとんど変更が必要ありません。以前の版の構造に不満がある場合はその限りではありませんが。

一方で大規模な修正の余地があるのがXSLTでした。そしてウェビナー(と書籍の後書き)では、XSLTについてはかなり省いて説明することになったため、本記事ともう一度どこかで補足することにしたいと思います。

2007年というのは、XSL的にもそこそこ大きな節目でした。XSLT 2.0のW3C勧告です。XSL 1.1の勧告は2006年でしたが、実利用として熟れていないという点では二者とも同様です。XSLT 2.0以降はミスの発見やスクリプトの見通しにおいてXSLT 1.0とは別言語に近い体験をもたらします。msxmlのXSLTが1.0であることや各ウェブブラウザほか処理系の多くが1.0までしか対応していないことも手伝って、使える状況が限られるのは悩ましいところです。

変更の概略

今回は自社事例でしたので、初版で1.0だったXSLTを3.0に書き換えました(完全に3.0向けに最適化したとはとても言えませんが)。

書籍初版の制作報告にもあったように、XSL 1.1での大きなポイントにbookmarkのとindex関係の語彙が入ったことが挙げられます。『Office Open XML Formats入門』初版では、bookmarkについてはXSL Formatterの拡張仕様、索引についてはbasic-linkとXSLTによる力技による解決が図られていました。

(AH )XSL Formatterの拡張仕様では実際のフローコンテンツ登場箇所と同一の箇所に記述するため、処理においてXML中の章構造に当たったときに同時に処理すれば良いことになります。よってXSLT記述としてはbookmark-tree用に処理を追加するよりも単純に書けます。XSLT 1.0で書く場合は複数回ドキュメントを走査することが難しいということも手伝っていたのかもしれません。

索引構造については、XSL 1.1のindexを導入することで、XSLTで行わなければならなかった処理が簡略化されます。索引語に当たったときの処理で、「既に同じ索引語が登場しているか」「同じ索引語が同ページに登場したときにページ数表示を合一する」といった判別がXSLのプロパティで変更可能になるため、分岐処理などが大幅に簡略化できました。

割とアドホックな書き換えを行っていたり、徹底できていなかったりするため、引き継ぎをするにはリファクタリングが必至ですが、大体このようなことを行いました。

  • テンプレート中に直接書き込まれたattributeをattribute-setへまとめる
  • 共通処理をまとめる。
  • apply-templatesを含まないような分岐は名前付きテンプレートへ追いだし、パラメータを渡すようにする
  • XPathによる値の取得はできるだけテンプレートの先頭でまとめ、利用箇所ではselect="$value"のように呼び出すだけにする

先に書いた通り徹底はできておらず、私自身も、テンプレート中で直接attributeを指定しているような箇所をかなり生み出してしまいました。とはいえ、ギリギリの時期に「ヘッダーの位置をもう少し下げて」といった指示に1行の変更だけで対応できるようにはできたので、無駄ではなかったと思います。

実は上に挙げたものはXSLT 1.0時点でも時間さえあれば行える変更で、3.0への変更には関係ありません。値のみを取得、操作したい箇所をfunction化したり、処理をreplace()関数に書き換えたりといった作業は2.0から行えます。3.0としては関数の括弧が入れ子ではなくarrowを使えたり、文字列結合に「||」を使えるといった枝葉の変更点を使用しています。

参考資料




アウトライナー
PDFを解析して しおり・目次を自動生成


瞬簡PDF 書けまっせ 2024
PDFに文字が書ける! 入力欄を自動認識

月曜日連載! Microsoft Wordスタイル探索(47)本文領域の幅が文字数×文字サイズの値に一致しないときの余りの調整を探索

月曜日連載! Microsoft Wordスタイル探索の前々回(月(45)インデント機能の基本)と前回((46)余白についてー補足)では、本文領域の幅が文字数×文字サイズの値に一致しない、つまり余りがでるときの扱いについて、「一行の文字数を指定時に右のインデント幅を自動調整する」が、ONのとき、その余りはインデント量の調整として余白に追加されることを説明しました。

今回は、この余りの調整についてもう少し探索してみます。

文字の大きさと余りの大きさ
まず、余りの大きさは、段落の文字の大きさによって変わります。例えば、用紙サイズA4のとき用紙の幅は210mmです。仮に左右の余白を各30㎜とすると、本文領域の幅は210-(30+30)=150㎜となります。
例として段落の文字サイズを9ポイントから24ポイントまで変更して、それぞれの設定での余りの幅を計算してみると、次の表のようになります。

段落の文字サイズ(pt)

文字サイズ(mm)

文字数

本文領域に入る文字数

余り(mm)

9

3.175

47.24409449

47

0.775

10.5

3.70416667

40.49493813

40

1.833333

12

4.23333333

35.43307087

35

1.833333

16

5.64444444

26.57480315

26

3.244444

20

7.05555556

21.25984252

21

1.833333

24

8.46666667

17.71653543

17

6.066667

9ポイントのときの余りが一番小さく、12ポイント、16ポイント、24ポイントと余りが大きくなります。

9ポイントではON/OFFで一行の文字数が変わる
「一行の文字数を指定時に右のインデント幅を自動調整する」がON/OFFでのレイアウト変化を見ると、9ポイントのときONにすると一行の文字数がOFFの時よりも小さくなっています。

一行の文字数を指定時に右のインデント幅を自動調整するのON/OFFの変化

一行の文字数を指定時に右のインデント幅を自動調整するのON/OFFの変化

ONにするとインデント幅がOFFのときよりも広くなり、行末の1文字分が入らなくなっているためです。

両端揃えのとき
両端揃えでは、OFFの時は行末が余白の位置になり、ONの時は余白の位置よりも内側になります。

両端揃え: 一行の文字数を指定時に右のインデント幅を自動調整する」がOFFとON比較

両端揃え:一行の文字数を指定時に右のインデント幅を自動調整する」がOFFとON比較

なぜ、このようになるかを考えてみると、これを見るとインデント幅の調整量は、段落ごとの文字の大きさで計算した余りではなく、文書全体で同じ値が適用されるためのようです。


【広告】
11月16日(火曜日)16時からの「ちょっと一息・アンテナハウスウェビナー」YouTubeのご案内。

Vol.1:Word文書をWebページにした例の紹介
Word文書を実際にWebページ(HTML)に変換した実例を紹介します。
Vol.2:Webページ構成要素別のWord編集例
Wordが持つ文書編集機能とWebページ作成時に必要となるHTMLタグがどのように対応しているかをご紹介します。
Vol.3:CSSによる、Webページのレイアウト
見栄えの良いWebページを作成するうえで必須のCSSについて、サンプルファイルを交えながら設定例をご紹介します。
Vol.4:Wordから上手にHTMLにする為の編集アドバイス
WordでWebページの原稿を作成するにあたり注意するべきポイントをご紹介します。


月曜日連載! Microsoft Wordスタイル探索
◆前回:(46)余白についてー補足
◆次回:(48)段落先頭行のインデント、タブの基本
シリーズ総目次




瞬簡PDF 作成 2024
ドラッグ&ドロップでPDF作成


瞬簡PDF 変換 2024
PDFをOffice文書へ高精度変換

XSL-FO 試行錯誤 カレンダーを自動生成したい(その月のマスの最初の日を取得する)

XSL-FO 試行錯誤 カレンダーを自動生成したい(構想編)の続きとなります。

大抵のカレンダーにおいて、ある月の表における最初の日付は「1日」ではありません。日曜始まりのカレンダーなら、「その月の1日が含まれる週の日曜日の日付」を取得する必要があります。このとき同様に「その月の最終日が含まれる週の土曜日」も考える必要がありますが、今回は割愛します。

XSLT 2.0からは日付関連の関数が使えるので、これを使っていくことにします。

<xsl:transform 
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns:fn="http://www.w3.org/2005/xpath-functions"
 xmlns:fo="http://www.w3.org/1999/XSL/Format"
 xmlns:axf="http://www.antennahouse.com/names/XSL/Extensions"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0"
 xmlns:cal="urn:calendar"
 exclude-result-prefixes="xs fn">...</xsl:transform>

ルートはこんな感じです。foやaxfは今回登場しません。XSLT 2.0からは型の時点でエラーを検知したりといったことが可能なので、XMLSchemaの名前空間はかかせません。xpath-functionsの名前空間は宣言しなくとも使えますが、自作関数との区別用に明示しています。独自に実装する名前空間はcalというprefixを付けることにします(functionのnameには名前空間の明示が必要になります)。

 <xsl:function name="cal:getWeekDay" as="xs:integer">
   <xsl:param name="day" as="xs:date"/>
     <xsl:sequence select="$day => fn:format-date('[F]') => cal:weekDayInteger()"/>
 </xsl:function>

 <xsl:function name="cal:weekDayInteger" as="xs:integer">
   <xsl:param name="wd" as="xs:string"/>
   <xsl:choose>
     <xsl:when test="$wd eq 'sunday'">
       <xsl:sequence select="0"/> 
     </xsl:when>
     <xsl:when test="$wd eq 'monday'">
       <xsl:sequence select="1"/> 
     </xsl:when>
     ...
     <xsl:otherwise>     
       <xsl:message terminate="yes" select="'Invalid input'"/>
   </xsl:otherwise> 
 </xsl:choose>
 </xsl:function>

曜日を0-6のxs:integerで取得することにします。日付の曜日自体はfn:format-date(‘[F]’)で取得できますが、これをxs:integerに置き換えます。これは次回以降、moduloを使って日付の表を埋めていくためです。

「=>」はXSLT 3.0から使える記法で、処理の見た目がすっきりします。cal:weekDayIntegerについてはXSLT 3.0的にはmap{‘sunday’:0, …}のように曜日のstringと対応付ける整数をまとめて、それを展開する形がより望ましいかもしれません。2.0でも外部XMLや、xsl:chooseではなくXPathのifなどにまとめると記述量は減ります。xsl:otherwiseではmessage@terminate=”yes”で処理を強制終了していますが、ライブラリなどとして整備するなら分岐処理前にxsl:assertやxsl:tryなどで対応しておきたいところです。

  <xsl:function name="cal:getFirstDayOfTable" as="xs:date">
   <xsl:param name="firstDay" as="xs:date"/>
   <xsl:param name="weekStart" as="xs:integer"/>
     <xsl:variable name="weekDayOfFD" select="cal:getWeekDay($firstDay)"/>
     <xsl:choose>
       <xsl:when test="$weekDayOfFD eq $weekStart">
         <xsl:sequence select="$firstDay"/>
       </xsl:when>
       <xsl:otherwise>
         <xsl:variable name="dur" select="'P' || string(abs($weekDayOfFD - $weekStart)) || 'D'" as="xs:string"/>
         <xsl:sequence
           select="(xs:dateTime($firstDay) - xs:dayTimeDuration($dur)) =>xs:date()"/>
       </xsl:otherwise>
    </xsl:choose>
 </xsl:function>

その月の最初の日(xs:date)と、左端に来る曜日(xs:integer)を引数にして、初週の左端にくる曜日を取得します。

最初の日の曜日をvariableで持つことで、後で使用しやすくしています。この日が始まりの曜日と一緒なら後の計算はいらないので分岐させます。整数同士の比較です。

一緒でない場合、最初の日から曜日のギャップ分遡った日付を取得する必要があります。

最初の日をdateTimeにキャストし、そこにdayTimeDurationでギャップ分の日をマイナスし、それをxs:dateに戻します。

結果を確認してみましょう。2022年1月のカレンダーの表(日曜始まり)ならば、入力「2022-01-01」に対し「2021-12-26」が期待する結果となります。

<xsl:param name="dateArg" as="xs:date" />
 <xsl:template name="xsl:initial-template">
   <xsl:variable name="weekStart" select="0" as="xs:integer"/>
   <xsl:message>
     <xsl:sequence select="xs:date($dateArg) =>
       cal:getFirstDayOfTable($weekStart)"/>
   </xsl:message>
 </xsl:template>

XSLT 3.0では、ダミーのソースXMLファイルを用意しなくとも上のように「xsl:initial-template」という特殊な名前のテンプレートを使うなどして直接XSLTプログラムを走らせられます。グローバルのパラメータdateArgに入力した月始めのxs:dateを処理した結果を表示してくれます。

果たして私の環境では「2021-12-26」が出力されました。

考慮するケースが足りないかもしれません。無保証であることにくれぐれもご留意ください。

他、関数などに落としこめる事項としては年度の切り換えがあります。これは次回取り組みたいと思います。XSL-FOまでいきませんでした……。

関連記事

XSL-FO 試行錯誤 カレンダーを自動生成したい(構想編)

関連資料

XSL Transformations (XSLT) Version 3.0
W3C Recommendation 8 June 2017





瞬簡PDF 作成 2024
ドラッグ&ドロップでPDF作成


HTML on Word
WebページをWordで作る!

月曜日連載! Microsoft Wordスタイル探索 (46)余白についてー補足

先週の、月曜日連載! Microsoft Wordスタイル探索 (45)インデント機能の基本で、余白について説明しました。

その中で、

本文段落の幅は、通常、文字数×本文文字の大きさになります。すると、用紙の幅から左右余白の大きさを差し引いた値が、文字の大きさの倍数になっていないとき、本文段落の幅とは一致しないで余りがでます。この差(余り)は右余白に追加されます。

と説明しました。しかし、もう少し詳しく調べてみると、この動作は段落の設定によります。

「段落」ダイアログに「一行の文字数を指定時に右のインデント幅を自動調整する」というチェックボックスがあります。

「段落」ダイアログ「一行の文字数を指定時に右のインデント幅を自動調整する」

「段落」ダイアログ「一行の文字数を指定時に右のインデント幅を自動調整する」

前回の説明はこのチェックボックスがONになっているときの動作になります。ONのときは余りが右インデントの値に追加されます。次の図は段落の右インデントがゼロのときの動作です。チェックボックスがONのときは、右インデントがゼロでも余白と本文の終端に空きがあることが分かります。OFFにすると余白と本文の終端の空きがなくなります。

文字数×文字間の値と本文領域の幅の余りの扱い

文字数×文字間の値と本文領域の幅の余りの扱い

なお、チェックボックスOFFで余りがあるときの動作は段落の揃え指定によります。次の図は、段落の揃え設定を「両端揃え」(一番上)、「左揃え」(二番目)、「中央揃え」(三番目)、「下揃え」(一番下)にしたときの余りの位置です。

段落の揃えにより、余りの分配が変化する

段落の揃えにより、余りの分配が変化する

段落の揃えが両端揃えのとき、余りは文字間に分配されます。左揃えでは余りは右余白に追加(右インデントの増加)、中央揃えでは余りは左右余白に配分、右揃えではあまりが左余白に追加(左インデントの増加)として扱われています。

なお、「一行の文字数を指定時に右のインデント幅を自動調整する」チェックONの時は、段落の揃えの設定に関わらず、余りは右インデントの増加として扱われます。


【広告】
11月16日(火曜日)16時からの「ちょっと一息・アンテナハウスウェビナー」YouTubeのご案内。

Vol.1:Word文書をWebページにした例の紹介
Word文書を実際にWebページ(HTML)に変換した実例を紹介します。
Vol.2:Webページ構成要素別のWord編集例
Wordが持つ文書編集機能とWebページ作成時に必要となるHTMLタグがどのように対応しているかをご紹介します。
Vol.3:CSSによる、Webページのレイアウト
見栄えの良いWebページを作成するうえで必須のCSSについて、サンプルファイルを交えながら設定例をご紹介します。
Vol.4:Wordから上手にHTMLにする為の編集アドバイス
WordでWebページの原稿を作成するにあたり注意するべきポイントをご紹介します。


月曜日連載! Microsoft Wordスタイル探索
◆前回:(45)インデント機能の基本
◆次回:(47)本文領域の幅が文字数×文字サイズの値に一致しないときの余りの調整を探索
シリーズ総目次




瞬簡PDF 統合版 2024
アンテナハウスPDFソフトの統合製品!


瞬簡PDF 編集 2024
かんたん操作でPDFを自由自在に編集
Pages: Prev 1 2 3 4 5 6 7 8 9 10 ... 229 230 231 Next