LoginSignup
9
9

More than 1 year has passed since last update.

Kindle蔵書一覧を出力するツール作成時の工夫

Last updated at Posted at 2022-05-18

成果物概要

Kindlist
Kindlistアイコン
Kindle for PCのXMLファイルを解析して、Excel形式に変換する機能を提供します。
書籍一覧が記載されたExcelファイルを、Kindle書籍管理にご活用下さい。
Vectorよりダウンロードが可能です。

:tada::tada::tada: お知らせ :tada::tada::tada:

窓の杜にてご紹介頂きました!
Kindleで購入済みの電子書籍をExcelで管理するには? 簡単にXLSX形式に変換できるツール

画面イメージ

KindlistMain.jpg
VerInfo.png

動作に必要なソフト

.NET Desktop Runtime 6.0.4 (x64)以降
Kindle for PC (またはKindleSyncMetadataCache.xml)

使い方

基本は「Kindlist.exe」を起動して「変換」ボタンを押すだけ。
詳細はnoteまたは付属のReadmeをご参照ください。

技術情報

開発はVisual Studio 2022とC#で行っています。
XMLを解析してKindleInfoという独自クラスに書籍情報を設定しています。
KindleInfoのListに設定した内容をClosedXMLを使用してExcel形式で出力しています。
この辺りは特筆すべきことは無いと思います。

困ったこと

取得した書籍情報を書籍名順でソートし、Excel出力したところ以下のようになってしまいました。
old.JPG
本来は1、2、3 ・・・ 9、10、11、12 ・・・と並んで欲しいところ。
実際には1、10、11、12 ・・・ 16、2、3と並んでしまいました。
これはプログラム言語(C#)標準のソート機能を利用しているため、仕様通りとなります。
しかし今回は蔵書管理を行いため、自然順(エクスプローラ順)ソートを行う方法を調べてみました。

対応内容

独自に自然順ソートを実装している強者の方もいらっしゃいましたが
今回はStrCmpLogicalWというWindows APIを呼び出す方法を採用しました。

NaturalSortComparer.cs
/// <summary>
/// 自然順で文字列比較
/// </summary>
public class NaturalSortComparer : IComparer, IComparer<string>
{
    [DllImport("shlwapi.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
    private static extern int StrCmpLogicalW(string x, string y);

    public int Compare(string x, string y)
    {
        return StrCmpLogicalW(x, y);
    }

    public int Compare(object x, object y)
    {
        return this.Compare(x.ToString(), y.ToString());
    }
}

これにより最小限の実装で、書籍名が自然順(エクスプローラ順)にソートできるようになりました。
new.JPG

スペシャルサンクス

アイコン制作:みなみ様
命名:みなみ様
広報:すいか

感想

普段はあまり意識していませんでしたが、エクスプローラのソート順というのは非常に優秀なんだと実感しました。

参考情報

Kindle蔵書一覧を取得する方法の記事と@error_401さんのコメントを参考にさせて頂きました。

9
9
2

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
9
9