ASP.NET Web API コントロール
クライアントからポストされた複数のExcelファイルを結合
サービス > Excelサービス > Excelサービスの結合 > クライアントからポストされた複数のExcelファイルを結合

このセクションでは、クライアントアプリケーションを通してWeb APIサービスを呼び出し、クライアントからポストされた複数のExcelファイルをワークブックに結合する方法を具体的に示します。

手順1:サービスを呼び出す

手順2:クライアントプロジェクトを実行する

次の例では、Web APIサービスをHTMLおよびWinFormsクライアントアプリケーションから呼び出します。これらのクライアントはサービスにPOST要求を送り、サービスは応答ストリームを返します。これにより、この応答ストリームは目的のExcelファイル形式で保存されます。

以下の例では、(ワークブックに結合される)Excelファイルがクライアントアプリケーションを通して提供されます。さらに、エンドユーザーは、クライアントプロジェクトを通して、(複数のExcelシートの結合時に生成された)ワークブックのサービスURL、名前、および目的のファイル形式を指定する必要があります。これは、結合するExcelのパラメータまたはクエリー文字列は、要求URL内ではなくPOST要求のHTTPメッセージ本文に含まれて送信されるためです。

メモ: サービスは、クライアントからポストされたxlsファイル、xlsxファイル、およびcsvファイルを結合できます。

手順1:サービスを呼び出す

Web APIサービスを呼び出すには、次の手順を実行します。

  1. REST APIサービスに対するクライアントの設定」の説明に従ってWinFormsアプリケーションを作成します。4つのC1Labelコントロール、3つのC1TextBoxコントロール、2つのC1Buttonコントロール、および1つのOpneFileDialogコンポーネントを追加します。フォームが以下のように表示されるように、テキストプロパティを設定します。
                          
  2. [結合するファイルを選択]ボタンのボタンクリックイベントに以下のコードを追加します。
    C#
    コードのコピー
    private void button1_Click(object sender, EventArgs e)
            {
                    OpenFileDialog x = new OpenFileDialog();
                    x.Multiselect = true;
                    x.ShowDialog();
                    result = x.FileNames;
                    label1.Text = "Files Selected";
            }
    

  3. [Excelファイルの結合]ボタンのボタンクリックイベントに以下のコードを追加します。
    C#
    コードのコピー
    private void button2_Click(object sender, EventArgs e)
            {
            if (result.Length <= 0)
            {
                    MessageBox.Show("Please select excel files to merge.");
                    return;
            }
            using (var client = new HttpClient())
            using (var formData = new MultipartFormDataContent())
            using (var fileStream = File.OpenRead(result[0]))
                    {
                    using (var fileStream1 = File.OpenRead(result[1]))
                            {
                            var fileName = string.IsNullOrEmpty(txtFileName.Text) ? "test" : txtFileName.Text;
                            var fileFormat = string.IsNullOrEmpty(txtFileFormat.Text) ? "xlsx" : txtFileFormat.Text;
                            formData.Add(new StringContent(fileName), "FileName");
                            formData.Add(new StringContent(fileFormat), "Type");
                            formData.Add(new StreamContent(fileStream), "filesToMerge", result[0]);
                            formData.Add(new StreamContent(fileStream1), "filesToMerge", result[1]);
                            var response = client.PostAsync(txtUrl.Text, formData).Result;
                            if(!response.IsSuccessStatusCode)
                                    {
                                    MessageBox.Show("Get invalid response.");
                                    return;
                                    }
                            var tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
                            if (!Directory.Exists(tempPath))
                                    {
                                    Directory.CreateDirectory(tempPath);
                                    }
                            var tempFilePath = Path.Combine(tempPath, string.Format("{0}.{1}", fileName, fileFormat));
                            using (var newFile = File.Create(tempFilePath))
                                    {
                                    response.Content.ReadAsStreamAsync().Result.CopyTo(newFile);
                                    }
                            Process.Start(tempFilePath);
                            }
                    }
            }
    

    POST要求に関して、System.Net.Http.MultipartFormDataContentクラスのインスタンスであるformDataが使用されることに注意してください。コードを通して、HTTPコンテンツをformDataに追加し、指定されたURIに非同期POST要求を送る際にそれを渡します。

  1. REST APIサービスに対するクライアントの設定」の説明に従ってHTMLアプリケーションを作成します。
  2. HTMLページの<body>タグ内の<form>タグに、以下のマークアップを追加します。
    HTML
    コードのコピー
    <form action="http://demos.componentone.com/ASPNET/C1WebAPIService/api/excel/merge" method="POST" enctype="multipart/form-data">
            <label for="FilesToMerge">Excel Files to Merge:</label>
        <input type="file" id="FilesToMerge" name="FilesToMerge" multiple/>
        <br /><br />
        <label for="FileName">Merged Workbook Name:</label>
        <input type="text" id="fileName" name="FileName" value="Excel"/>
        <br /><br />
        <label for="Type">Generated File Format:</label>
        <input type="text" id="Type" name="Type" value="xlsx" />
        <br /><br />
        <input type="submit" value="Merge Excel"/>
    </form>
    

    POST要求に関して、<form>タグのmethod属性にPOST、そのenctype属性に"multipart/form-data"、およびそのaction属性にサービス要求URLを設定したことに注意してください。また、HTMLページに入力コントロールを作成します。このコントロールは、クライアントから提供され、目的のワークブック形式に複数のExcelファイルを結合するための各種のパラメータを取ります。

先頭に戻る

手順2:クライアントプロジェクトを実行する

WinFormsアプリケーション

HTMLアプリケーション

以下に示す、複数のExcelファイルを結合するREST APIサービスのデモサンプルをご覧ください。

先頭に戻る