C＃/ VB.NET　Excelの数式を読む方法

数式を含むExcelファイルを解析する場合は、数式が含まれているセルと数式が何であるかを判断して定める必要があります。この記事では、Spire.XLS for .NETライブラリーを使用して、数式を含むセルを取得し、C＃およびVB.NETで数式を返す方法を学習することができます。

## Spire.XLS for.NETをインストールします

まず、Spire.XLS for.NETパッケージに含まれているDLLファイルを.NETプロジェクトの参照として追加する必要があります。DLLファイルは、**[このリンク](https://jp.e-iceblue.com/download/spire-excel-for-net.html)** からダウンロードするか、**[NuGet](https://www.nuget.org/packages/Spire.XLS/)** を介してインストールできます。

PM> Install-Package Spire.XLS

**数式を含むセルを取得し、数式を返す**
**数式を含むセルを取得して数式を返す手順は次のとおりです。**

	**Workbook**インスタンスを作成します。
	**Workbook.LoadFromFile()** メソッドを使用してExcelファイルをロードします。
	**Workbook.Worksheets [sheetIndex]** プロパティを使用して、インデックスで目的のワークシートを取得します。
	**StringBuilder**インスタンスを作成します。
	**Worksheet.AllocatedRange**プロパティを使用して、ワークシートの使用範囲にアクセスします。
	使用範囲内のセルをループします。
	ループ内で、**CellRange.HasFormula**プロパティを使用してセルに数式が含まれているかどうかを検出します。結果がtrueの場合は、**CellRange.RangeAddressLocal**プロパティと**CellRange.Formula**プロパティを使用してセルの名前と数式を取得します。次に、**StringBuilder.AppendLine()** メソッドを使用してそれらを**StringBuilder**に追加します。
	**File.WriteAllText()** メソッドを使用して、**StringBuilder**のコンテンツを.txtファイルに書き込みます。

C#
```
using Spire.Xls;
using System.IO;
using System.Text;

namespace ReadFormulas
{
    class Program
    {
        static void Main(string[] args)
        {
            //Workbook インスタンスを作成する
            Workbook workbook = new Workbook();
            //Excel ドキュメントをロード
            workbook.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Formulas.xlsx");

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

            //StringBuilderインスタンスを作成する
            StringBuilder sb = new StringBuilder();

            //ワークシートの使用範囲にアクセスする
            CellRange usedRange = sheet.AllocatedRange;
            //使用範囲内のセルをループする
            foreach (CellRange cell in usedRange)
            {
                //現在のセルに数式があるかどうかを検出する
                if (cell.HasFormula)
                {
                    //セル名を取得する
                    string cellName = cell.RangeAddressLocal;
                    //数式を取得する
                    string formula = cell.Formula;
                    //セル名と数式をStringBuilderに追加する
                    sb.AppendLine(cellName + " has a formula: " + formula);
                }
            }
            // StringBuilderのコンテンツを.txtファイルに書き込む
            File.WriteAllText("formulas.txt", sb.ToString());
        }
    }
}
```
VB.NET
```
Imports Spire.Xls
Imports System.IO
Imports System.Text
 
Namespace ReadFormulas
    Class Program
        static void Main(string() args)
        {
            'Workbook インスタンスを作成する
            Dim workbook As Workbook =  New Workbook() 
            'Excel ドキュメントをロード
            workbook.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Formulas.xlsx")
 
            '最初のワークシートを取得する
            Dim sheet As Worksheet =  workbook.Worksheets(0) 
 
            'StringBuilderインスタンスを作成する
            Dim sb As StringBuilder =  New StringBuilder() 
 
            'ワークシートの使用範囲にアクセスする
            Dim usedRange As CellRange =  sheet.AllocatedRange 
            '使用範囲内のセルをループする
            Dim cell As CellRange
            For Each cell In usedRange
                '現在のセルに数式があるかどうかを検出する
                if (cell.HasFormula)
                {
                    'セル名を取得する
                    Dim cellName As String =  cell.RangeAddressLocal 
                    '数式を取得する
                    Dim formula As String =  cell.Formula 
                    'セル名と数式をStringBuilderに追加する
                    sb.AppendLine(cellName + " has a formula: " + formula)
                }
            Next
            ' StringBuilderのコンテンツを.txtファイルに書き込む
            File.WriteAllText("formulas.txt", sb.ToString())
        }
    End Class
End Namespace
```
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/26defd59-40d1-f45c-4c10-b85095eedc89.png)

## 一時ライセンスを申請する

結果ドキュメントから評価メッセージを削除する場合、または機能制限を取り除く場合は、30日間有効な一時ライセンスについて[営業担当者](mailto:sales@e-iceblue.com)にお問い合わせください。