C#とVB.NETでExcelとCSV間の変換

## はじめに
Excelは、Microsoft Excelで使用される標準的なファイル形式の1つであり、複数のワークシート、グラフ、数式、データを含む電子スプレッドシートを保存することができます。一方、CSVはデータの交換や保存に広く使用されるシンプルなテキストファイル形式です。複雑なフォーマットの規定がなく、通常は純粋なテキストデータのみを含んでいます。時には、これら2つの形式の間での変換によって、異なるプラットフォームやアプリケーション間でデータを柔軟に処理することが可能になります。

## ツール
* Visual Studio 2022
* [Free Spire.XLS for .NET](https://www.e-iceblue.com/Introduce/free-xls-component.html)

このライブラリは、無料でExcelファイルを作成、編集、変換することができますが、ページ数の制限があります。
または、有料版の製品の[無料トライアル](https://www.e-iceblue.com/TemLicense.html)を申し込むこともできます。
有料版: [Spire.XLS for .NET](https://www.e-iceblue.com/Introduce/excel-for-net-introduce.html)

## インストール方法
1. Visual Studioを開いて新しいプロジェクトを作成します。
2. 「Solution Explorer」で「References」を右クリックし、「Nuget Manage Packages」を選択します。
3. **Free Spire.XLS for .NET** を検索してインストールします。

![2024-01-31_154432.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/2baf0bb5-c1ab-467f-b478-4ef1657f0614.png)

## ExcelからCSVへの変換
### 主な方法
1. Workbook.LoadFromFile()----Excel ファイルをロードします。
2. Workbook.Worksheets [index]----インデックスで特定のワークシートを取得します。
3. XlsWorksheet.SaveToFile() ----特定のワークシートをCSVとして保存します。

以下の方法をお選びいただけます。
SaveToFile(string fileName, string separator)
SaveToFile(string fileName, string separator, Encoding encoding)
SaveToFile(string fileName, string separator, bool retainHiddenData)
### コード
C#
```C#
using Spire.Xls;
using System.Text;

namespace ConvertAWorksheetToCsv
{
    class Program
    {
        static void Main(string[] args)
        {
            //Workbookクラスのインスタンスを作成する
            Workbook workbook = new Workbook();
            //Excelファイルをロードする
            workbook.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Sample.xlsx");
            //最初のワークシートを取得する
            Worksheet sheet = workbook.Worksheets[0];
            //ワークシートをCSVとして保存する
            sheet.SaveToFile("ExcelToCSV.csv", ",", Encoding.UTF8);
        }
    }
}
```
VB.NET
```vb
Imports Spire.Xls
Imports System.Text
 
Namespace ConvertAWorksheetToCsv
    Class Program
        Shared  Sub Main(ByVal args() As String)
            'Workbookクラスのインスタンスを作成する
            Dim workbook As Workbook =  New Workbook() 
            'Excelファイルをロードする
            workbook.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Sample.xlsx")
            '最初のワークシートを取得する
            Dim sheet As Worksheet =  workbook.Worksheets(0) 
            'ワークシートをCSVとして保存する
            sheet.SaveToFile("ExcelToCSV.csv", ",", Encoding.UTF8)
        End Sub
    End Class
End Namespace
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/1d6ff342-ebc7-1f16-c978-6e8c64d0af7d.png)

## CSVからExcelへの変換
### 主な方法
1. Workbook.LoadFromFile()----CSV ファイルをロードします。
2. Workbook.Worksheets [index] ----インデックスで特定のワークシートを取得します。
3. Worksheet.AllocatedRange ----ワークシートの使用範囲にアクセスします。
4. CellRange.IgnoreErrorOptions プロパティを IgnoreErrorType.NumberAsText として設定することで、範囲内の数値をテキストとして保存するときにエラーを無視します。
5. CellRange.AutoFitColumns()/CellRange.AutoFitRows() ----行の高さと列の幅を自動調整します。
6. Workbook.SaveToFile(string fileName, ExcelVersion version)---- CSV を Excel に保存します。
### コード
C#
```c#
using Spire.Xls;

namespace ConvertCsvToExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            //Workbookクラスのインスタンスを作成する
            Workbook workbook = new Workbook();

            //CSVファイルをロードする
            workbook.LoadFromFile(@"C:\Users\Administrator\Desktop\ExcelToCSV.csv", ",", 1, 1);

            //最初のワークシートを取得する
            Worksheet sheet = workbook.Worksheets[0];

            //ワークシートの使用範囲にアクセスする
            CellRange usedRange = sheet.AllocatedRange;
            //数値をテキストとして保存するときにエラーを無視する
            usedRange.IgnoreErrorOptions = IgnoreErrorType.NumberAsText;
            //行の高さと列の幅を自動調整する
            usedRange.AutoFitColumns();
            usedRange.AutoFitRows();

            //結果ファイルを保存する
            workbook.SaveToFile("CSVToExcel.xlsx", ExcelVersion.Version2013);
        }
    }
}
```
VB.NET
```vb
Imports Spire.Xls
 
Namespace ConvertCsvToExcel
    Class Program
        Shared  Sub Main(ByVal args() As String)
            'Workbookクラスのインスタンスを作成する
            Dim workbook As Workbook =  New Workbook() 
 
            ' CSVファイルをロードする
            workbook.LoadFromFile("C:\Users\Administrator\Desktop\ExcelToCSV.csv", ",", 1, 1)
 
            '最初のワークシートを取得する
            Dim sheet As Worksheet =  workbook.Worksheets(0) 
 
            'ワークシートの使用範囲にアクセスする
            Dim usedRange As CellRange =  sheet.AllocatedRange 
            '数値をテキストとして保存するときにエラーを無視する
            usedRange.IgnoreErrorOptions = IgnoreErrorType.NumberAsText
            '行の高さと列の幅を自動調整する
            usedRange.AutoFitColumns()
            usedRange.AutoFitRows()
 
            '結果ファイルを保存する
            workbook.SaveToFile("CSVToExcel.xlsx", ExcelVersion.Version2013)
        End Sub
    End Class
End Namespace
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2811193/bbb8e300-cc6e-b8c9-a4a6-cd17c70b1c89.png)