zoukankan      html  css  js  c++  java
  • wpf 导出Excel

      1 private void Button_Click_1(object sender, RoutedEventArgs e)
      2 {
      3 
      4 ExportDataGridSaveAs(true, this.data);
      5 }
      6 #region wpf客户端 导出DataGrid数据到Excel
      7 
      8 /// <summary>
      9 /// CSV格式化
     10 /// </summary>
     11 /// <param name="data">数据</param>
     12 /// <returns>格式化数据</returns>
     13 private static string FormatCsvField(string data)
     14 {
     15 return String.Format(""{0}"", data.Replace(""", """"").Replace("
    ", "").Replace("
    ", ""));
     16 }
     17 
     18  
     19 
     20 /// <summary>
     21 /// 导出DataGrid数据到Excel
     22 /// </summary>
     23 /// <param name="withHeaders">是否需要表头</param>
     24 /// <param name="grid">DataGrid</param>
     25 /// <param name="dataBind"></param>
     26 /// <returns>Excel内容字符串</returns>
     27 public static string ExportDataGrid(bool withHeaders, System.Windows.Controls.DataGrid grid, bool dataBind)
     28 {
     29 try
     30 {
     31 var strBuilder = new System.Text.StringBuilder();
     32 var source = (grid.ItemsSource as System.Collections.IList);
     33 if (source == null) return "";
     34 var headers = new List<string>();
     35 List<string> bt = new List<string>();
     36 
     37 foreach (var hr in grid.Columns)
     38 {
     39 // DataGridTextColumn textcol = hr. as DataGridTextColumn;
     40 headers.Add(hr.Header.ToString());
     41 if (hr is DataGridTextColumn)//列绑定数据
     42 {
     43 DataGridTextColumn textcol = hr as DataGridTextColumn;
     44 if (textcol != null)
     45 bt.Add((textcol.Binding as Binding).Path.Path.ToString()); //获取绑定源
     46 
     47 }
     48 else if (hr is DataGridTemplateColumn)
     49 {
     50 if (hr.Header.Equals("操作"))
     51 bt.Add("Id");
     52 }
     53 else
     54 {
     55 
     56 }
     57 }
     58 strBuilder.Append(String.Join(",", headers.ToArray())).Append("
    ");
     59 foreach (var data in source)
     60 {
     61 var csvRow = new List<string>();
     62 foreach (var ab in bt)
     63 {
     64 string s = ReflectionUtil.GetProperty(data, ab).ToString();
     65 if (s != null)
     66 {
     67 csvRow.Add(FormatCsvField(s));
     68 }
     69 else
     70 {
     71 csvRow.Add("	");
     72 }
     73 }
     74 strBuilder.Append(String.Join(",", csvRow.ToArray())).Append("
    ");
     75 // strBuilder.Append(String.Join(",", csvRow.ToArray())).Append("	");
     76 }
     77 return strBuilder.ToString();
     78 }
     79 catch (Exception ex)
     80 {
     81 // LogHelper.Error(ex);
     82 return "";
     83 }
     84 }
     85 public class ReflectionUtil
     86 {
     87 public static object GetProperty(object obj, string propertyName)
     88 {
     89 PropertyInfo info = obj.GetType().GetProperty(propertyName);
     90 if (info == null && propertyName.Split('.').Count() > 0)
     91 {
     92 object o = ReflectionUtil.GetProperty(obj, propertyName.Split('.')[0]);
     93 int index = propertyName.IndexOf('.');
     94 string end = propertyName.Substring(index + 1, propertyName.Length - index - 1);
     95 return ReflectionUtil.GetProperty(o, end);
     96 }
     97 object result = null;
     98 try
     99 {
    100 result = info.GetValue(obj, null);
    101 }
    102 catch (TargetException)
    103 {
    104 return "";
    105 }
    106 return result == null ? "" : result;
    107 }
    108 }
    109 /// <summary>
    110 /// 导出DataGrid数据到Excel为CVS文件
    111 /// 使用utf8编码 中文是乱码 改用Unicode编码
    112 /// 
    113 /// </summary>
    114 /// <param name="withHeaders">是否带列头</param>
    115 /// <param name="grid">DataGrid</param>
    116 public static void ExportDataGridSaveAs(bool withHeaders, System.Windows.Controls.DataGrid grid)
    117 {
    118 try
    119 {
    120 string data = ExportDataGrid(true, grid, true);
    121 var sfd = new Microsoft.Win32.SaveFileDialog
    122 {
    123 DefaultExt = "csv",
    124 Filter = "CSV Files (*.csv)|*.csv|All files (*.*)|*.*",
    125 FilterIndex = 1
    126 };
    127 if (sfd.ShowDialog() == true)
    128 {
    129 using (Stream stream = sfd.OpenFile())
    130 {
    131 using (var writer = new StreamWriter(stream, System.Text.Encoding.Unicode))
    132 {
    133 data = data.Replace(",", "	");
    134 writer.Write(data);
    135 writer.Close();
    136 }
    137 stream.Close();
    138 }
    139 }
    140 MessageBox.Show("导出成功!");
    141 }
    142 catch (Exception ex)
    143 {
    144 // LogHelper.Error(ex);
    145 }
    146 }
    147 
    148 #endregion 导出DataGrid数据到Excel
    149 
    150  

     找了好多都有问题,这个可以分享给到家

    转自:https://www.cnblogs.com/kmust/p/4412228.html

  • 相关阅读:
    nginx 开机自动启动
    Linux 常用命令
    php中数组操作函数
    Windows系统下GitBash显示的中文乱码解决方案
    更改Git默认编辑器为notepad++
    【js】函数问题
    【JS】JavaScript中的参数传递
    Android基础整理之四大组件Activity
    关于BaseAdapter的使用及优化心得(一)
    使用MySQL Workbench建立数据库,建立新的表,向表中添加数据
  • 原文地址:https://www.cnblogs.com/pu-tao-zi/p/wpf.html
Copyright © 2011-2022 走看看