代码之家  ›  专栏  ›  技术社区  ›  TStamper

在ASP.NET MVC中导出HTML表

  •  7
  • TStamper  · 技术社区  · 15 年前

    我试图导出一个名为table的HTML表,该表动态绑定到c中的viewdata.model。我有一个名为export的方法,它是根据另一个方法的操作调用的。在那之前的一切都安排好了……我只是不知道如何将数据导出到csv或excel文件。所以当我进入导出方法时,我不知道接下来要做什么来导出表。有人能帮我吗

        public void Export(List<data> List)
        {
         //the list is the rows that are checked and need to be exported
           StringWriter sw = new StringWriter();
    
         //I don't believe any of this syntax is right, but if they have Excel export to excel and if not export to csv  "|" delimeted
    
       for(int i=0; i<List.Count;i++)
        {
                  sw.WriteLine(List[i].ID+ "|" + List[i].Date + "|" + List[i].Description);
    
        }
        Response.AddHeader("Content-Disposition", "attachment; filename=test.csv");
        Response.ContentType = "application/ms-excel";
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
        Response.Write(sw);
        Response.End(); 
    
        }
    
    4 回复  |  直到 8 年前
        1
  •  15
  •   Tim Cooper    11 年前

    我不太了解“导出一个名为table的HTML表,该表动态绑定到viewdata.model”的整个过程,因此我将忽略它,并将重点放在 导出(列表<数据>列表) 方法。顺便说一句,你从来没有真正提到哪里出了问题。

    我看到你写过“如果他们有Excel导出到Excel,如果没有导出到CSV”,我个人会在这两种情况下将其导出为CSV文件,因为Excel可以处理CSV文件没有问题。

    因此,考虑到这一点,这里是基于您的代码的导出方法。

    public void Export(List<DataType> list)
    {
        StringWriter sw = new StringWriter();
    
        //First line for column names
        sw.WriteLine("\"ID\",\"Date\",\"Description\"");
    
        foreach(DataType item in list)
        {
            sw.WriteLine(string.format("\"{0}\",\"{1}\",\"{2}\"",
                                       item.ID,
                                       item.Date,
                                       item.Description));
        }
    
        Response.AddHeader("Content-Disposition", "attachment; filename=test.csv");
        Response.ContentType = "text/csv";
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
        Response.Write(sw);
        Response.End(); 
    }
    
        2
  •  2
  •   kenorb    8 年前

    这是一个很好的例子,但我认为需要对全球化进行修改。

    String ltListSeparator = CultureInfo.CurrentUICulture.TextInfo.ListSeparator;
    sw.WriteLine(string.format("{0}" + ltListSeparator + "{1}" + ltListSeparator + "{2}", item.ID, item.Date, item.Description));
    
        3
  •  1
  •   Perpetualcoder    15 年前

    我认为您的控制器操作方法需要将数据项包装在一个HTML表中,您可能希望以任何方式进行,因此您的HTML+数据将存储在一个字符串中,然后您可以执行如下操作(它不是为MVC而严格构建的,但易于修改)。

            Response.ClearContent();    
            Response.AddHeader("content-disposition", attachment);    
            Response.ContentType = "application/ms-excel";                
            Response.Write(yourDataAndHtmlAsString);
            Response.End();
    
        4
  •  0
  •   Iain Holder    15 年前

    csv是一种简单的格式,可以作为字符串轻松构建。

    http://en.wikipedia.org/wiki/Comma-separated_values

    你可以创建一个你认为最终产品应该是什么样子的Excel电子表格,另存为csv,在记事本中打开它,然后尝试使用字符串生成器复制它。