C# 在asp.net MVC中导出HTML表

C# 在asp.net MVC中导出HTML表,c#,asp.net-mvc,C#,Asp.net Mvc,我试图导出一个名为table的HTML表,该表动态绑定到C#中的ViewData.Model。我有一个名为export的方法,它是根据另一个方法的操作调用的。所以之前的一切都安排好了。。我只是不知道如何将数据导出到CSV或Excel文件。。因此,当我进入导出方法时,我不知道接下来要做什么来导出表。有人能帮我吗 public void Export(List<data> List) { //the list is the rows that are check

我试图导出一个名为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(); 

    }
公共作废导出(列表)
{
//该列表是选中并需要导出的行
StringWriter sw=新的StringWriter();
//我不相信这种语法是正确的,但如果他们有Excel导出到Excel,如果没有导出到csv,则删除“|”

for(int i=0;iCSV是一种简单的格式,可以轻松地构建为字符串


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

我认为您的控制器操作方法需要将数据项包装在html表中,您可以按照自己喜欢的方式进行操作,因此您的html+数据将存储在字符串,然后您可以执行如下操作-(它不是为MVC构建的,但很容易修改)


我不太理解“导出一个名为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(); 
}
公共作废导出(列表)
{
StringWriter sw=新的StringWriter();
//列名的第一行
sw.WriteLine(“\”ID\”、“Date\”、“Description\”);
foreach(列表中的数据类型项)
{
sw.WriteLine(string.format(“\”{0}\”,“{1}\”,“{2}\”,
项目编号:,
项目.日期,
项目名称);;
}
AddHeader(“内容处置”、“附件;文件名=test.csv”);
Response.ContentType=“text/csv”;
Response.ContentEncoding=System.Text.Encoding.GetEncoding(“utf-8”);
响应。写入(sw);
Response.End();
}

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

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

它已更新为code将html表标记中列表中的数据编码。其余代码应能正常工作。这是什么意思?将html表标记中列表中的数据编码。使用
foreach
,不要将
列表
变量的名称大写!(但一定要把你的名字大写:
data
)检查一下:如果你的描述中有逗号怎么办?如果你的数据中有引号怎么办?
item.description.Replace(“\”,“\”)
,如果我想把数字显示为文本,那么添加“=”示例:=\“{1}”,如果你要导出到CSV,使用它是很简单的。
String ltListSeparator = CultureInfo.CurrentUICulture.TextInfo.ListSeparator;
sw.WriteLine(string.format("{0}" + ltListSeparator + "{1}" + ltListSeparator + "{2}", item.ID, item.Date, item.Description));