一.首先介紹下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使用列...