wpf导出DataGrid到Excel

public static void ExportDataGrid(DataGrid dGrid)
        {
            SaveFileDialog objSFD = new SaveFileDialog()
            {
                DefaultExt = "xls",
                Filter = "XLS Files (*.xls)|*.xls|All files (*.*)|*.*",
                FilterIndex = 1
            };
            if (objSFD.ShowDialog() == true)
            {
                string strFormat =objSFD.FileName.Substring
                    (objSFD.FileName.IndexOf('.') + 1).ToUpper();
                StringBuilder strBuilder = new StringBuilder();
                if (dGrid.ItemsSource == null) return;
                List<string> lstFields = new List<string>();
                if (dGrid.HeadersVisibility == 
                    DataGridHeadersVisibility.Column ||
                    dGrid.HeadersVisibility == 
                    DataGridHeadersVisibility.All)
                {
                    foreach (DataGridColumn dgcol in dGrid.Columns)
                        lstFields.Add(dgcol.Header.ToString());
                    BuildStringOfRow(strBuilder, lstFields, strFormat);
                }
                foreach (object data in dGrid.ItemsSource)
                {
                    lstFields.Clear();
                    foreach (DataGridColumn col in dGrid.Columns)
                    {
                        string strValue = "";
                        Binding objBinding = null;
                        if (col is DataGridBoundColumn)
                            objBinding = (col as DataGridBoundColumn)
                                .Binding as Binding;
                        if (col is DataGridTemplateColumn)
                        {
                            DependencyObject objDO =
                              (col as DataGridTemplateColumn)
                              .CellTemplate.LoadContent();
                            FrameworkElement oFE = 
                                (FrameworkElement)objDO;
                            FieldInfo oFI = 
                                oFE.GetType().GetField("TextProperty");
                            if (oFI != null)
                            {
                                if (oFI.GetValue(null) != null)
                                {
                                    if (oFE.GetBindingExpression(
                                           (DependencyProperty)oFI.GetValue(null)) != null)
                                        objBinding =
                                          oFE.GetBindingExpression(
                                          (DependencyProperty)oFI.GetValue(null)).ParentBinding;
                                }
                            }
                        }
                        if (objBinding != null)
                        {
                            if (objBinding.Path.Path != "")
                            {
                                PropertyInfo pi = data.GetType().GetProperty(objBinding.Path.Path);
                                if (pi != null) strValue = pi.GetValue(data, null).ToString();
                            }
                            if (objBinding.Converter != null)
                            {
                                if (strValue != "")
                                    strValue = objBinding.Converter.Convert(strValue,
                                      typeof(string), objBinding.ConverterParameter,
                                      objBinding.ConverterCulture).ToString();
                                else
                                    strValue = objBinding.Converter.Convert(data,
                                      typeof(string), objBinding.ConverterParameter,
                                      objBinding.ConverterCulture).ToString();
                            }
                        }
                        lstFields.Add(strValue);
                    }
                    BuildStringOfRow(strBuilder, lstFields, strFormat);
                }
                StreamWriter sw = new StreamWriter(objSFD.OpenFile(), Encoding.UTF8);              
                sw.Write(strBuilder.ToString());            
                sw.Close();
            }
        }
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 要将WPFDataGrid导出Excel,需要使用第三方库或插件来实现。可以使用EPPlus或NPOI等库,也可以使用Syncfusion或DevExpress等插件来完成。具体实现方式可以参考各个库或插件的官方文档或示例代码。 ### 回答2: WPF中的DataGridExcel之间的数据交互可以通过数据绑定和数据模型来实现。在WPF中,我们可以通过将DataGrid数据源与一个数据模型绑定,使用数据模型将DataGrid中的数据导出Excel。 首先,我们需要创建一个继承自System.Windows.Documents.FlowDocument类的自定义类,用于实现将数据写入Excel。在自定义类中,我们需要创建一个方法,通过DataRowCollection对象遍历表格的行和列,将数据值按照Excel中表格的行列存储方式写入到Excel中。 接着,在我们需要将DataGrid数据导出Excel的事件中,我们需要创建一个Excel文档,并使用数据模型将DataGrid中的数据导出Excel中。在导出数据时,我们需要使用Range对象指定Excel表格中的单元格范围,并用数据模型中的数据填充单元格。 WPF中的DataGridExcel之间的数据转换可以通过使用数据模型和数据绑定来实现。在数据模型中,我们可以将DataGrid中的数据生成Excel表格,并将数据绑定到Excel中的单元格中。同时,我们可以使用Excel控件来处理Excel文档并导出数据。 总体来说,WPFDataGrid导出Excel可以通过数据模型和数据绑定来实现,在导出数据时我们需要使用Range对象指定单元格范围,并使用数据模型中的数据填充单元格。这一过程需要仔细考虑数据的格式和内容,以确保正确的导出Excel文档。 ### 回答3: WPFDataGrid是一种强大的控件,它可以加载数据并以可视化的形式展示在界面上,对于需要复杂数据交互及展示的应用场景来说,是非常实用的。不过,有时候我们需要将DataGrid中的数据导出Excel中,方便进行统计分析,或者需要向其他人提供数据,这时如何进行导出呢? 以下是一些实现方法: 1.将数据DataGrid中提取出来,并将提取的数据存放在Excel文件中。我们可以读取DataGrid中的数据,将其转换为DataTable形式,然后使用专门的库如EPPlus,将DataTable的数据写入Excel文件中。 2.使用DataGrid控件绑定的ObservableCollection在Code Behind中创建Excel文件。我们同样可以通过DataGrid控件绑定的数据,创建相应的Excel文件,我们可以创建一个新的Excel工作表,将ObservableCollection中的每一行数据写入工作表中。 无论采用哪种方法,都需要使用到专业的库。一些可行的库如下: 1.EPPlus。EPPlus是一个开源的.NET类库,它使用Open XML SDK完成Excel文件操作。EPPlus具有Excel对象模型(Workbook,Worksheet,Range等),可以动态处理和生成Excel工作表。 2.Microsoft.Office.Interop.Excel。这个库是来自微软的一个组件,在使用时需要先引入相应的库。使用Microsoft.Office.Interop.Excel需要安装Microsoft Office Excel 2007或更高版本,它使用COM互操作性,而不是Open XML格式解析。 总体来说,将WPFDataGrid导出Excel中并不难,只要我们掌握了相应的库和API,就可以轻松实现这个功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值