且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

假导出Excel功能实现,按CSV格式快速导出功能代码参考(追求代码追求简洁复用)浙江杭州

更新时间:2022-10-01 11:05:15

我们辛苦录入的数据都希望能有重复利用的价值,一方面这些基础数据需要有数据库级的重复利用,程序级别的重复利用,另一方面还需要直接可以方便的导出倒入的功能比较好,虽然我们自己制作的统计分析功能很强大,但是还是没有Office Excel这么灵活强大,毕竟人家是世界级别的,我们的产品暂时还没能力能跟这个匹敌,这个是实话。

 

   使用我们软件的客户经常需要有导出数据的实际工作需要,导出的数据功能的最重要的意图是数据能重复利用,辛辛苦苦录入了某一个系统中的数据无法重复利用,或者很难重复利用,那是很残忍的事情,是严重浪费生命的事情,我们尽量不要让客户折磨能重复利用的都重复利用。

 

   在走火入魔C#.NET通用权限管理系统组件源码里,有一个假导出Excel功能,可供大家参考一下。具体实现功能如下:任何信息管理系统中,若有必要都做个导出功能比较好。

 

   很多东西其实老早就发明了,但是真正普及都需要一个过程,100年前轿车就被发明了,到了100年后才普及得厉害,走火入魔C#.NET通用权限管理系统也一样被推广了3年左右,再过几年也会全国都普及了,大家都慢慢的认可了,就象论坛程序一个道理没几个人自己写了,直接买个现成的拿来用用就可以了,没几个SB会自己埋头苦干论坛程序了,通用权限到今天为止已经销售了200多套,未来的3年内,应该全国到处都会用这个来开发信息化管理系统,客户不会允许你瞎折腾了,浪费生命、搞得死去活来何必,直接拿过来用用配置一下,就完事了,省心省事。

 

   中国有几亿农民,日子过得蛮苦的,美国可能只有几百万农民就可以了,应为他们都用工具大规模批量生成,我们国内有多少开发人员都在重复劳动?我做过的10年的路又会有 多少个人走过,跟我有同样想法的人,会有多过多少,他们可能都没能坚持,没我有毅力,不怕挨骂、不怕被拍砖头、不怕别人不购买、不怕当炮灰。

   任何信息管理系统,都需要一个铜墙铁壁的经得起考验的权限配置管理工具、这个若是从头开始做,需要几年的时间完善,没必要生命浪费在这个上,每个10年以上工作经验的程序员,都能做出一个有重复利用价值的工具,我们的生产力就可以得到提高,社会就会进步。  

假导出Excel功能实现,按CSV格式快速导出功能代码参考(追求代码追求简洁复用)浙江杭州

导出数据功能是导出当前页面上的数据,全部导出是指所有的数据。

 

假导出Excel功能实现,按CSV格式快速导出功能代码参考(追求代码追求简洁复用)浙江杭州

 

导出CVS时会遇到文件名乱码、文件乱码的问题,WEB里还会遇到直接打开还是另存为的问题等。 

假导出Excel功能实现,按CSV格式快速导出功能代码参考(追求代码追求简洁复用)浙江杭州

 

假导出Excel功能实现,按CSV格式快速导出功能代码参考(追求代码追求简洁复用)浙江杭州

 

代码参考如下:

全部导出:

