เวอร์ชันที่สั้นกว่าต่อไปนี้เปิดได้ดีใน 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
และตามที่ Tim ชี้ให้เห็นหากคุณอยู่บน. 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());
ตามที่ Christian แนะนำหากคุณต้องการจัดการอักขระพิเศษที่หลบหนีในฟิลด์ให้แทนที่บล็อกลูปโดย:
foreach (DataRow row in dt.Rows)
{
IEnumerable<string> fields = row.ItemArray.Select(field =>
string.Concat("\"", field.ToString().Replace("\"", "\"\""), "\""));
sb.AppendLine(string.Join(",", fields));
}
และข้อเสนอแนะสุดท้ายคุณสามารถเขียนเนื้อหา csv ทีละบรรทัดแทนที่จะเป็นเอกสารทั้งหมดเพื่อหลีกเลี่ยงการมีเอกสารขนาดใหญ่ในหน่วยความจำ