C# 在asp.net MVC中导出HTML表
我试图导出一个名为table的HTML表,该表动态绑定到C#中的ViewData.Model。我有一个名为export的方法,它是根据另一个方法的操作调用的。所以之前的一切都安排好了。。我只是不知道如何将数据导出到CSV或Excel文件。。因此,当我进入导出方法时,我不知道接下来要做什么来导出表。有人能帮我吗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
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));