web-dev-qa-db-ja.com

asp.netを使用してExcelドキュメントを作成およびダウンロードする方法

Asp.netを使用してExcelドキュメントを作成およびダウンロードする方法は?

目的は、xml、linqなどを使用して、ブラウザーを介してExcelドキュメントを顧客に送信することです。

編集:ユースケース

顧客がブラウザにグリッドビュー(ajaxフレームワークで作成)をロードすると、グリッドビューはSQLデータベースに直接リンクされます。 「Excelにエクスポート」ボタンを配置して、顧客がこのグリッドビューデータを自分のコンピューターに保存できるようにし、Excelのクリーンダウンロードを開始したいと思います。

ここで提案されているソリューションは、htmlドキュメントを送信し、ヘッダーをExcelドキュメントに変更するなど、クリーンではありません。現在、codeplexで簡単なソリューションを探しています。お知らせします。

11
belaz

スターターキット

まず、 Open XML Format SDK 2. をダウンロードしました。

それは3つの便利なツールが付属しています:

C:\ Program Files\Open XML Format SDK\V2.0\tools

  • DocumentReflector.exe c#を自動生成して、コードからスプレッドシートを作成します。
  • OpenXmlClassesExplorer.exe Ecma仕様とクラスドキュメントを表示します(MSDNスタイルの形式を使用)。
  • OpenXmlDiff.exe2つのOpenXMLファイルをグラフィカルに比較し、エラーを検索します。

rename。xlsxtoを始めた人は誰でもお勧めします。Zipなので、スプレッドシートを駆動するXMLファイルを確認できます(たとえば、シートは「xl\works」にあります)。


コード

免責事項:すべてのコードを MSDN技術記事 ; Dから盗みました

次のコードは、手動で作成した* .xlsxテンプレートを使用して変更できるようにしています。

名前空間の参照

using System.IO;
using System.Xml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using DocumentFormat.OpenXml;


// Database object
        DataClassesDataContext db = new DataClassesDataContext();

        // Make a copy of the template file.
        File.Copy(@"C:\inetpub\wwwroot\project.Web\Clients\Handlers\oxml-tpl\livreurs.xlsx", @"C:\inetpub\wwwroot\project.Web\Clients\Handlers\oxml-tpl\generated.xlsx", true);

        // Open the copied template workbook. 
        using (SpreadsheetDocument myWorkbook = SpreadsheetDocument.Open(@"C:\inetpub\wwwroot\project.Web\Clients\Handlers\oxml-tpl\generated.xlsx", true))
        {
            // Access the main Workbook part, which contains all references.
            WorkbookPart workbookPart = myWorkbook.WorkbookPart;

            // Get the first worksheet. 
            WorksheetPart worksheetPart = workbookPart.WorksheetParts.ElementAt(2);

            // The SheetData object will contain all the data.
            SheetData sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();

            // Begining Row pointer                       
            int index = 2;

            // Database results
            var query = from t in db.Clients select t;

            // For each item in the database, add a Row to SheetData.
            foreach (var item in query)
            {
                // Cell related variable
                string Nom = item.Nom;

                // New Row
                Row row = new Row();
                row.RowIndex = (UInt32)index;

                // New Cell
                Cell cell = new Cell();
                cell.DataType = CellValues.InlineString;
                // Column A1, 2, 3 ... and so on
                cell.CellReference = "A"+index;

                // Create Text object
                Text t = new Text();
                t.Text = Nom;

                // Append Text to InlineString object
                InlineString inlineString = new InlineString();
                inlineString.AppendChild(t);

                // Append InlineString to Cell
                cell.AppendChild(inlineString);

                // Append Cell to Row
                row.AppendChild(cell);

                // Append Row to SheetData
                sheetData.AppendChild(row);

                // increase row pointer
                index++;                

            }

            // save
            worksheetPart.Worksheet.Save();

        }

私はまだ終わっていません。私の2番目の仕事は、変更後にスプレッドシートを自動ダウンロードすることです。


最後に、生成したspredsheetにユーザーをリダイレクトします(aspxから)

 context.Response.Redirect("Oxml-tpl/generated.xlsx");
15
belaz

response.ContentType = "application/vnd.ms-Excel"を設定するだけで、ページはクライアントブラウザでExcelシートとしてレンダリングされます。

サンプルコードはこちら

2
Binoj Antony
0
salgo60

Excelの機能の広さにもよりますが、これを処理する方法はたくさんあります。 Binojの答えは、Excelが単なるスプレッドシートであり、直接のExcel機能が組み込まれていない場合に機能します。クライアントは機能や連結などを追加できます。これらは、クライアントが何かを行うまでは「ばかげた」Excelドキュメントです。

よりフル機能のExcelドキュメントを作成するには、私が手に負えないと考えることができる2つの基本的な選択肢があります。

  1. Officeコンポーネント(re:bad)を使用してExcelドキュメントを作成するか、SoftArtisanのExcelWriterなどのサードパーティコンポーネントを使用します。素晴らしいコンポーネントですが、コストがかかります。

  2. Excelへのエクスポートを許可するページのコントロールを使用します。 ASSP.NETコントロールのほとんどのベンダーは、グリッド上にこの機能を備えています。

オプション#1を使用すると、Excelのほぼすべての機能を使用できます。オプション#2は、少なくとも私が試したコントロールでは、もう少し制限されています。

0