3
A
回答
9
有幾種方法可以做到這一點。
一個最簡單(IMO)使用FileHelpers Library
FileHelpers.CsvEngine.DataTableToCsv(dataTable, filename);
2
還有就是,我希望,也是這樣做的一種可能方式:
static void Main(string[] args)
{
DataTable dt = new DataTable("MyTable");
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Name", typeof(string));
DataRow dr1 = dt.NewRow();
dr1["Id"] = 1;
dr1["Name"] = "John Smith";
dt.Rows.Add(dr1);
DataRow dr2 = dt.NewRow();
dr2["Id"] = 2;
dr2["Name"] = "John West";
dt.Rows.Add(dr2);
List<DataRow> list = dt.AsEnumerable().ToList();
var strlist = from dr in list
select dr[0] + ", " + dr[1];
var csv = string.Join(Environment.NewLine,strlist);
Console.WriteLine(csv);
}
1
所以這是一個相當奇怪的解決方案,但它使用JSON.net庫的序列化比大多數工作更快。這大大加快了解決方案的速度。
步驟:
- 在數據表中創建的每一個列名的數組,應該是 簡單
使用JSON.net到數據錶轉換成JSON字符串
string json = JsonConvert.SerializeObject(dt, Formatting.None);
開始使用C#字符串上的Replace函數,並去除所有json的json字符串中的 消光。
json = json.Replace("\"", "").Replace("},{", "\n").Replace(":", "").Replace("[{", "").Replace("}]", "");
然後使用該陣列從步驟1到從 JSON字符串中刪除所有的列名。你留下一個csv格式的字符串。
考慮使用在步驟1中創建的陣列再以CSV格式的第一行添加的列名 。
3
的相對簡單,緊湊並且相當靈活的解決方案可能是下面的擴展方法:
public static string ToCsv(this DataTable table, string colSep = "", string rowSep = "\r\n")
{
var format = string.Join(colSep, Enumerable.Range(0, table.Columns.Count)
.Select(i => string.Format("{{{0}}}", i)));
return string.Join(rowSep, table.Rows.OfType<DataRow>()
.Select(i => string.Format(format, i.ItemArray)));
}
請注意,這種解決方案可能會導致巨大的數據量,在這種情況下,你應該流問題輸出。引用和格式化當然會使代碼更復雜。
0
//Dataset To Xls
ExportDataSetToCsvFile(DS,@"C:\\");
internal static void ExportDataSetToCsvFile(DataSet _DataSet, string DestinationCsvDirectory)
{
try
{
foreach (DataTable DDT in _DataSet.Tables)
{
String MyFile = @DestinationCsvDirectory + "\\_" + DDT.TableName.ToString() + DateTime.Now.ToString("yyyyMMddhhMMssffff") + ".csv";//+ DateTime.Now.ToString("ddMMyyyyhhMMssffff")
using (var outputFile = File.CreateText(MyFile))
{
String CsvText = string.Empty;
foreach (DataColumn DC in DDT.Columns)
{
if (CsvText != "")
CsvText = CsvText + "," + DC.ColumnName.ToString();
else
CsvText = DC.ColumnName.ToString();
}
outputFile.WriteLine(CsvText.ToString().TrimEnd(','));
CsvText = string.Empty;
foreach (DataRow DDR in DDT.Rows)
{
foreach (DataColumn DCC in DDT.Columns)
{
if (CsvText != "")
CsvText = CsvText + "," + DDR[DCC.ColumnName.ToString()].ToString();
else
CsvText = DDR[DCC.ColumnName.ToString()].ToString();
}
outputFile.WriteLine(CsvText.ToString().TrimEnd(','));
CsvText = string.Empty;
}
System.Threading.Thread.Sleep(1000);
}
}
}
catch (Exception Ex)
{
throw Ex;
}
}
相關問題
- 1. 將DataTable轉換爲CSV流
- 2. 將DataTable的單列轉換爲CSV
- 3. 將Excel範圍轉換爲ADO.NET DataSet或DataTable等
- 4. 如何將Linq查詢轉換爲DataTable,DataSet或DataView?
- 5. 如何使用linq to dataSet將dataTable轉換爲數組?
- 6. 將DataRow []轉換爲DataTable的ASP.NET轉換
- 7. 將LINQ轉換爲DataTable
- 8. 將Xml轉換爲DataTable
- 9. 將DataTable轉換爲JSON
- 10. 將Iqueryable轉換爲DataTable
- 11. 將IEnumerable轉換爲DataTable
- 12. 將XML轉換爲DataTable
- 13. 將datatable轉換爲datareader
- 14. C#將Datatable轉換爲
- 15. 用列表替換DataTable,DataSet
- 16. 將CSV文件轉換爲DataTable時出錯將.txt添加到csv文件名
- 17. Spark 2.0 - 將DataFrame轉換爲DataSet
- 18. 如何將DataSet a轉換爲DataReader?
- 19. C# - 如何將DataTable的Schema轉換爲CSV字符串?
- 20. 聚合C#數據集時,如何將DataSet轉換爲.Load()的DataTable數組?
- 21. DataGrigView轉換爲DataTable
- 22. itext將PDF轉換爲csv
- 23. 將JSON轉換爲CSV
- 24. 將csv轉換爲excel PHP
- 25. Python將Excel轉換爲CSV
- 26. 將CSV轉換爲XLS
- 27. 將RDA轉換爲csv
- 28. 將.csv轉換爲.txt
- 29. 將JSON轉換爲CSV
- 30. 將CSV轉換爲數組
爲什麼你不想迭代DataTable的行?這將是非常直接的... – 2011-02-03 09:39:15
我正在尋找更快捷的方法。 – AbrahamJP 2011-02-03 10:00:42
你可以查看這個https://gist.github.com/riyadparvez/4467668 – user 2013-03-12 07:04:38