Silverlight中导出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数据,返回StringBuilder类型数据,用以生成CSV格式数据
        /// </summary> 
        /// <param name="withHeaders">是否需要表头</param> 
        /// <param name="grid">DataGrid</param> 
        /// <returns>Excel内容字符串</returns> 
        private static string GetGridData(bool withHeaders, DataGrid grid)
        {
            System.Reflection.PropertyInfo propInfo;
            System.Windows.Data.Binding binding;
            var strBuilder = new System.Text.StringBuilder();

            var source = grid.ItemsSource;

            if (source == null) return "";

            var headers = new List<string>();
            try
            {
                if (grid.Columns.Count == 0)
                {
                    return null;
                }
                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)
                {
                    var csvRow = new List<string>();
                    foreach (DataGridColumn col in grid.Columns)
                    {
                        if (col is DataGridBoundColumn)
                        {
                            binding = (col as DataGridBoundColumn).Binding;
                            string 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();
            }
            catch { return null; }
        }

        /// <summary>
        /// 导出Excel
        /// </summary>
        public void ExportGridToExcel()
        {
            try
            {
                string data = GetGridData(true, StatisticsDetail);
                if (string.IsNullOrEmpty(data))
                    return;

                SaveFileDialog sfd = new SaveFileDialog
                {
                    DefaultExt = "csv",
                    Filter = "CSV Files (*.csv)|*.csv|All files (*.*)|*.*",
                    FilterIndex = 1
                };
                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 { }
        }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值