微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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 { }
        }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