SharePoint Excel Services のデータを使ったCrystal Reports を発行

加藤龍彦
加藤龍彦
デジタルマーケティング
Report Wizard と標準のADO.NET を使用して最新のSharePoint Excel Services のデータを使用したレポートを作成。

CData ADO.NET Provider for ExcelServices は、Crystal Reports for Visual Studio 開発環境に統合されています。標準のADO.NET コンポーネントを使用して、SQL Server と同じようにレポートを作成でき、さらにSharePoint Excel Services とリアルタイムで連携できます。この記事では、開いたときに更新されるレポートにSharePoint Excel Services のデータを追加するために必要な3つのステップを完了する方法を説明します。

Note:このチュートリアルを実行するには、Crystal Reports とVisual Studio のデベロッパーバージョンをインストールしてください。

Crystal Reports アプリケーションを作成する

この記事を実行するにはVisual Studio Crystal Reports プロジェクトが必要になります。この記事では、WPF アプリケーションにレポートを追加します。「File」->「New Project」とクリックし、Crystal Reports WPF Application テンプレートを選択することで、作成できます。表示されるウィザードで空のレポートを作成するオプションを選択します。

SharePoint Excel Services に接続する

Server Explorer からSharePoint Excel Services のADO.NET データソースを作成すると、Crystal Reports ウィザードおよびCrystal Reports Designer で使用できるDataSet を簡単に作成できます。Server Explorer でSharePoint Excel Services のデータを操作するためのガイドは、ヘルプドキュメントの「はじめに」の章を参照してください。

ワークブックへの接続

どちらのSharePoint エディションをお使いでも、File を Excel ワークブックに設定してください。このパスは以下のプロパティからの相対パスになります。

  • Library:デフォルトではShared Documents ライブラリが使用されます。このプロパティを使って、組織内の別のドキュメントライブラリを指定してみてください。例えば、OneDrive for Business に接続する場合は、このプロパティを"Documents" に設定します。
  • Folder:このプロパティを使って、ライブラリ内のサブフォルダへのパスを指定できます。パスはLibrary で指定されたライブラリ名に関連します。

テーブルとしてのスプレッドシートデータへの接続

CData 製品では、基底API で利用可能なオブジェクトに基づいて、使用可能なテーブルを検出していきます。

API では異なるAPI オブジェクトを表示します。スプレッドシートの構成とSharePoint のバージョンに基づいてAPI を選択しましょう。

  • OData: OData API を使用すると、Excel で[挿入]->[テーブル]をクリックして作成されたExcel テーブルオブジェクト(範囲やスプレッドシートではありません)から定義されたテーブルにアクセスできます。OData API に接続する際、ワークブックにテーブルオブジェクトが定義されていない場合は、CData 製品がテーブルを返さないことがあります。テーブルとしてスプレッドシートまたは範囲に接続するには、UseRESTAPI をtrue に設定してください。
  • REST: REST API を使用すると、Excel テーブルオブジェクト、範囲、およびスプレッドシートから定義されたテーブルへアクセスできます。これがデフォルトの API です。範囲およびスプレッドシートから多数の行をリクエストすることは REST API によって制限されており、CData 製品では返される行数をデフォルトで 100 に制限しています。また CData 製品では、デフォルトで1行目からカラム名を検出します。これを無効にするには、Header を設定してください。

DefineTables を追加設定すると、Excel の範囲の構文を使用して、範囲に基づいてテーブルを定義できます。大きすぎる範囲は、API によって制限されます。

SharePoint オンプレミスへの接続

URL をサーバー名もしくはIP アドレスに設定しましょう。さらに、SharePointVersion と認証値を設定します。

SharePoint OnPremises を認証するには、AuthScheme を認証タイプに設定し、必要に応じてUserPassword を設定してください。

