Phiên bản ngắn hơn sau đây mở tốt trong Excel, có thể vấn đề của bạn là dấu phẩy ở cuối
.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
Và như Tim đã chỉ ra, nếu bạn đang sử dụng .net> = 4, bạn có thể làm cho nó ngắn hơn nữa:
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());
Theo đề xuất của Christian, nếu bạn muốn xử lý các ký tự đặc biệt thoát ra trong các trường, hãy thay thế khối vòng lặp bằng cách:
foreach (DataRow row in dt.Rows)
{
IEnumerable<string> fields = row.ItemArray.Select(field =>
string.Concat("\"", field.ToString().Replace("\"", "\"\""), "\""));
sb.AppendLine(string.Join(",", fields));
}
Và gợi ý cuối cùng, bạn có thể viết nội dung csv từng dòng thay vì toàn bộ tài liệu, để tránh có một tài liệu lớn trong bộ nhớ.