🐈
DuckDBでExcelファイルを読み取る - C#
概要
C#でのExcel操作のライブラリといえばOpenXMLなのですが、使いにくさは否定できません。
その代替案といえば、以下です。
上記については、既に解説がなされているのでそちらをご覧ください。
- https://learn.microsoft.com/ja-jp/office/open-xml/open-xml-sdk
- https://qiita.com/gushwell/items/5c689e86014105313017
- https://qiita.com/midori44/items/acab9106e6dad9653e73
- https://qiita.com/shironana/items/07822e51b53289bf0aa3
さて、DuckDBからExcelファイルを読み書きしてみたを見るに、ここに更なる選択肢が出たか、ということで読み込みを試してみました。
個人的にはduckdb-wasmを使いたいところなのですがどうにも.NETからduckdb-wasmを使う方法が分からなかったので、通常のDuckDBでやってみています。
前提
- WSL Ubuntu 22.04.5 LTS (Jammy Jellyfish)
- DuckDB v1.2.1 8e52ec4395 [https://duckdb.org/docs/installation/?version=stable&environment=cli&platform=linux&download_method=direct&architecture=x86_64]
- dotnet 8.0.112
コード
この記事のコードは以下に配置しています。
.NETプロジェクトの作成とライブラリの選定
ざっとプロジェクトを作ります。
$ dotnet new console
$ dotnet new gitignore
$ dotnet new editorconfig
ライブラリは公式のドキュメントに記載のDuckDB.NETを用います。
dotnet add package DuckDB.NET.Data.Full
サンプルデータ
データセットはいい感じのがなかったため
年齢(5歳階級)、男女別人口(2024年9月確定値、2025年2月概算値)から取得。
データの読み取り
DuckDB Excel Extensionに記載の通りのオプションを用いて読み取ります。
command.CommandText = "CREATE TABLE sample_database AS SELECT * FROM read_xlsx('./data/05k2-3.xlsx', header = true, range = 'A4:I100', empty_as_varchar=true);";
var executeNonQuery = command.ExecuteNonQuery();
読めます。
$ dotnet run
時間軸コードジカンジク 人口区分ジンコウクブン 時点ジテン 年齢階級ネンレイカイキュウ 区分クブン 単位タンイ 男女計ダンジョケイ 男オトコ 女オンナ
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 総数 人口ジンコウ 万人 12354 6010 6343
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 0歳~4歳サイ 人口ジンコウ 万人 389 199 190
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 5歳~9歳サイサイ 人口ジンコウ 万人 466 238 227
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 10歳~14歳サイサイ 人口ジンコウ 万人 517 265 252
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 15歳~19歳サイサイ 人口ジンコウ 万人 548 281 267
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 20歳~24歳サイサイ 人口ジンコウ 万人 624 322 302
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 25歳~29歳サイサイ 人口ジンコウ 万人 649 334 315
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 30歳~34歳サイサイ 人口ジンコウ 万人 640 329 311
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 35歳~39歳サイサイ 人口ジンコウ 万人 681 348 333
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 40歳~44歳サイサイ 人口ジンコウ 万人 758 384 373
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 45歳~49歳サイサイ 人口ジンコウ 万人 864 438 426
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 50歳~54歳サイサイ 人口ジンコウ 万人 981 495 486
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 55歳~59歳サイサイ 人口ジンコウ 万人 853 427 426
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 60歳~64歳サイサイ 人口ジンコウ 万人 762 378 384
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 65歳~69歳サイサイ 人口ジンコウ 万人 721 351 370
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 70歳~74歳サイサイ 人口ジンコウ 万人 802 379 423
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 75歳~79歳サイサイ 人口ジンコウ 万人 810 366 443
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 80歳~84歳サイサイ 人口ジンコウ 万人 608 252 355
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 85歳~89歳サイサイ 人口ジンコウ 万人 397 145 251
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 90歳~94歳サイサイ 人口ジンコウ 万人 211 61 150
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 95歳~99歳サイサイ 人口ジンコウ 万人 65 14 52
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 100歳以上 人口ジンコウ 万人 9 1 8
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 15歳未満ミマン 人口ジンコウ 万人 1371 702 669
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 15歳~64歳サイサイ 人口ジンコウ 万人 7360 3738 3623
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 65歳以上 人口ジンコウ 万人 3622 1570 2052
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) うち75歳以上 人口ジンコウ 万人 2099 840 1259
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) うち85歳以上 人口ジンコウ 万人 682 221 461
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 15歳未満ミマン 割合ワリアイ % 11.1 11.7 10.5
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 15歳~64歳サイサイ 割合ワリアイ % 59.6 62.2 57.1
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) 65歳以上 割合ワリアイ % 29.3 26.1 32.3
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) うち75歳以上 割合ワリアイ % 17 14 19.8
2025000202 総人口ソウジンコウ 2025年2月1日現在(概算値) うち85歳以上 割合ワリアイ % 5.5 3.7 7.3
2024000909 総人口ソウジンコウ 2024年9月1日現在(確定値) 総数 人口ジンコウ 千人センニン 123779 60217 63562
2024000909 総人口 2024年9月1日現在(確定値) 0歳~4歳サイ 人口ジンコウ 千人センニン 3946 2021 1925
2024000909 総人口ソウジンコウ 2024年9月1日現在(確定値) 5歳~9歳サイサイ 人口ジンコウ 千人センニン 4725 2420 2305
2024000909 総人口 2024年9月1日現在(確定値) 10歳~14歳サイサイ 人口ジンコウ 千人センニン 5186 2657 2529
2024000909 総人口ソウジンコウ 2024年9月1日現在(確定値) 15歳~19歳サイサイ 人口ジンコウ 千人センニン 5475 2809 2666
2024000909 総人口 2024年9月1日現在(確定値) 20歳~24歳サイサイ 人口ジンコウ 千人センニン 6223 3210 3013
2024000909 総人口ソウジンコウ 2024年9月1日現在(確定値) 25歳~29歳サイサイ 人口ジンコウ 千人センニン 6504 3348 3157
2024000909 総人口 2024年9月1日現在(確定値) 30歳~34歳サイサイ 人口ジンコウ 千人センニン 6381 3281 3100
2024000909 総人口ソウジンコウ 2024年9月1日現在(確定値) 35歳~39歳サイサイ 人口ジンコウ 千人センニン 6884 3515 3370
2024000909 総人口 2024年9月1日現在(確定値) 40歳~44歳サイサイ 人口ジンコウ 千人センニン 7639 3875 3764
2024000909 総人口ソウジンコウ 2024年9月1日現在(確定値) 45歳~49歳サイサイ 人口ジンコウ 千人センニン 8773 4446 4327
2024000909 総人口 2024年9月1日現在(確定値) 50歳~54歳サイサイ 人口ジンコウ 千人センニン 9769 4932 4836
2024000909 総人口ソウジンコウ 2024年9月1日現在(確定値) 55歳~59歳サイサイ 人口ジンコウ 千人センニン 8476 4243 4232
2024000909 総人口 2024年9月1日現在(確定値) 60歳~64歳サイサイ 人口ジンコウ 千人センニン 7554 3744 3810
2024000909 総人口ソウジンコウ 2024年9月1日現在(確定値) 65歳~69歳サイサイ 人口ジンコウ 千人センニン 7277 3544 3733
2024000909 総人口 2024年9月1日現在(確定値) 70歳~74歳サイサイ 人口ジンコウ 千人センニン 8250 3896 4354
2024000909 総人口ソウジンコウ 2024年9月1日現在(確定値) 75歳~79歳サイサイ 人口ジンコウ 千人センニン 7841 3545 4296
2024000909 総人口 2024年9月1日現在(確定値) 80歳~84歳サイサイ 人口ジンコウ 千人センニン 6129 2550 3578
2024000909 総人口ソウジンコウ 2024年9月1日現在(確定値) 85歳~89歳サイサイ 人口ジンコウ 千人センニン 3941 1440 2501
2024000909 総人口 2024年9月1日現在(確定値) 90歳~94歳サイサイ 人口ジンコウ 千人センニン 2085 600 1485
2024000909 総人口ソウジンコウ 2024年9月1日現在(確定値) 95歳~99歳サイサイ 人口ジンコウ 千人センニン 634 130 503
2024000909 総人口 2024年9月1日現在(確定値) 100歳以上 人口ジンコウ 千人センニン 88 11 77
2024000909 総人口ソウジンコウ 2024年9月1日現在(確定値) 15歳未満ミマン 人口ジンコウ 千人センニン 13857 7098 6760
2024000909 総人口 2024年9月1日現在(確定値) 15歳~64歳サイサイ 人口ジンコウ 千人センニン 73678 37403 36275
2024000909 総人口ソウジンコウ 2024年9月1日現在(確定値) 65歳以上 人口ジンコウ 千人センニン 36243 15716 20527
2024000909 総人口 2024年9月1日現在(確定値) うち75歳以上 人口ジンコウ 千人センニン 20716 8276 12440
2024000909 総人口ソウジンコウ 2024年9月1日現在(確定値) うち85歳以上 人口ジンコウ 千人センニン 6747 2181 4566
2024000909 総人口 2024年9月1日現在(確定値) 15歳未満ミマン 割合ワリアイ % 11.2 11.8 10.6
2024000909 総人口ソウジンコウ 2024年9月1日現在(確定値) 15歳~64歳サイサイ 割合ワリアイ % 59.5 62.1 57.1
2024000909 総人口 2024年9月1日現在(確定値) 65歳以上 割合ワリアイ % 29.3 26.1 32.3
2024000909 総人口ソウジンコウ 2024年9月1日現在(確定値) うち75歳以上 割合ワリアイ % 16.7 13.7 19.6
2024000909 総人口 2024年9月1日現在(確定値) うち85歳以上 割合ワリアイ % 5.5 3.6 7.2
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 総数 人口ジンコウ 千人センニン 120372 58486 61886
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 0歳~4歳サイ 人口ジンコウ 千人センニン 3855 1974 1881
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 5歳~9歳サイサイ 人口ジンコウ 千人センニン 4637 2374 2263
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 10歳~14歳サイサイ 人口ジンコウ 千人センニン 5106 2615 2490
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 15歳~19歳サイサイ 人口ジンコウ 千人センニン 5333 2735 2599
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 20歳~24歳サイサイ 人口ジンコウ 千人センニン 5702 2925 2776
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 25歳~29歳サイサイ 人口ジンコウ 千人センニン 5916 3016 2900
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 30歳~34歳サイサイ 人口ジンコウ 千人センニン 5925 3026 2900
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 35歳~39歳サイサイ 人口ジンコウ 千人センニン 6558 3342 3217
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 40歳~44歳サイサイ 人口ジンコウ 千人センニン 7381 3753 3628
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 45歳~49歳サイサイ 人口ジンコウ 千人センニン 8574 4358 4215
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 50歳~54歳サイサイ 人口ジンコウ 千人センニン 9590 4859 4731
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 55歳~59歳サイサイ 人口ジンコウ 千人センニン 8326 4185 4142
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 60歳~64歳サイサイ 人口ジンコウ 千人センニン 7443 3699 3744
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 65歳~69歳サイサイ 人口ジンコウ 千人センニン 7201 3512 3689
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 70歳~74歳サイサイ 人口ジンコウ 千人センニン 8195 3872 4323
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 75歳~79歳サイサイ 人口ジンコウ 千人センニン 7801 3527 4274
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 80歳~84歳サイサイ 人口ジンコウ 千人センニン 6103 2540 3563
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 85歳~89歳サイサイ 人口ジンコウ 千人センニン 3927 1435 2491
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 90歳~94歳サイサイ 人口ジンコウ 千人センニン 2080 599 1481
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 95歳~99歳サイサイ 人口ジンコウ 千人センニン 633 130 503
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 100歳以上 人口ジンコウ 千人センニン 88 11 77
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 15歳未満ミマン 人口ジンコウ 千人センニン 13598 6963 6634
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 15歳~64歳サイサイ 人口ジンコウ 千人センニン 70747 35897 34851
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 65歳以上 人口ジンコウ 千人センニン 36027 15626 20401
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) うち75歳以上 人口ジンコウ 千人センニン 20631 8242 12389
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) うち85歳以上 人口ジンコウ 千人センニン 6727 2175 4552
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 15歳未満ミマン 割合ワリアイ % 11.3 11.9 10.7
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 15歳~64歳サイサイ 割合ワリアイ % 58.8 61.4 56.3
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) 65歳以上 割合ワリアイ % 29.9 26.7 33
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) うち75歳以上 割合ワリアイ % 17.1 14.1 20
2024000909 日本人人口ニホンジンジンコウ 2024年9月1日現在(確定値) うち85歳以上 割合ワリアイ % 5.6 3.7 7.4
参考文献
- DuckDBからExcelファイルを読み書きしてみた (閲覧日2025/03/09)
Discussion