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

尝试

 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 回答
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 回答