SpeadsheetGear for .NET Standard を触ってみた

こんにちは。エクセルソフトの田淵です。

.NET から Excel がインストールされていなくても xlsx ファイルを弄れる SpreadsheetGear という製品があるのですが、それが今回のバージョンアップで、.NET Standard 1.3 対応のライブラリもリリースしました。

つまり、Xamarin.iOS/Xamarin.Android や Xamarin.Forms で UWP も対応しているということです。なので触ってみました。

評価版はこちらのフォームに必要事項をご記入の上申し込んでください。

案内されるページに評価用文字列の入手方法が記載されています。

インストール

このように NuGet から「SpreadsheetGear」を検索して追加して、App.xaml.csに評価用文字列を記述するだけなのですが、Xamarin.Forms で .NET Standard のライブラリを使用する場合は、手動でプロジェクトファイル(csproj)を書き換える必要があります。.NET Standard についてや対応方法は

NET Standard と Xamarin
GitHub のサンプル

をご覧ください。(後日、私の Xamarin のブログにもエントリーをアップする予定です。)

使ってみよう

SSG のサンプル では、Excel の計算式を使って結果を取得する方法が書かれていました。これをちょろっとだけ弄ったサンプルを作ってみました。

private void AverageClicked(object sender, EventArgs e)
{
    var numbers = new double[]
    {
        double.TryParse(num1.Text, out var d1) ? d1 : 0,
        double.TryParse(num2.Text, out var d2) ? d2 : 0,
        double.TryParse(num3.Text, out var d3) ? d3 : 0
    };
    averageLabel.Text = CalculateAverage(numbers).ToString();
}

private double CalculateAverage(double[] numbers)
{
    // Create a new empty workbook in a new workbook set.
    SpreadsheetGear.IWorkbook workbook = SpreadsheetGear.Factory.GetWorkbook();

    // Get a reference to the first worksheet.
    SpreadsheetGear.IWorksheet worksheet = workbook.Worksheets["Sheet1"];

    // Get a reference to the top left cell of Sheet1.
    SpreadsheetGear.IRange a1 = worksheet.Cells["A1"];
    SpreadsheetGear.IRange a2 = worksheet.Cells["A2"];
    SpreadsheetGear.IRange a3 = worksheet.Cells["A3"];
    SpreadsheetGear.IRange a4 = worksheet.Cells["A4"];

    a2.Value = numbers[0];
    a3.Value = numbers[1];
    a4.Value = numbers[2];
    // Set a formula.
    a1.Formula = "=AVERAGE(A2:A4)";

    return (double)a1.Value;
}

XAML は Entry を3つ並べただけです。

<StackLayout Padding="8">
    <Entry x:Name="num1" Text="1" />
    <Entry x:Name="num1" Text="1" />
    <Entry x:Name="num1" Text="1" />
    <Button Clicked="AverageClicked" Text="Average" />
    <Label x:Name="averageLabel" Text="Average: " />
</StackLayout>

こんな感じです。

ちゃんと計算できていますね!

iOS ではファイルをローカルに保存できないので、あまり Excel ファイルを作成して保存する。という用途では使わないかもしれませんが、.NET Standard で使える Excel 用のライブラリは貴重だなと思います。

通常の .NET Framework 版もあり、WPF などで色々凝った Excel を生成、保存する。なども可能ですので興味があれば見てみてください。

SpreadsheetGear サイト

以上です。