如何在c#中使用数组作为数据源创建CSV和PDF

时间:2013-11-15 10:52:03

标签: c# .net arrays csv

我有一个班级

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();
        }

2 个答案:

答案 0 :(得分: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. 有时候需要暂时保存该文件,在这种情况下,您可以查看here
  3. 您应该在响应中设置正确的MIME类型,以便浏览器知道它与内容的关系。
  4. 您应该设置Content-Disposition标题,以便浏览器下载该文件,而不是打开它。
  5. 您最后将文件作为二进制数组写入响应流。

答案 1 :(得分: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));
   }
 }