D言語でのExcel(.xlsx)ファイルの作り方

# はじめに
この記事では、`Excel(.xlsx)`ファイルを`D`言語で作成する方法について、書きます。
`dub`パッケージを作成する際に、エラーが発生した場合の回避策についても、情報提供します。
※エラーは`Windows`環境で`Visual Studio`（`MSBuild`）を使用した場合に発生しました。

# XLSXファイルを作成するためのdubパッケージ
以下の`dub`パッケージが提供されています。
[dexcel](https://code.dlang.org/packages/dexcel)
[xlsxd](https://code.dlang.org/packages/xlsxd)
[xlsxio-d](https://code.dlang.org/packages/xlsxio-d)
[xlsxwriter](https://code.dlang.org/packages/xlsxwriter)

この記事では、`xlsxd`を使用します。

# 開発環境
`xlsxd`パッケージは、内部で[libxlsxwriter](https://github.com/jmcnamara/libxlsxwriter)を利用しています。
`libxlsxwriter`をビルドするために、`Visual Studio`が必要になります。

* [DMD](https://dlang.org/download.html) v2.105.3
* [Build Tools for Visual Studio 2022](https://visualstudio.microsoft.com/ja/downloads/)　→　[インストール手順](https://www.kkaneko.jp/tools/win/buildtool.html)

# xlsxd、libxlsxwriterのビルド
`xlsxd`パッケージを作成する際に、下記エラーが発生しました。
`libxlsxwriter`のビルド処理でエラーとなり、`xlsxwriter.lib`が生成されないのが原因です。

```text:コマンドプロンプト
D:\Dev> dub build --build=release --single writeexcel.d
    Fetching xlsxd 4.0.4 (getting selected version)
    Starting Performing "release" build using D:\App\Dev\dmd2\windows\bin64\dmd.exe for x86_64.
    Building xlsxd 4.0.4: building configuration [library]
   Pre-build Running commands
x64 libxlsxwriter does not exist
'cmake' is not recognized as an internal or external command,
operable program or batch file.
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\source\libxlsxd\worksheet.d(208,14): Deprecation: reference to local variable `this` assigned to non-scope parameter `wsf` calling `this`
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\source\libxlsxd\worksheet.d(212,17): Deprecation: reference to local variable `this` assigned to non-scope parameter `wsf` calling `this`
    Building writeexcel ~master: building configuration [application]
     Linking writeexcel
LINK : fatal error LNK1104: ファイル 'xlsxwriter.lib' を開くことができません。
Error: linker exited with status 1104
Error D:\App\Dev\dmd2\windows\bin64\dmd.exe failed with exit code 1.

```

まずは、`libxlsxwriter`のビルドを先に進めます。
`Developer Command Prompt for VS 2022`を立ち上げます。

ビルドを実行すると`C:\Users\ユーザ名\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter`に`build_x64`というディレクトリが作成されます。
再ビルド時に`build_x64`ディレクトリが存在するとエラーになるため、削除します。

```text:Developer Command Prompt for VS 2022（ビルド失敗例１）
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd> windepbuild.bat x64
x64 libxlsxwriter does not exist
サブディレクトリまたはファイル build_x64 は既に存在します。

```

<details>
<summary>
Developer Command Prompt for VS 2022（ビルド失敗例２）
</summary>

```text:Developer Command Prompt for VS 2022（ビルド失敗例２）
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd> windepbuild.bat x64
x64 libxlsxwriter does not exist
-- Building for: Visual Studio 17 2022
CMake Deprecation Warning at CMakeLists.txt:88 (cmake_minimum_required):
  Compatibility with CMake < 3.5 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.


-- Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.19045.
-- The C compiler identification is MSVC 19.38.33130.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Tools/MSVC/14.38.33130/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- The CXX compiler identification is MSVC 19.38.33130.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Tools/MSVC/14.38.33130/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done (16.0s)
-- Generating done (0.1s)
-- Build files have been written to: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/libxlsxwriter/build_x64
MSBuild のバージョン 17.8.3+195e7f5a3 (.NET Framework)

  1>Checking Build System
  Building Custom Rule C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/libxlsxwriter/CMakeLists.txt
  app.c
  chart.c
  chartsheet.c
  content_types.c
  core.c
  custom.c
  drawing.c
  format.c
  hash_table.c
  packager.c
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\worksheet.h(1,1): warning
C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\du
b\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/app.c' をコンパイルしています)

C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\workbook.h(815,1): warning
 C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\d
ub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/app.c' をコンパイルしています)

C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\worksheet.h(1,1): warning
C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\du
b\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/chartsheet.c' をコンパイルしています)

C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\worksheet.h(1,1): warning
C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\du
b\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/core.c' をコンパイルしています)

C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\workbook.h(815,1): warning
 C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\d
ub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/core.c' をコンパイルしています)

C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\worksheet.h(1,1): warning
C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\du
b\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/packager.c' をコンパイルしています)

C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\workbook.h(815,1): warning
 C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\d
ub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/packager.c' をコンパイルしています)

  relationships.c
  shared_strings.c
  styles.c
  theme.c
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\src\theme.c(1,1): warning C4819: ファイルは、 現在のコード
 ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.
0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  utility.c
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\src\theme.c(39,65): error C2059: 構文エラー: '>' [
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\src\theme.c(39,66): error C2001: 定数が 2 行目に続いて
います。 [C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\src\theme.c(40,56): error C2001: 定数が 2 行目に続いて
います。 [C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\src\theme.c(41,68): error C2001: 定数が 2 行目に続いて
います。 [C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\src\theme.c(73,66): error C2001: 定数が 2 行目に続いて
います。 [C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\src\theme.c(74,56): error C2001: 定数が 2 行目に続いて
います。 [C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\src\theme.c(75,68): error C2001: 定数が 2 行目に続いて
います。 [C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\worksheet.h(1,1): warning
C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\du
b\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/utility.c' をコンパイルしています)

C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\workbook.h(815,1): warning
 C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\d
ub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/utility.c' をコンパイルしています)

  workbook.c
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\worksheet.h(1,1): warning
C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\du
b\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/workbook.c' をコンパイルしています)

C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\workbook.h(815,1): warning
 C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\d
ub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/workbook.c' をコンパイルしています)

  worksheet.c
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\worksheet.h(1,1): warning
C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\du
b\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/worksheet.c' をコンパイルしています)

  xmlwriter.c
  ioapi.c
  zip.c
  コードを生成中...
  コンパイル中...
  iowin32.c
  tmpfileplus.c
  コードを生成中...

```
</details>

ビルド失敗例２では、`theme.c`でエラーが出ています。
ソースコードの中身を見ると、韓国文字と中国文字が混ざった`UTF-8`ファイルでこのあたりの文字コードを`MSBuild`が正しく処理できないようです。
```c:theme.c(抜粋)
    "<a:font script=\"Hang\" typeface=\"맑은 고딕\"/>",
    "<a:font script=\"Hans\" typeface=\"宋体\"/>",
    "<a:font script=\"Hant\" typeface=\"新細明體\"/>",
```

対処方法として、`theme.c`を`Visual Studio`の`C`コンパイラが対応しているファイル形式（`BOM`付きの`UTF-8`）に保存しなおします。

https://learn.microsoft.com/ja-jp/cpp/build/reference/unicode-support-in-the-compiler-and-linker?view=msvc-170

その後、再ビルドを実行するとうまくいきました。

<details>
<summary>
Developer Command Prompt for VS 2022（ビルド成功例）
</summary>

```text:Developer Command Prompt for VS 2022（ビルド成功例）
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd>windepbuild.bat x64
x64 libxlsxwriter does not exist
-- Building for: Visual Studio 17 2022
CMake Deprecation Warning at CMakeLists.txt:88 (cmake_minimum_required):
  Compatibility with CMake < 3.5 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.


-- Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.19045.
-- The C compiler identification is MSVC 19.38.33130.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Tools/MSVC/14.38.33130/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- The CXX compiler identification is MSVC 19.38.33130.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Tools/MSVC/14.38.33130/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done (11.4s)
-- Generating done (0.0s)
-- Build files have been written to: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/libxlsxwriter/build_x64
MSBuild のバージョン 17.8.3+195e7f5a3 (.NET Framework)

  1>Checking Build System
  Building Custom Rule C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/libxlsxwriter/CMakeLists.txt
  app.c
  chart.c
  chartsheet.c
  content_types.c
  core.c
  custom.c
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\worksheet.h(1,1): warning
C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\du
b\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/app.c' をコンパイルしています)

  drawing.c
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\workbook.h(815,1): warning
 C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\d
ub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/app.c' をコンパイルしています)

C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\worksheet.h(1,1): warning
C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\du
b\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/chartsheet.c' をコンパイルしています)

C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\worksheet.h(1,1): warning
C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\du
b\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/core.c' をコンパイルしています)

C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\workbook.h(815,1): warning
 C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\d
ub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/core.c' をコンパイルしています)

  format.c
  hash_table.c
  packager.c
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\worksheet.h(1,1): warning
C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\du
b\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/packager.c' をコンパイルしています)

C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\workbook.h(815,1): warning
 C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\d
ub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/packager.c' をコンパイルしています)

  relationships.c
  shared_strings.c
  styles.c
  theme.c
  utility.c
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\src\theme.c(39,5): warning C4566: ユニバーサル文字名 '
\uB9D1' によって表示されている文字は、現在のコード ページ (932) で表示できません [C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwr
iter\build_x64\xlsxwriter.vcxproj]
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\src\theme.c(39,5): warning C4566: ユニバーサル文字名 '
\uC740' によって表示されている文字は、現在のコード ページ (932) で表示できません [C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwr
iter\build_x64\xlsxwriter.vcxproj]
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\src\theme.c(39,5): warning C4566: ユニバーサル文字名 '
\uACE0' によって表示されている文字は、現在のコード ページ (932) で表示できません [C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwr
iter\build_x64\xlsxwriter.vcxproj]
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\src\theme.c(39,5): warning C4566: ユニバーサル文字名 '
\uB515' によって表示されている文字は、現在のコード ページ (932) で表示できません [C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwr
iter\build_x64\xlsxwriter.vcxproj]
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\src\theme.c(73,5): warning C4566: ユニバーサル文字名 '
\uB9D1' によって表示されている文字は、現在のコード ページ (932) で表示できません [C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwr
iter\build_x64\xlsxwriter.vcxproj]
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\src\theme.c(73,5): warning C4566: ユニバーサル文字名 '
\uC740' によって表示されている文字は、現在のコード ページ (932) で表示できません [C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwr
iter\build_x64\xlsxwriter.vcxproj]
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\src\theme.c(73,5): warning C4566: ユニバーサル文字名 '
\uACE0' によって表示されている文字は、現在のコード ページ (932) で表示できません [C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwr
iter\build_x64\xlsxwriter.vcxproj]
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\src\theme.c(73,5): warning C4566: ユニバーサル文字名 '
\uB515' によって表示されている文字は、現在のコード ページ (932) で表示できません [C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwr
iter\build_x64\xlsxwriter.vcxproj]
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\worksheet.h(1,1): warning
C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\du
b\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/utility.c' をコンパイルしています)

C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\workbook.h(815,1): warning
 C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\d
ub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/utility.c' をコンパイルしています)

  workbook.c
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\worksheet.h(1,1): warning
C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\du
b\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/workbook.c' をコンパイルしています)

C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\workbook.h(815,1): warning
 C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\d
ub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/workbook.c' をコンパイルしています)

  worksheet.c
C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\include\xlsxwriter\worksheet.h(1,1): warning
C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 [C:\Users\user1\AppData\Local\du
b\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\xlsxwriter.vcxproj]
  (ソース ファイル '../src/worksheet.c' をコンパイルしています)

  xmlwriter.c
  ioapi.c
  zip.c
  コードを生成中...
  コンパイル中...
  iowin32.c
  tmpfileplus.c
  コードを生成中...
  xlsxwriter.vcxproj -> C:\Users\user1\AppData\Local\dub\packages\xlsxd\4.0.4\xlsxd\libxlsxwriter\build_x64\Release\xls
  xwriter.lib
  Building Custom Rule C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/libxlsxwriter/CMakeLists.txt
  1>
  -- Install configuration: "Release"
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/lib/x64/Release/
  xlsxwriter.lib
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/lib/x64/Release/
  xlsxwriter.pdb
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/app.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/chart.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/chartsheet.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/common.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/content_types.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/core.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/custom.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/drawing.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/format.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/hash_table.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/packager.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/relationships.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/shared_strings.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/styles.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/theme.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/third_party
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/third_party/ioapi.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/third_party/queue.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/third_party/tmpfileplus.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/third_party/tree.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/third_party/zip.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/utility.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/workbook.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/worksheet.h
  -- Installing: C:/Users/user1/AppData/Local/dub/packages/xlsxd/4.0.4/xlsxd/install_dir/libxlsxwriter/include/xlsxwrit
  er/xmlwriter.h

```
</details>

# Ｄ言語でのソースコード実装例
`Excel`ファイルを作成するための実装例です。

```d:writeexcel.d
/+ dub.sdl:
    name "writeexcel"
    dependency "xlsxd" version="~>4.0.4"
+/
// dub build --build=release --single writeexcel.d
import std.stdio;
import libxlsxd;

void main(string[] args)
{
	writeExcel();
}

void writeExcel()
{
	auto workbook  = newWorkbook("test1.xlsx");
	auto worksheet = workbook.addWorksheet(null);
	
	/* Add a format. */
	auto format = workbook.addFormat();
	
	/* Set the bold property for the format */
	format.setBold();
	
	/* Change the column width for clarity. */
	worksheet.setColumn(0, 0, 20);
	
	/* Write some simple text. */
	worksheet.writeString(0, 0, "Hello");
	
	/* Text with formatting. */
	worksheet.writeString(1, 0, "World", format);
	
	/* Write some numbers. */
	worksheet.writeNumber(2, 0, 123);
	worksheet.writeNumber(3, 0, 123.456);
	
	// for the lazy
	worksheet.write(4, 0, 13.37);
	// for the lazy
	worksheet.write(4, 1, true);
	
	worksheet.write(4, 2, "Hello 1337");
	worksheet.setColumn(4, 2, 20.0);
}
```

# コンパイルと実行結果
いつも通り、コンパイルと実行結果を記します。

```text:コンパイル例
D:\Dev> dub build --build=release --single writeexcel.d
    Starting Performing "release" build using D:\App\Dev\dmd2\windows\bin64\dmd.exe for x86_64.
  Up-to-date xlsxd 4.0.4: target for configuration [library] is up to date.
    Building writeexcel ~master: building configuration [application]
     Linking writeexcel
    Finished To force a rebuild of up-to-date targets, run again with --force

```
```text:実行結果
D:\Dev> writeexcel
```

作成された`test1.xlsx`のイメージ
![excel2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/e35f4e78-b8aa-c7aa-1235-8fb4f5bfad7a.png)