zoukankan      html  css  js  c++  java
  • silverlight3datagrid中的数据导出到excel

    datagrid中的数据导出到excel
    转换成csv格式的数据 用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>
            
    /// <returns>Excel内容字符串</returns>
            public static string ExportDataGrid(bool withHeaders, DataGrid grid)
            {
                
    string colPath; System.Reflection.PropertyInfo propInfo;
                System.Windows.Data.Binding binding;
                System.Text.StringBuilder strBuilder 
    = new System.Text.StringBuilder();
                System.Collections.IList source 
    = (grid.ItemsSource as System.Collections.IList);
                
    if (source == nullreturn "";
                List
    <string> headers = new List<string>();
                grid.Columns.ToList().ForEach(col 
    =>
                {
                    
    if (col is DataGridBoundColumn)
                    { headers.Add(FormatCSVField(col.Header.ToString())); }
                });
                strBuilder.Append(String.Join(
    ",", headers.ToArray())).Append("\r\n");
                
    foreach (Object data in source)
                {
                    List
    <string> csvRow = new List<string>();
                    
    foreach (DataGridColumn col in grid.Columns)
                    {
                        
    if (col is DataGridBoundColumn)
                        {
                            binding 
    = (col as DataGridBoundColumn).Binding;
                            colPath 
    = binding.Path.Path;
                            propInfo 
    = data.GetType().GetProperty(colPath);
                            
    if (propInfo != null)
                            {
                                csvRow.Add(FormatCSVField(propInfo.GetValue(data, 
    null).ToString()));
                            }
                        }
                    }
                    strBuilder.Append(String.Join(
    ",", csvRow.ToArray())).Append("\r\n");
                }
                
    return strBuilder.ToString();
            }
            
    /// <summary>
            
    /// 导出DataGrid数据到Excel
            
    /// </summary>
            
    /// <param name="withHeaders">是否需要表头</param>
            
    /// <param name="grid">DataGrid</param>
            
    /// <returns>Excel内容字符串</returns>
            public static string ExportDataGrid(bool withHeaders, DataGrid grid,bool dataBind)
            {
                
    string colPath;
                System.Reflection.PropertyInfo propInfo;
                System.Windows.Data.Binding binding;
                System.Text.StringBuilder strBuilder 
    = new System.Text.StringBuilder();
                System.Collections.IList source 
    = (grid.ItemsSource as System.Collections.IList);
                
    if (source == nullreturn "";
                List
    <string> headers = new List<string>();
                grid.Columns.ToList().ForEach(col 
    =>
                {
                    
    if (col is DataGridTemplateColumn)
                    {
                        
    if (col.Header!=null)
                        {
                            headers.Add(FormatCSVField(col.Header.ToString()));
                        }
                        
    else
                        {
                            headers.Add(
    string.Empty);
                        }
                    }
                });
                strBuilder.Append(String.Join(
    ",", headers.ToArray())).Append("\r\n");
                
    foreach (Object data in source)
                {
                    List
    <string> csvRow = new List<string>();
                    
    foreach (DataGridColumn col in grid.Columns)
                    {
                        
    if (col is DataGridTemplateColumn)
                        {
                            FrameworkElement cellContent 
    = col.GetCellContent(data);
                            TextBlock block 
    = cellContent as TextBlock;
                            
    if (block != null)
                            {
                                csvRow.Add(FormatCSVField(block.Text));
                            }
                        }
                    }
                    strBuilder.Append(String.Join(
    ",", csvRow.ToArray())).Append("\r\n");
                }
                
    return strBuilder.ToString();
    调用上面的方法

      void btnExport_Click(object sender, RoutedEventArgs e)
             {
                 
    string data = AppCode.Common.ExportDataGrid(truethis.dg,true);
                 SaveFileDialog sfd 
    = new SaveFileDialog();
                 sfd.DefaultExt 
    = "csv";
                 sfd.Filter 
    = "CSV Files (*.csv)|*.csv|All files (*.*)|*.*";
             
                 sfd.FilterIndex
    =1;

                 
    if (sfd.ShowDialog() == true)
                 {
                      
    using (Stream stream = sfd.OpenFile())
                      {
    //用utf8编码
                             Byte[] fileContent = System.Text.UTF8Encoding.UTF8.GetBytes(data);
                             stream.Write(fileContent, 
    0, fileContent.Length);
                             stream.Close();
                       }              
                 }

    用此方法生成的文件在我的电脑环境office2007 win2003下打开是乱码
    但是在同事的机子上打开都正常(xp office2007)
  • 相关阅读:
    vim 乱码问题的方法参考
    Node.js的原型继承函数 util.inherits
    UML类图画法及其之间的几种关系
    repo 小结
    Js_Eval方法
    Js_数组操作
    Js_字体滚动换颜色
    Js_图片轮播
    Jq_网站顶部定时折叠广告
    Js_网站右下角悬浮视窗可关闭广告
  • 原文地址:https://www.cnblogs.com/z_lb/p/1564966.html
Copyright © 2011-2022 走看看