Note:SharePoint On-Premises 2010 に接続する場合は、 UseRESTAPI をtrue に設定する必要があります。

    Windows(NTLM)

    最も一般的な認証タイプです。CData 製品では NTLM をデフォルトとして使用するよう事前設定されています。Windows のUserPassword を設定して接続してください。

    その他の認証方法については、ヘルプドキュメントの「はじめに」をご覧ください。

    接続を構成する際に、Max Rows 接続プロパティも設定できます。これにより返される行数が制限されるため、レポートやビジュアライゼーションをデザインするときのパフォーマンスを向上させることができます。

    DataSet を作成する

    以下のステップに従ってVisual Studio ADO.NET DataSet Designer を使用し、ADO.NET DataSet オブジェクトを作成します。Crystal Reports はSharePoint Excel Services テーブルのメタデータを含むDataSet オブジェクトにバインドします。またこのアプローチでは、App.config に接続文字列が追加されることに注意してください。後にこの接続文字列を使用してデータをレポートにロードします。

    1. Solution Explorer でプロジェクトを右クリックし、「Add」->「New Item」をクリックします。
    2. DataSet を選択します。DataSet Designer が表示されます。
    3. Server Explorer からDataSet Designer にテーブルをドラッグ & ドロップします。この記事ではAccount テーブルを使用します。

    SharePoint Excel Services フィールドをレポートに追加する

    以下のステップに従って、DataSet からレポートにカラムを追加します。

    1. Solution Explorer で.rpt ファイルをダブルクリックし、Crystal Reports Designer を開きます。
    2. デザイナーを右クリックし、「Database」->「Database Expert」と進みます。
    3. Project Folder とADO.NET DataSets ノードを展開し、作成したDataSet を「Selected Tables」ボックスにドラッグします。これで、Field Explorer からフィールドにアクセスできます。
    4. Field Explorer からレポートの「Details」セクションまたは別のセクションにフィールドをドラッグ & ドロップします。
    DataSet columns in a report.(Salesforce is shown.)

    レポートにデータをロードする

    メタデータのみを含むDataSet を作成したら、実際のデータを含むDataTable を作成する必要があります。ExcelServicesDataAdapter を使用して、SQL クエリの結果をDataTable に入力できます。

    1. System.Configuration.dll への参照をプロジェクトに追加して、App.config から接続文字列を使用できるようにします。
    2. App.config で.NET 4.0 を使用する場合にCrystal Reports との互換性を保つため、次のコードを設定ノードに追加します。
      
        <startup useLegacyV2RuntimeActivationPolicy="true">
          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
        </startup>
      
    3. Window.xaml.cs ファイルに以下の参照を追加します。

      using System.Configuration;
      using CrystalDecisions.CrystalReports.Engine;
      using CrystalDecisions.Shared;
      using System.Data.CData.ExcelServices;
      using System.Data;
      
    4. 以下のWindow_Loaded メソッドをWindow.xaml.cs に追加し、DataTable を返すSQL クエリを実行します。最低でも、レポートで使用されているカラムと同じカラムは選択する必要があることに注意してください。

      private void Window_Loaded(object sender, RoutedEventArgs e) {
        ReportDocument report = new ReportDocument();
        report.Load("../../CrystalReport1.rpt");
       var connectionString = ConfigurationManager.ConnectionStrings["MyAppConfigConnectionStringName"].ConnectionString;
        using (ExcelServicesConnection connection = new ExcelServicesConnection(connectionString)) {
          ExcelServicesDataAdapter dataAdapter = new ExcelServicesDataAdapter(
          "SELECT Name, AnnualRevenue FROM Account", connection);
           DataSet set = new DataSet("_set");
           DataTable table = set.Tables.Add("_table");
           dataAdapter.Fill(table);
           report.SetDataSource(table);
        }
        reportViewer.ViewerCore.ReportSource = report;
      }
      
    5. Window.xaml ファイルでLoaded イベントを追加し、Window タグを以下のようにします。

      
      <Window x:Class="CrystalReportWpfApplication4.Window1"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              xmlns:cr="clr-namespace:SAPBusinessObjects.WPF.Viewer;assembly=SAPBusinessObjects.WPF.Viewer"
              alt="WPF Crystal Report Viewer" Height="600" Width="800" Loaded="Window_Loaded">
              ...
      </Window>
      
    6. レポートを実行します。レポートが読み込まれると、プロバイダはクエリを実行して現在のデータを取得します。 A report that loads the current data when opened.(Salesforce is shown.)

    SharePoint Excel Services のデータのチャートを作成する

    Chart Expert などのエキスパートとともにDataSet を使用することもできます。

    1. Crystal Reports Designer を右クリックして「Insert」->「Chart」とクリックします。
    2. 「Report Header」または「Report Footer」セクションを選択します。Chart Expert が表示されます。
    3. 「Type」タブでチャートタイプを選択します。この記事では、サイドバイサイドの棒グラフを使用します。
    4. 「Data」タブでx 軸のカラムと条件を選択します。例えば、DataSet ノードのName カラムを「On Change Of」メニューの下のボックスにドラッグします。
    5. x 軸のカラムを選択し、「TopN」ボタンと「Order」ボタンをクリックして並べ替えと制限を構成します。
    6. y 軸のカラムとサマリー操作を選択します。例えば、DataSet ノードのAnnualRevenue カラムを「Show Values」ボックスにドラッグします。
    7. レポートを実行します。

    Crystal Reports は、SharePoint Excel Services API などに対してGROUP BY を実行する代わりに、DataTable にロード済みのデータに対して集計を実行することに注意してください。これは、レポート作成ウィザードにも当てはまります。

    別のDataSet を作成し、他のクエリを入力することで、SharePoint Excel Services に対して実行されるクエリをより細かく制御できます。ドライバのSQL エンジンの詳細については、ヘルプドキュメントを参照してください。

    DataSet columns to be added to a chart.(Salesforce is shown.)

はじめる準備はできましたか?

SharePoint Excel Services Data Provider の無料トライアルをダウンロードしてお試しください:

 ダウンロード

詳細:

SharePoint Excel Services Icon SharePoint Excel Services ADO.NET Provider お問い合わせ

SharePoint サーバーでホストされているリアルタイムなExcel スプレッドシートコンテンツを組み込んだパワフルな.NET アプリケーションを短時間・低コストで作成して配布できます。