我有一个GridView,它自动生成来自EAV源的列。默认情况下,列按字母顺序排列,但可以使用一些jQuery魔法重新排列。需要使用用户定义的列顺序以CSV格式输出数据。
我正在使用的jQuery神奇的东西:https://github.com/akottr/dragtable (如果解决方案需要,我可以确信使用不同的方法重新排列列)
CSV输出如下:
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();
}
我是这样做的,因为如果是ANSI或不同的UTF,分符号在excel中出来很有趣,这让我可以控制编码。
列始终采用默认顺序。如何输出具有重新排序的列顺序的CSV?
- 解决方案可以使用javascript / jQuery,或者服务器端使用C#后端,并且可能需要重新处理现有组件。
- 一个可接受的解决方案还必须允许在导出后在excel中正确显示分号。
更新:感谢您的帮助,我得到了大部分工作。然而,分号¢
以¢
形式出现;所以79¢
是79¢
。如果我在记事本或记事本++中打开它是正确的。
String.charCodeAt()将其作为162.因此41¢
为52, 49, 162
。
- 为什么要添加额外的角色?
- 有一个不同的charcode我可以做替换,所以它在excel中正确显示?
UPDATE2 :当出现野性¢
时,我只需将其转换为美元并使用$
代替。对于经理来说,这似乎是一个令人满意的解决方案。
答案 0 :(得分:0)
我选择了naveen的解决方案:http://jsfiddle.net/terryyounghk/KPEGU我必须稍微调整一下以适应我的具体情况,但效果很好。
我换了一行:
$cols = $row.find('td')
为:
$cols = $row.find('th,td');
所以我也可以获得表头,并添加了一个特殊的案例来处理那个讨厌的¢
。
我只是将此标记为答案,因为评论中已经回答了这一点,任何浏览的人都会看到一个绿色的框显示,并且可以来寻找解决方案。
如果有人有一个可以在excel输出中保留¢
的解决方案,我会将其标记为答案。