GridView 到具有重新排序的列的 CSV
GridView to CSV with re-ordered columns
我有一个 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();
}
我这样做是因为分符号在 excel 中很有趣,如果它是 ANSI 或不同的 UTF,这允许我控制编码。
列始终采用默认顺序。如何使用重新排序的列顺序输出 CSV?
-解决方案可以使用 javascript/jQuery,或使用 C# 后端的服务器端,并且可能需要重新处理现有组件。
-可接受的解决方案还必须允许分号在导出后正确显示在 excel 中。
更新:感谢您的帮助,我基本上可以正常工作了。然而,分符号 ¢
显示为 ¢
;所以 79¢
是 79¢
。如果我用记事本或记事本++打开它是正确的。
String.charCodeAt() 是 162。所以 41¢
是 52, 49, 162
。
-为什么 excel 多加一个字符?
-是否有不同的字符代码我可以进行替换以便它在 excel 中正确显示?
UPDATE2: 当出现狂野的 ¢
时,我只是将其转换为美元并使用 $
代替。对于经理来说,这似乎是一个令人满意的解决方案。
我采用了 naveen 的解决方案:http://jsfiddle.net/terryyounghk/KPEGU 我不得不稍微调整一下以适应我的具体情况,但效果很好。
我更改了行:
$cols = $row.find('td')
至:
$cols = $row.find('th,td');
所以我也可以获得 table headers,并添加了一个特例来处理那个讨厌的 ¢
.
我只是将其标记为答案,因为它已在评论中得到回答,任何浏览的人都会看到一个绿色框,可以来寻找解决方案。
如果有人有可以在 excel 输出中保留 ¢
的解决方案,我会将其标记为答案。
我有一个 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();
}
我这样做是因为分符号在 excel 中很有趣,如果它是 ANSI 或不同的 UTF,这允许我控制编码。
列始终采用默认顺序。如何使用重新排序的列顺序输出 CSV?
-解决方案可以使用 javascript/jQuery,或使用 C# 后端的服务器端,并且可能需要重新处理现有组件。
-可接受的解决方案还必须允许分号在导出后正确显示在 excel 中。
更新:感谢您的帮助,我基本上可以正常工作了。然而,分符号 ¢
显示为 ¢
;所以 79¢
是 79¢
。如果我用记事本或记事本++打开它是正确的。
String.charCodeAt() 是 162。所以 41¢
是 52, 49, 162
。
-为什么 excel 多加一个字符?
-是否有不同的字符代码我可以进行替换以便它在 excel 中正确显示?
UPDATE2: 当出现狂野的 ¢
时,我只是将其转换为美元并使用 $
代替。对于经理来说,这似乎是一个令人满意的解决方案。
我采用了 naveen 的解决方案:http://jsfiddle.net/terryyounghk/KPEGU 我不得不稍微调整一下以适应我的具体情况,但效果很好。
我更改了行:
$cols = $row.find('td')
至:
$cols = $row.find('th,td');
所以我也可以获得 table headers,并添加了一个特例来处理那个讨厌的 ¢
.
我只是将其标记为答案,因为它已在评论中得到回答,任何浏览的人都会看到一个绿色框,可以来寻找解决方案。
如果有人有可以在 excel 输出中保留 ¢
的解决方案,我会将其标记为答案。