WPF實現DataGrid匯出CSV格式

2021-09-25 15:00:22 字數 3935 閱讀 2242

一.首先介紹下csv以及它和excel的區別

逗號分隔值(comma-separated values,csv),其檔案以純文字形式儲存**資料(數字和文字),檔案的每一行都是乙個資料記錄。每個記錄由乙個或多個字段組成,用逗號分隔。使用逗號作為字段分隔符是此檔案格式的名稱的**,因為分隔字元也可以不是逗號,有時也稱為字元分隔值。

csv廣泛用於不同體系結構的應用程式之間交換資料**資訊,解決不相容資料格式的互通問題,一般按照傳輸雙方既定標準進行格式定義,而其本身並無明確格式標準。

1、excel

(1). excel不僅可以儲存資料,還可以對資料進行操作

(2). 任何用於解析excel資料的程式語言庫通常都會更大,更慢,更複雜

(3). excel匯入資料時消耗更多的記憶體

2、csv (即comma separate values,這種檔案格式經常用來作為不同程式之間的資料互動的格式。)

(1). csv檔案在windows平台預設的開啟方式是excel,但是它的本質是乙個文字檔案,它儲存資料,但不包含格式,公式,巨集等。它也被稱為平面檔案

(2). csv檔案的體積更小,建立分發讀取更加方便,適合存放結構化資訊,比如記錄的匯出,流量統計等等

(3). 匯入csv檔案可以更快,而且消耗更少的記憶體

總結:excel中字尾為csv和xls,二者區別如下:

1、xls 檔案就是microsoft excel電子**的檔案格式。

2、csv是最通用的一種檔案格式,它可以非常容易地被匯入各種pc**及資料庫中

二.匯出csv的兩種方式

第一種方式比較簡單,但是在實際使用中會存在一定缺陷,比如當字段中有比較長的數字字段存在時,在用excel軟體檢視csv檔案時就會變成科學技術法的表現形式。其實這個問題跟用什麼語言匯出csv檔案沒有關係。excel顯示數字時,如果數字大於12位,它會自動轉化為科學計數法;如果數字大於15位,它不僅用於科學技術法表示,還會只保留高15位,其他位都變0

該案例是在mvvm模式下,**量較少,大家可以根據自己的專案需求進行更改

public icommand twospeedexporttocsv

;if (objsfd.showdialog() == true)});

}

第二種方式比較通用,可以匯出任何excel支援的格式

using npoi.hssf.usermodel;

using system;

using system.collections;

using system.collections.generic;

using system.data;

using system.io;

using system.linq;

using system.reflection;

using system.windows.controls;

namespace elecwatercicc.tools

; sfd.filename = filename;

if (sfd.showdialog() != true)

return null;

return sfd.filename;

}#endregion

#region 開啟excel對話方塊返回檔名

public static string openexcelfiledialog()

;if (ofd.showdialog() != true)

return null;

return ofd.filename;

}#endregion

#region 讀excel

public static datatable importexcelfile()

}catch (exception e)

#endregion

var sheet = hssfworkbook.getsheetat(0);

system.collections.ienumerator rows = sheet.getrowenumerator();

for (int j = 0; j < (sheet.getrow(0).lastcellnum); j++)

while (rows.movenext())

else

else

}else if (cell.celltype == npoi.ss.usermodel.celltype.boolean)

else}}

dt.rows.add(dr);}}

return dt;

}#endregion

#region list轉datatable

public static datatable listtodatatable(ienumerablec)

dt.loaddatarow(templist.toarray(), true);}}

return dt;

}#endregion

#region 寫入excel

public static bool writeexcel(datatable dt, string filename = "")

for (int i = 0; i < dt.rows.count; i++)

}// 寫入到客戶端

using (system.io.memorystream ms = new system.io.memorystream())

book = null;}}

return true;

}#endregion

#region datagrid轉datatable

public static datatable converttodatatable(system.windows.controls.datagrid datagrid)

dt.columns.add(datagrid.columns[i].header.tostring());//構建表頭 }}

//獲取內容

for (int i = 0; i < datagrid.items.count; i++)

else

columnsindex++;}}

dt.rows.add(row);

}return dt;

}/// /// datagrid轉datatable

///

///

///

///

///

public static datatable converttodatatable(system.windows.controls.datagrid datagrid,listennumber)

dt.columns.add(datagrid.columns[i].header.tostring());//構建表頭 }}

//獲取內容

foreach (var item in ennumber)

else

break;}}

columnsindex++;

}dt.rows.add(row);

}return dt;

}#endregion

}}

匯出csv 

public icommand twospeedexporttocsv

listda = (grid.itemssource as observablecollection).tolist();

datatable dt = excelhelper.converttodatatable(grid, da);

if (dt == null)

if (excelhelper.writeexcel(dt, "穩態資料統計" + datetime.now.tostring("yyyy-mm-dd")))

else});

}}

實現easyui的datagrid匯出為excel

之前天智海網路有介紹過如何實現easyui裡datagrid內容的列印,今天給大家介紹下如何實現datagrid內容匯出為excel檔案。以下為 實現 export.js function changetotable printdatagrid if typeof frozencolumns ind...

WPF中DataGrid控制項

設定不可自動拉伸寬度 datagrid.canuserresizecolumns false 第一列不可見 datagrid.headersvisibility datagridheadersvisibility.column 設定不可自動拉伸高度 datagrid.canuserresizerow...

WPF學習分享 一 DataGrid

最近由於想做乙個windows的桌面應用程式,正好最近看了一下c 在網上找了一下關於windwos桌面應用的相關檔案,最後選擇使用wpf來開發。使用datagrid用到的功能 datagrid通過使用資料繫結,實現資料的雙向通知。在datagrid的datagridcomboboxcolumn使用列...