C# 通过重新排序的列将GridView转换为CSV
我有一个GridView,其中包含从EAV源自动生成的列。默认情况下,列是按字母顺序排列的,但是可以通过一些jQuery魔术重新排列它们。数据需要使用用户定义的列顺序以CSV格式输出 我正在使用的jQuery魔术: (如果解决方案需要,我可以确信使用不同的方法重新排列列) CSV输出如下:C# 通过重新排序的列将GridView转换为CSV,c#,asp.net,csv,gridview,C#,Asp.net,Csv,Gridview,我有一个GridView,其中包含从EAV源自动生成的列。默认情况下,列是按字母顺序排列的,但是可以通过一些jQuery魔术重新排列它们。数据需要使用用户定义的列顺序以CSV格式输出 我正在使用的jQuery魔术: (如果解决方案需要,我可以确信使用不同的方法重新排列列) CSV输出如下: System.Text.StringBuilder sb = new System.Text.StringBuilder(); for (int i = 0; i < grdResults.Header
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int i = 0; i < grdResults.HeaderRow.Cells.Count; i++){
sb.Append(grdView.HeaderRow.Cells[i].Text.Replace(',', ';') + ',');
}
//append new line
sb.Append("\r\n");
for (int i = 0; i < grdView.Rows.Count; i++){
for (int j = 0; j < grdView.Rows[i].Cells.Count; j++){
sb.Append(HttpUtility.HtmlDecode(Rows[i].Cells[j].Text.Replace(',', ';'))+ ',');
}
sb.Append("\r\n");
}
FileStream fs = new FileStream(FileName, FileMode.OpenOrCreate,
FileAccess.ReadWrite);
fs.Close();
StreamWriter sw = new StreamWriter(FileName, false,
System.Text.Encoding.UTF8);
sw.Write(sb.ToString());
sw.Close();
if (sb.Length > 0)
{
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition",
string.Format("attachment;filename=Report{0}.csv",
DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss")));
Response.AddHeader("Content-Length",
Convert.ToString(sb.ToString().Length));
Response.ContentType = "text/HTML";
Response.WriteFile(FileName);
Response.End();
}
System.Text.StringBuilder sb=new System.Text.StringBuilder();
对于(int i=0;i0)
{
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader(“内容处置”,
格式(“附件;文件名=报告{0}.csv”,
DateTime.Now.ToString(“yyyy-MM-dd_HH-MM-ss”);
Response.AddHeader(“内容长度”,
Convert.ToString(sb.ToString().Length));
Response.ContentType=“text/HTML”;
WriteFile(文件名);
Response.End();
}
我这样做是因为在excel中,如果是ANSI或不同的UTF,分符号会很有趣,这允许我控制编码
列始终按默认顺序排列。如何以重新排序的列顺序输出CSV
-解决方案可以使用javascript/jQuery,也可以使用带有C#后端的服务器端,并且可能需要重新处理现有组件
-可接受的解决方案还必须允许在导出后在excel中正确显示分符号
更新:谢谢你的帮助,我基本上都能用。然而,分符号、
显示为、
;所以79×
就是79×
。如果我用记事本或记事本++打开它,它是正确的
charCodeAt()将其作为一个字符串。所以41¢
是52、49、162
-为什么excel会添加一个额外的字符
-是否有一个不同的字符码,我可以做一个替换,以便它在excel中正确显示
更新2:当出现一个通配符
、
时,我只是将其转换为美元,并使用$
代替。对于经理来说,这似乎是一个令人满意的解决方案。我采用了纳文的解决方案:我不得不稍微考虑一下,以适应我的具体情况,但效果很好
我将行从:
$cols = $row.find('td')
致:
因此,我还可以得到表头,并添加了一个特殊的案例来处理这个讨厌的、
我将把这个标记为答案,因为它在评论中得到了回答,任何浏览的人都会看到一个绿色的框显示,可以来寻找解决方案
如果任何人有一个解决方案可以在excel输出中保留一个
、
,我会将其标记为答案。您可以使用jquery datatables。它有丰富的api,并提出了导出到excel CSV word的开箱即用和免费
$cols = $row.find('th,td');