c# – 将DataGrid导出为CSV或Excel
发布时间:2020-12-16 01:55:13 所属栏目:百科 来源:网络整理
导读:如何将我的DataGrid信息导出到.csv或excel文件中? 我正在使用Microsoft Visual Studio 2010与.NET Framework 4.0. 解决方法 尝试下面的样本 private void btnexport_Click(object sender,RoutedEventArgs e){ ExportToExcelEmployee,Employees s = new Expo
如何将我的DataGrid信息导出到.csv或excel文件中?
我正在使用Microsoft Visual Studio 2010与.NET Framework 4.0. 解决方法
尝试下面的样本
private void btnexport_Click(object sender,RoutedEventArgs e) { ExportToExcel<Employee,Employees> s = new ExportToExcel<Employee,Employees>(); s.dataToPrint = (Employees)dgEmployee.ItemsSource; s.GenerateReport(); } /// <summary> /// Class for generator of Excel file /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="U"></typeparam> public class ExportToExcel<T,U> where T : class where U : List<T> { public List<T> dataToPrint; // Excel object references. private Excel.Application _excelApp = null; private Excel.Workbooks _books = null; private Excel._Workbook _book = null; private Excel.Sheets _sheets = null; private Excel._Worksheet _sheet = null; private Excel.Range _range = null; private Excel.Font _font = null; // Optional argument variable private object _optionalValue = Missing.Value; /// <summary> /// Generate report and sub functions /// </summary> public void GenerateReport() { try { if (dataToPrint != null) { if (dataToPrint.Count != 0) { Mouse.SetCursor(Cursors.Wait); CreateExcelRef(); FillSheet(); OpenReport(); Mouse.SetCursor(Cursors.Arrow); } } } catch (Exception e) { MessageBox.Show("Error while generating Excel report"); } finally { ReleaSEObject(_sheet); ReleaSEObject(_sheets); ReleaSEObject(_book); ReleaSEObject(_books); ReleaSEObject(_excelApp); } } /// <summary> /// Make Microsoft Excel application visible /// </summary> private void OpenReport() { _excelApp.Visible = true; } /// <summary> /// Populate the Excel sheet /// </summary> private void FillSheet() { object[] header = CreateHeader(); WriteData(header); } /// <summary> /// Write data into the Excel sheet /// </summary> /// <param name="header"></param> private void WriteData(object[] header) { object[,] objData = new object[dataToPrint.Count,header.Length]; for (int j = 0; j < dataToPrint.Count; j++) { var item = dataToPrint[j]; for (int i = 0; i < header.Length; i++) { var y = typeof(T).InvokeMember (header[i].ToString(),BindingFlags.GetProperty,null,item,null); objData[j,i] = (y == null) ? "" : y.ToString(); } } AddExcelRows("A2",dataToPrint.Count,header.Length,objData); AutoFitColumns("A1",dataToPrint.Count + 1,header.Length); } /// <summary> /// Method to make columns auto fit according to data /// </summary> /// <param name="startRange"></param> /// <param name="rowCount"></param> /// <param name="colCount"></param> private void AutoFitColumns(string startRange,int rowCount,int colCount) { _range = _sheet.get_Range(startRange,_optionalValue); _range = _range.get_Resize(rowCount,colCount); _range.Columns.AutoFit(); } /// <summary> /// Create header from the properties /// </summary> /// <returns></returns> private object[] CreateHeader() { PropertyInfo[] headerInfo = typeof(T).GetProperties(); // Create an array for the headers and add it to the // worksheet starting at cell A1. List<object> objHeaders = new List<object>(); for (int n = 0; n < headerInfo.Length; n++) { objHeaders.Add(headerInfo[n].Name); } var headerToAdd = objHeaders.ToArray(); AddExcelRows("A1",1,headerToAdd.Length,headerToAdd); SetHeaderStyle(); return headerToAdd; } /// <summary> /// Set Header style as bold /// </summary> private void SetHeaderStyle() { _font = _range.Font; _font.Bold = true; } /// <summary> /// Method to add an excel rows /// </summary> /// <param name="startRange"></param> /// <param name="rowCount"></param> /// <param name="colCount"></param> /// <param name="values"></param> private void AddExcelRows (string startRange,int colCount,object values) { _range = _sheet.get_Range(startRange,colCount); _range.set_Value(_optionalValue,values); } /// <summary> /// Create Excel application parameters instances /// </summary> private void CreateExcelRef() { _excelApp = new Excel.Application(); _books = (Excel.Workbooks)_excelApp.Workbooks; _book = (Excel._Workbook)(_books.Add(_optionalValue)); _sheets = (Excel.Sheets)_book.Worksheets; _sheet = (Excel._Worksheet)(_sheets.get_Item(1)); } /// <summary> /// Release unused COM objects /// </summary> /// <param name="obj"></param> private void ReleaSEObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch (Exception ex) { obj = null; MessageBox.Show(ex.Message.ToString()); } finally { GC.Collect(); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |