🐈

DuckDBでExcelファイルを読み取る - C#

2025/03/09に公開

概要

C#でのExcel操作のライブラリといえばOpenXMLなのですが、使いにくさは否定できません。

その代替案といえば、以下です。

  • ClosedXML
  • EPPlus (※ライセンスがバージョンで異なるので注意)

上記については、既に解説がなされているのでそちらをご覧ください。

さて、DuckDBからExcelファイルを読み書きしてみたを見るに、ここに更なる選択肢が出たか、ということで読み込みを試してみました。

個人的にはduckdb-wasmを使いたいところなのですがどうにも.NETからduckdb-wasmを使う方法が分からなかったので、通常のDuckDBでやってみています。

前提

コード

この記事のコードは以下に配置しています。
https://github.com/Kuroki-g/kuroki-g-public-zenn-code/tree/main/articles/dotnet-duckdb-excel-read

.NETプロジェクトの作成とライブラリの選定

ざっとプロジェクトを作ります。

$ dotnet new console
$ dotnet new gitignore
$ dotnet new editorconfig

ライブラリは公式のドキュメントに記載のDuckDB.NETを用います。

dotnet add package DuckDB.NET.Data.Full

サンプルデータ

データセットはいい感じのがなかったため
年齢(5歳階級)、男女別人口(2024年9月確定値、2025年2月概算値)から取得。

出典:政府統計の総合窓口(e-Stat)(https://www.e-stat.go.jp/) 年齢(5歳階級)、男女別人口(2024年9月確定値、2025年2月概算値)の最上部を撮影
出典:政府統計の総合窓口(e-Stat)(https://www.e-stat.go.jp/) 年齢(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 

参考文献

GitHubで編集を提案

Discussion