1         private void btnExportAll_Click(object sender, EventArgs e)
2         {
3             // 全部导出Excel
4             DataTable dataTable = ServiceManager.Instance.OrganizeService.GetDT(UserInfo);
5             dataTable.DefaultView.Sort = BaseOrganizeTable.FieldParentId + "" + BaseOrganizeTable.FieldSortCode;
6             this.ExportExcel(this.grdOrganize, dataTable.DefaultView, @"\Modules\Export\""组织机构.csv");
7         }

导出当前页面: 

1         private void btnExport_Click(object sender, EventArgs e)
2         {
3             // 导出Excel
4             this.ExportExcel(this.grdOrganize, @"\Modules\Export\""组织机构.csv");
5         }
 1         #region private bool FileExist(string fileName) 检查文件是否存在
 2         /// <summary>
 3         /// 检查文件是否存在
 4         /// </summary>
 5         /// <param name="fileName">文件名</param>
 6         /// <returns>是否存在</returns>
 7         private bool FileExist(string fileName)
 8         {
 9             if (System.IO.File.Exists(fileName))
10             {
11                 string targetFileName = System.IO.Path.GetFileName(fileName);
12                 if (MessageBox.Show(AppMessage.Format(AppMessage.MSG0236, targetFileName), AppMessage.MSG0000, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
13                 {
14                     System.IO.File.Delete(fileName);
15                 }
16                 else
17                 {
18                     return true;
19                 }
20             }
21             return false;
22         }
23         #endregion
24 
25         #region private void ExportExcel(DataGridView dataGridView, DataView dataView, string directory, string fileName) 导出Excel
26         /// <summary>
27         /// 导出Excel
28         /// </summary>
29         /// <param name="dataGridView">表格控件</param>
30         /// <param name="dataView">数据表格</param>
31         /// <param name="directory">目录</param>
32         /// <param name="fileName">文件名</param>
33         public void ExportExcel(DataGridView dataGridView, DataView dataView, string directory, string fileName)
34         {
35             // 开始忙了
36             this.Cursor = Cursors.WaitCursor;
37             string directoryName = BaseSystemInfo.StartupPath + directory;
38             if (!Directory.Exists(directoryName))
39             {
40                 Directory.CreateDirectory(directoryName);
41             }
42             string file = BaseSystemInfo.StartupPath + directory + fileName;
43             if (!this.FileExist(file))
44             {
45                 BaseExportCSV.ExportCSV(dataGridView, dataView, file);
46                 Process.Start(file);
47             }
48             // 已经忙完了
49             this.Cursor = Cursors.Default;
50         }
51         #endregion
52 
53         public void ExportExcel(DataGridView dataGridView, string directory, string fileName)
54         {
55             ExportExcel(dataGridView, (DataView)(dataGridView.DataSource), directory, fileName);
56         }

 

相关工具包的代码如下:

假导出Excel功能实现,按CSV格式快速导出功能代码参考(追求代码追求简洁复用)浙江杭州View Code
//-------------------------------------------------------------------------------------
// All Rights Reserved , Copyright (C) 2011 , Hairihan TECH, Ltd. 
//-------------------------------------------------------------------------------------

using System.Data;
using System.IO;
using System.Text;
using System.Web;
using System.Windows.Forms;

namespace DotNet.WinForm.Utilities
{
    
using DotNet.Utilities;

    
/// <summary>
    
/// BaseExportCSV
    
/// 导出CSV格式数据
    
/// 
    
/// 修改纪录
    
/// 
    
///     2009.07.08 版本:3.0 JiRiGaLa    更新完善程序,将方法修改为静态方法。
    
///     2007.08.11 版本:2.0 JiRiGaLa    更新完善程序。
    
///     2006.12.01 版本:1.0 JiRiGaLa    新创建。
    
/// 
    
/// 版本:3.0
    
///
    
/// <author>
    
///        <name>JiRiGaLa</name>
    
///        <date>2009.07.08</date>
    
/// </author> 
    
/// </summary>
    public class BaseExportCSV
    {
        
#region public static StringBuilder GetCSVFormatData(DataTable dataTable) 通过DataTable获得CSV格式数据
        
/// <summary>
        
/// 通过DataTable获得CSV格式数据
        
/// </summary>
        
/// <param name="dataTable">数据表</param>
        
/// <returns>CSV字符串数据</returns>
        public static StringBuilder GetCSVFormatData(DataTable dataTable)
        {
            StringBuilder StringBuilder 
= new StringBuilder();
            
// 写出表头
            foreach (DataColumn DataColumn in dataTable.Columns)
            {
                StringBuilder.Append(DataColumn.ColumnName.ToString() 
+ ",");
            }
            StringBuilder.Append(
"\n");
            
// 写出数据
            foreach (DataRowView dataRowView in dataTable.DefaultView)
            {
                
foreach (DataColumn DataColumn in dataTable.Columns)
                {
                    StringBuilder.Append(dataRowView[DataColumn.ColumnName].ToString() 
+ ",");
                }
                StringBuilder.Append(
"\n");
            }
            
return StringBuilder;
        }
        
#endregion

        
#region public static StringBuilder GetCSVFormatData(DataSet dataSet) 通过DataSet获得CSV格式数据
        
/// <summary>
        
/// 通过DataSet获得CSV格式数据
        
/// </summary>
        
/// <param name="dataSet">数据集</param>
        
/// <returns>CSV字符串数据</returns>
        public static StringBuilder GetCSVFormatData(DataSet dataSet)
        {
            StringBuilder StringBuilder 
= new StringBuilder();
            
foreach (DataTable dataTable in dataSet.Tables)
            {
                StringBuilder.Append(GetCSVFormatData(dataTable));
            }
            
return StringBuilder;
        }
        
#endregion

        
#region public static void ExportCSV(DataTable dataTable, string fileName) 导出CSV格式文件
        
/// <summary>
        
/// 导出CSV格式文件
        
/// </summary>
        
/// <param name="dataTable">数据表</param>
        
/// <param name="fileName">文件名</param>
        public static void ExportCSV(DataTable dataTable, string fileName)
        {
            StreamWriter StreamWriter 
= new StreamWriter(fileName, false, System.Text.Encoding.GetEncoding("gb2312"));
            StreamWriter.WriteLine(GetCSVFormatData(dataTable).ToString());
            StreamWriter.Flush();
            StreamWriter.Close();
        }
        
#endregion

        
#region public static void ExportCSV(DataSet dataSet, string fileName) 导出CSV格式文件
        
/// <summary>
        
/// 导出CSV格式文件
        
/// </summary>
        
/// <param name="dataSet">数据集</param>
        
/// <param name="fileName">文件名</param>
        public static void ExportCSV(DataSet dataSet, string fileName)
        {
            StreamWriter StreamWriter 
= new StreamWriter(fileName, false, System.Text.Encoding.GetEncoding("gb2312"));
            StreamWriter.WriteLine(GetCSVFormatData(dataSet).ToString());
            StreamWriter.Flush();
            StreamWriter.Close();
        }
        
#endregion

        
#region public static void ExportCSV(DataGridView dataGridView, string fileName) 导出CSV格式文件
        
/// <summary>
        
/// 导出CSV格式文件
        
/// </summary>
        
/// <param name="dataGridView">表格控件</param>
        
/// <param name="fileName">文件名</param>
        public static void ExportCSV(DataGridView dataGridView, string fileName)
        {
            ExportCSV(dataGridView, (DataView)(dataGridView.DataSource), fileName);
        }
        
#endregion

        
#region public static void ExportCSV(DataGridView dataGridView, DataView dataView, string fileName) 导出CSV格式文件
        
/// <summary>
        
/// 导出CSV格式文件
        
/// </summary>
        
/// <param name="dataGridView">表格控件</param>
        
/// <param name="dataView">数据表</param>
        
/// <param name="fileName">文件名</param>
        public static void ExportCSV(DataGridView dataGridView, DataView dataView, string fileName)
        {
            StreamWriter streamWriter 
= new StreamWriter(fileName, false, System.Text.Encoding.GetEncoding("gb2312"));
            StringBuilder stringBuilder 
= new StringBuilder();
            
// 写出表头
            for (int i = 0; i < dataGridView.Columns.Count; i++)
            {
                
if (dataGridView.Columns[i].Visible && (dataGridView.Columns[i].DataPropertyName.ToUpper() != BaseBusinessLogic.SelectedColumn.ToUpper()))
                {
                    stringBuilder.Append(dataGridView.Columns[i].HeaderText 
+ ",");
                }
            }
            streamWriter.WriteLine(stringBuilder.ToString());
            
// 写出数据
            foreach (DataRowView dataRowView in dataView)
            {
                stringBuilder 
= new StringBuilder();
                
for (int i = 0; i < dataGridView.Columns.Count; i++)
                {
                    
if (dataGridView.Columns[i].Visible && (dataGridView.Columns[i].DataPropertyName.ToUpper() != BaseBusinessLogic.SelectedColumn.ToUpper()))
                    {
                        stringBuilder.Append(dataRowView[dataGridView.Columns[i].DataPropertyName].ToString() 
+ ",");
                    }
                }
                streamWriter.WriteLine(stringBuilder.ToString());
            }
            streamWriter.Flush();
            streamWriter.Close();
        }
        
#endregion

        
/*

        #region public static void GetResponseCSV(DataTable dataTable, string fileName) 在浏览器中获得CSV格式文件
        /// <summary>
        /// 在浏览器中获得CSV格式文件
        /// </summary>
        /// <param name="dataTable">数据表</param>
        /// <param name="fileName">输出文件名</param>
        public static void GetResponseCSV(DataTable dataTable, string fileName)
        {
            HttpContext.Current.Response.ClearHeaders();
            HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
            HttpContext.Current.Response.AppendHeader("Content-disposition", "attachment;filename=" + fileName);
            HttpContext.Current.Response.ContentType = "application/ms-excel";
            HttpContext.Current.Response.Write(GetCSVFormatData(dataTable).ToString());
            HttpContext.Current.Response.End();
        }
        #endregion

        #region public static void GetResponseCSV(DataSet dataSet, string fileName) 在浏览器中获得CSV格式文件
        /// <summary>
        /// 在浏览器中获得CSV格式文件
        /// </summary>
        /// <param name="dataSet">数据集</param>
        /// <param name="fileName">输出文件名</param>
        public static void GetResponseCSV(DataSet dataSet, string fileName)
        {
            HttpContext.Current.Response.ClearHeaders();
            HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
            HttpContext.Current.Response.AppendHeader("Content-disposition", "attachment;filename=" + fileName);
            HttpContext.Current.Response.ContentType = "application/ms-excel";
            HttpContext.Current.Response.Write(GetCSVFormatData(dataSet).ToString());
            HttpContext.Current.Response.End();
            // 读取文件下载
            //String OutTemplateCSV = Server.MapPath("~/DownLoadFiles/ExcelExport/Common/Log/LogGeneral.csv");
            //StreamWriter StreamWriter = new StreamWriter(OutTemplateCSV, false, System.Text.Encoding.GetEncoding("gb2312"));
            //StreamWriter.WriteLine(this.GetCSVFormatData(dataSet).ToString());
            //StreamWriter.Flush();
            //StreamWriter.Close();
            //Response.Redirect("http://www.cnblogs.com/../DownLoadFiles/ExcelExport/Common/Log/LogGeneral.csv");
        }
        #endregion 
        
*/
    }
}

 

本文转自jirigala_bao 51CTO博客,原文链接:http://blog.51cto.com/jirigala/810910