private void Button_Click_1(object sender, RoutedEventArgs e)
{ ExportDataGridSaveAs(true, this.data);
}
#region wpf客户端 导出DataGrid数据到Excel /// <summary>
/// CSV格式化
/// </summary>
/// <param name="data">数据</param>
/// <returns>格式化数据</returns>
private static string FormatCsvField(string data)
{
return String.Format("\"{0}\"", data.Replace("\"", "\"\"\"").Replace("\n", "").Replace("\r", ""));
} /// <summary>
/// 导出DataGrid数据到Excel
/// </summary>
/// <param name="withHeaders">是否需要表头</param>
/// <param name="grid">DataGrid</param>
/// <param name="dataBind"></param>
/// <returns>Excel内容字符串</returns>
public static string ExportDataGrid(bool withHeaders, System.Windows.Controls.DataGrid grid, bool dataBind)
{
try
{
var strBuilder = new System.Text.StringBuilder();
var source = (grid.ItemsSource as System.Collections.IList);
if (source == null) return "";
var headers = new List<string>();
List<string> bt = new List<string>(); foreach (var hr in grid.Columns)
{
// DataGridTextColumn textcol = hr. as DataGridTextColumn;
headers.Add(hr.Header.ToString());
if (hr is DataGridTextColumn)//列绑定数据
{
DataGridTextColumn textcol = hr as DataGridTextColumn;
if (textcol != null)
bt.Add((textcol.Binding as Binding).Path.Path.ToString()); //获取绑定源 }
else if (hr is DataGridTemplateColumn)
{
if (hr.Header.Equals("操作"))
bt.Add("Id");
}
else
{ }
}
strBuilder.Append(String.Join(",", headers.ToArray())).Append("\r\n");
foreach (var data in source)
{
var csvRow = new List<string>();
foreach (var ab in bt)
{
string s = ReflectionUtil.GetProperty(data, ab).ToString();
if (s != null)
{
csvRow.Add(FormatCsvField(s));
}
else
{
csvRow.Add("\t");
}
}
strBuilder.Append(String.Join(",", csvRow.ToArray())).Append("\r\n");
// strBuilder.Append(String.Join(",", csvRow.ToArray())).Append("\t");
}
return strBuilder.ToString();
}
catch (Exception ex)
{
// LogHelper.Error(ex);
return "";
}
}
public class ReflectionUtil
{
public static object GetProperty(object obj, string propertyName)
{
PropertyInfo info = obj.GetType().GetProperty(propertyName);
if (info == null && propertyName.Split('.').Count() > )
{
object o = ReflectionUtil.GetProperty(obj, propertyName.Split('.')[]);
int index = propertyName.IndexOf('.');
string end = propertyName.Substring(index + , propertyName.Length - index - );
return ReflectionUtil.GetProperty(o, end);
}
object result = null;
try
{
result = info.GetValue(obj, null);
}
catch (TargetException)
{
return "";
}
return result == null ? "" : result;
}
}
/// <summary>
/// 导出DataGrid数据到Excel为CVS文件
/// 使用utf8编码 中文是乱码 改用Unicode编码
///
/// </summary>
/// <param name="withHeaders">是否带列头</param>
/// <param name="grid">DataGrid</param>
public static void ExportDataGridSaveAs(bool withHeaders, System.Windows.Controls.DataGrid grid)
{
try
{
string data = ExportDataGrid(true, grid, true);
var sfd = new Microsoft.Win32.SaveFileDialog
{
DefaultExt = "csv",
Filter = "CSV Files (*.csv)|*.csv|All files (*.*)|*.*",
FilterIndex =
};
if (sfd.ShowDialog() == true)
{
using (Stream stream = sfd.OpenFile())
{
using (var writer = new StreamWriter(stream, System.Text.Encoding.Unicode))
{
data = data.Replace(",", "\t");
writer.Write(data);
writer.Close();
}
stream.Close();
}
}
MessageBox.Show("导出成功!");
}
catch (Exception ex)
{
// LogHelper.Error(ex);
}
} #endregion 导出DataGrid数据到Excel

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

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

wpf 导出Excel的更多相关文章

  1. WPF 导出Excel(合并单元格)

    WPF 导出Excel(合并单元格) DataTable 导出Excel(导出想要的列,不想要的去掉) ,B1,B2,B3,B4,B5} MisroSoft.Office.Interop.Excel. ...

  2. wpf 导出Excel Wpf Button 样式 wpf简单进度条 List泛型集合对象排序 C#集合

    wpf 导出Excel   1 private void Button_Click_1(object sender, RoutedEventArgs e) 2 { 3 4 ExportDataGrid ...

  3. WPF 导出Excel 导出图片

    /// <summary> /// 导出Excel /// </summary> private void ExportExcel(DataTable ExcelDt) { / ...

  4. C#使用Aspose.Cells导出Excel简单实现

    首先,需要添加引用Aspose.Cells.dll,官网下载地址:http://downloads.aspose.com/cells/net 将DataTable导出Xlsx格式的文件下载(网页输出) ...

  5. 利用poi导出Excel

    import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.r ...

  6. [django]数据导出excel升级强化版(很强大!)

    不多说了,原理采用xlwt导出excel文件,所谓的强化版指的是实现在网页上选择一定条件导出对应的数据 之前我的博文出过这类文章,但只是实现导出数据,这次左思右想,再加上网上的搜索,终于找出方法实现条 ...

  7. NPOI导出Excel

    using System;using System.Collections.Generic;using System.Linq;using System.Text;#region NPOIusing ...

  8. ASP.NET Core 导入导出Excel xlsx 文件

    ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Li ...

  9. asp.net DataTable导出Excel 自定义列名

    1.添加引用NPOI.dll 2.cs文件头部添加 using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System.IO; 3.代码如 ...

随机推荐

  1. Maximum Average Subarray I LT643

    Given an array consisting of n integers, find the contiguous subarray of given length k that has the ...

  2. IOS初级:delegate的使用

    delegate的应用场景:view中的事件,controller做处理(如刷新view中元素等). storyboard的textfield实现点击return实现收起键盘. 首先在ViewCont ...

  3. Python 解释器介绍

    举个栗子: -c cmd用法 python -c ' import os ; print ("is ok ") ' 或者(注意引号形式) python -c "impor ...

  4. H.264, MPEG4之间的关系

    百度百科搜索 H.264 H.264是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式.H.264是ITU-T以H.26x系列为名称命名的视频编解码技 ...

  5. 博客写作的Checklist

    Checklist 1.不要发明术语. 2.不要使用指代不清的代词.如:我,他. 3.不要使用错误的承前省. 4.不要使用口语. 5.给出结论之前,先交代背景. 6.站立会议报告中应有燃尽图. 7.燃 ...

  6. PHP字符串函数运用小案例

    $str = 'ZenD_CONTRollER_FronT'; //转换为Zend_Controller_Front //1.全部转换为小写 $str1 = strtolower($str); //2 ...

  7. java json注解

    (1)初级我们从几个简单的使用场景开始:重命名属性,忽略属性,以及修改属性所使用的类型.注意:下面的例子仅仅显示了成员属性(field properties),注解同样也可以用在成员方法(getter ...

  8. LPCSTR与CString转换

    1.LPCSTR是Win32和VC++所使用的一种字符串数据类型,L表示long,P表示指针,C表示常量,STR表示字符串. 2.LPCSTR转化为CString: LPCSTR  lpStr=&qu ...

  9. VMware Authorization Service不能启动 VMware虚拟机状态已挂起无法恢复解决方案

    在网上看说在服务里面启动 但也是不能用 电脑上说是WINDOWS无法启动VMware Authorization Service服务(位于本地计算机上)错误:1068 依赖服务或组无法启动 这个很简单 ...

  10. java web 大文件下载

    泽优大文件下载产品测试 泽优大文件下载控件down2,基于php开发环境测试. 开发环境:HBuilder 服务器:wamp64 数据库:mysql 可视化数据库编辑工具:Navicat Premiu ...