0

クラスがあります

public class Data
    {
        public string name{ get; set; }
        public int age { get; set; } 
    }

そして、データの配列を受け入れるメソッドがあり、今後のデータから csv と pdf を生成する必要があります。

 public void ExportToCSV(Data[] data)
    {
        // write code to generate csv
    }


 public void ExportToPdf(Data[] data)
    {
        // write code to generate pdf
    }

提案してください。

私はこのように Excel を生成しましたが、csv と pdf を生成する同様のコードがあることに疑問を抱いています。どのような変更が必要になりますか?

   public void ExportToExcel(Data[] data)
        {

           var grid = new GridView();
            grid.DataSource = data;
            grid.DataBind();

            Response.ClearContent();

            Response.AddHeader("Content-type", "application/vnd.ms-excel");

            Response.AddHeader("content-disposition", "attachment;filename=export.xls");

            Response.ContentType = "application/excel";

            var swr = new StringWriter();

            var tw = new HtmlTextWriter(swr);

            grid.RenderControl(tw);

            Response.Write(swr.ToString());

            Response.Flush();

            Response.End();
            tw.Close();

            swr.Close();
        }
4

2 に答える 2

1

LINQ を使用します。

string csv = data.ToLidt()
             .Select(i => string.Format("{0}, {1}", i.name, i.age.ToString())
             .Aggregate((a, b) => string.Format("{0}\r\n{1}"));

アップデート:

技術的には、Excel 生成コードは Excel を作成していません。あなたはGridViewレンダリング コントロール クラスを使用しているだけですが、Excel を作成することはまったくできません。

しかし、PDF やその他のドキュメントを作成するには、パスはまったく同じです。

  1. いくつかのサードパーティ ライブラリを使用してサーバー上にファイルを作成する
  2. そのファイルを一時的に保存する必要がある場合があります。その場合は、こちらをご覧ください。
  3. ブラウザがコンテンツとの関係を認識できるように、応答に正しい MIME タイプを設定する必要があります。
  4. Content-Dispositionブラウザがファイルを開く代わりにダウンロードするように、ヘッダーを設定する必要があります。
  5. そして最後に、ファイルをバイナリ配列として応答ストリームに書き込みます。
于 2013-11-15T10:55:30.220 に答える
1

試す

 using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Test\yourFile.csv"))
 {
   file.WriteLine("name,age");
   foreach(var item in data)
   {
      file.WriteLine(String.Format("{0},{1}", item.name, item.age));
   }
 }
于 2013-11-15T10:56:02.157 に答える