スナックelve 本店

バツイチ派遣40代女性の日記です

あるフォルダにあるフォント名の一覧をファイルに出力

snack.elve.club

これの画像作成過程。

こちらの記事に従うとインストールされた全フォントのリストは作成できた。
vbabeginner.net

今回購入した109のフォントのみで一覧を作成したい。
ファイル名=フォント名のリストは作れたが20書体ほど足りない結果に。TTFファイルからファイル名を取るには・・・
stackoverrun.com

ググったらc#が引っ掛かったので久しぶりにc#を使用することにする。変数の宣言どうすんだっけ? 状態ですよ。とほほ。

あるフォルダのサブフォルダも含めて特定の拡張子のファイルを探すってのがvbaだと再帰的に書かないといけなくて苦手だなぁって思ってたんですが、c#なら一発ですよ。べんりぃ。
araramistudio.jimdo.com

さて、なんどやっても「PrivateFontCollection 」は「System.Drawing.Text」にねーから。アセンブリ転送してるから(?)System.Drawing.Commonつかえ、的なエラーが出続けて途方にくれました。
.NET CORE再インストールしてみたりVisualStudio再インストールしたり・・・w

note.com
こちらを参考にしつつ環境を再構築したつもり。

結局コピペしなおして;を打ったらエラー消えた・・・。何だったんだ・・・。
ベースは
qiita.com

using System;
using System.Drawing;
using System.Drawing.Text;
using System.IO;
class Test
{
    public static void Main()
    {
        string myPath = @"フォントのパス\fonts66complete\";
        PrivateFontCollection fontCol = new PrivateFontCollection();

        try
        {
            string[] names = Directory.GetFiles(myPath, "*.ttf", System.IO.SearchOption.AllDirectories);
            foreach (string name in names)
            {
                fontCol.AddFontFile(name);
           }
        }

        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
        foreach (FontFamily myFont in fontCol.Families)
        {
            Console.WriteLine(myFont.Name);
            File.AppendAllText(@"出力パス\test.txt", myFont.Name + Environment.NewLine);
        }
    }
}

これで出力パスにできたtest.txtを開き、全選択コピー。
エクセルA列に貼りつけ。
テスト文章をB列に入れて、全選択してフォントサイズを20くらいに。

Sub setFont()
Dim i As Long: i = 1
Dim f As String
Do Until Cells(i, 1) = ""
    f = Cells(i, 1)
    Range(Cells(i, 1), Cells(i, 2)).Font.Name = f
    i = i + 1
Loop

End Sub

実行でサンプル作成。

このままだと図にならないので、セルを範囲選択してコピー→パワーポイントに図として貼りつけて、それを切り取ってブログに貼り付けた・・・。
もっとスマートな方法ありそうだよなぁ。