0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

さくらエディタのマクロで文書のテンプレを出力する

Last updated at Posted at 2024-06-04

はじめに

業務日誌、議事録などのテキストを作成する際、テンプレートがあると便利なことがあります。元々は テンプレート_yyyymmdd.txt みたいなものを用意して都度手動でリネームしていましたが、これをマクロで実現してみようと思って書いてみました。

できたもの(結論)

WSH(JScript)で書いています。文字コードに気をつけてください。私はSJISを使いました。文字コードについては本家のドキュメントも参照してください。
https://sakura-editor.github.io/help/HLP000204.html

// 打ち合わせメモテンプレ作成

// 実行確認
if(MessageBox("エディタの入力内容を全て破棄し、テンプレートを適用します。\r\nよろしいですか?", 1) == 1) {
  setTemplate();
}

function setTemplate() {

    // 日付関連の文字列生成
    var dt = new Date();
    var year = dt.getFullYear();
    var month = ("00" + (dt.getMonth()+1)).slice(-2);
    var day = ("00" + (dt.getDate())).slice(-2);
    var week = dt.getDay();
    var weekString = ["","","","","","",""][week];
    var today = year + "" + month + "" + day + "" + "(" + weekString + ")";

    // 表題
    var meetingName = "朝ミーティング";
    // 保存先ディレクトリ
    var saveDir = "D:\\project01\\ミーティングメモ\\";
    // 保存拡張子
    var saveExtension = ".md.txt"
    // 保存ファイル名
    var saveFilename = meetingName + "_" + year + month + day + saveExtension;

    // クリア
    SelectAll( );
    Delete( );

    // ヘッダ部
    Editor.InsText("\r\n");
    Editor.InsText("# " + meetingName + "\r\n");
    Editor.InsText("  * " + today + "\r\n");
    Editor.InsText("\r\n");
    // 議題1
    Editor.InsText("## 本日の予定" + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("\r\n");
    // 議題2
    Editor.InsText("## XXXチーム報告" + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("\r\n");
    // 議題3
    Editor.InsText("## YYYチーム報告" + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("\r\n");
    // 議題4
    Editor.InsText("## その他" + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("  * " + "\r\n");
    Editor.InsText("\r\n");

    // 名前を付けて保存
    FileSaveAsDialog(saveDir + saveFilename);

}

説明

以下はダラダラとした説明です。

日付関連

この辺から拝借してきました。
https://qiita.com/VinceHeart/items/fc554fdee329a49aa928
本文とファイル名にそれぞれの形式で使用します。

ファイル名・表題など

    // 表題
    var meetingName = "朝ミーティング";
    // 保存先ディレクトリ
    var saveDir = "D:\\ほげほげプロジェクト\\ミーティングメモ\\";
    // 保存拡張子
    var saveExtension = ".md.txt"
    // 保存ファイル名
    var saveFilename = meetingName + "_" + year + month + day + saveExtension;

使いまわしがききやすいように、あえて細かく変数に切り分けています。日付を含むファイル名をここで決めてしまいます。
余談ですが拡張子 .md.txt は私の最近のお気に入りです。

クリア

    // クリア
    SelectAll( );
    Delete( );

そのまんま

テンプレート本体

    // ヘッダ部
    Editor.InsText("\r\n");
    Editor.InsText("# " + meetingName + "\r\n");
    Editor.InsText("  * " + today + "\r\n");
    Editor.InsText("\r\n");
    // 議題1
    Editor.InsText("## 本日の予定" + "\r\n");
    Editor.InsText("  * " + "\r\n");
    // (以下略)

Editor.InsText() でドンドコ書いていきます。タイトルやら日付は自動で。他テンプレートもご自身で使いたい議事録や日誌のフォーマットに従ってください。

名前を付けて保存

    // 名前を付けて保存
    FileSaveAsDialog(saveDir + saveFilename);

テンプレート出力直後に保存してしまうことで、さくらエディタのタイプ別設定が活きて色分けやキーワードハイライトをしてくれます。また、私の場合は自動保存も有効にしています。

実行確認

// 実行確認
if(MessageBox("エディタの入力内容を全て破棄し、テンプレートを適用します。\r\nよろしいですか?", 1) == 1) {
  setTemplate();
}

メッセージボックスを出してから実行します。いきなり全消しから始まるので・・・。

おわりに

この記事では紹介しませんが、所定のパスにマクロを保存し、ショートカットキー登録までしてしまうと便利ですね。

以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?