निम्न छोटा संस्करण Excel में ठीक खुलता है, हो सकता है कि आपका मुद्दा अनुगामी अल्पविराम था
.net = 3.5
StringBuilder sb = new StringBuilder();
string[] columnNames = dt.Columns.Cast<DataColumn>().
Select(column => column.ColumnName).
ToArray();
sb.AppendLine(string.Join(",", columnNames));
foreach (DataRow row in dt.Rows)
{
string[] fields = row.ItemArray.Select(field => field.ToString()).
ToArray();
sb.AppendLine(string.Join(",", fields));
}
File.WriteAllText("test.csv", sb.ToString());
.net> = 4.0
और जैसा कि टिम ने बताया, यदि आप .net> = 4 पर हैं, तो आप इसे और भी छोटा कर सकते हैं:
StringBuilder sb = new StringBuilder();
IEnumerable<string> columnNames = dt.Columns.Cast<DataColumn>().
Select(column => column.ColumnName);
sb.AppendLine(string.Join(",", columnNames));
foreach (DataRow row in dt.Rows)
{
IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString());
sb.AppendLine(string.Join(",", fields));
}
File.WriteAllText("test.csv", sb.ToString());
जैसा कि ईसाई द्वारा सुझाया गया है, यदि आप खेतों में भागने वाले विशेष पात्रों को संभालना चाहते हैं, तो लूप ब्लॉक को इसके द्वारा प्रतिस्थापित करें:
foreach (DataRow row in dt.Rows)
{
IEnumerable<string> fields = row.ItemArray.Select(field =>
string.Concat("\"", field.ToString().Replace("\"", "\"\""), "\""));
sb.AppendLine(string.Join(",", fields));
}
और अंतिम सुझाव, आप एक बड़े दस्तावेज़ को स्मृति में एक बड़ा दस्तावेज़ होने से बचने के लिए लाइन द्वारा सीएसवी सामग्री लाइन लिख सकते हैं।