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

简介:

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

 

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

 

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

 

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

 

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

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

吉日嘎拉

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

 

吉日嘎拉

 

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

吉日嘎拉

 

吉日嘎拉

 

代码参考如下:

全部导出:

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          }

 

相关工具包的代码如下:

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


相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
1月前
|
NoSQL 关系型数据库 MySQL
多人同时导出 Excel 干崩服务器?怎样实现一个简单排队导出功能!
业务诉求:考虑到数据库数据日渐增多,导出会有全量数据的导出,多人同时导出可以会对服务性能造成影响,导出涉及到mysql查询的io操作,还涉及文件输入、输出流的io操作,所以对服务器的性能会影响的比较大;结合以上原因,对导出操作进行排队; 刚开始拿到这个需求,第一时间想到就是需要维护一个FIFO先进先出的队列,给定队列一个固定size,在队列里面的人进行排队进行数据导出,导出完成后立马出队列,下一个排队的人进行操作;还考虑到异步,可能还需要建个文件导出表,主要记录文件的导出情况,文件的存放地址,用户根据文件列表情况下载导出文件。
多人同时导出 Excel 干崩服务器?怎样实现一个简单排队导出功能!
|
1月前
|
存储 Python
用python将csv转excel (.xls和.xlsx)的几种方式
用python将csv转excel (.xls和.xlsx)的几种方式
121 4
|
4天前
|
easyexcel 数据库
公司大佬对excel导入、导出的封装,那叫一个秒啊
封装公司统一使用的组件的主要目标是为了简化开发人员的调用流程,避免各个项目组重复集成和编写不规范的代码。文中提到对阿里EasyExcel进行了二次封装,提供了导入和导出功能,并支持模板的导入和导出。此外,还处理了读取数据与实际保存数据不一致的情况,通过提供自定义转换器来解决。
16 0
|
4天前
|
数据库
开发指南009-从list导出excel文件
从数据库返回一般是对象的列表,平台底层提供了从list转为excel文件的方法
|
4天前
|
前端开发
开发指南007-导出Excel
平台上开发导出Excel比过去的单体架构要复杂些,因为前端和后台不在一个进程空间里。
|
1月前
|
JavaScript
盘点CSV文件在Excel中打开后乱码问题的两种处理方法
盘点CSV文件在Excel中打开后乱码问题的两种处理方法
143 0
|
1月前
|
存储 数据处理 Python
用Python实现Excel中的Vlookup功能
用Python实现Excel中的Vlookup功能
31 0
|
1月前
|
存储 数据可视化 数据处理
利用python将Excel文件拆分为多个CSV
利用python将Excel文件拆分为多个CSV
27 0
|
1月前
|
SQL Java easyexcel
【Java】百万数据excel导出功能如何实现
【Java】百万数据excel导出功能如何实现
126 0
|
2月前
|
Java Linux 数据安全/隐私保护
Java【代码 16】将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享(Gitee源码)aspose转换中文乱码问题处理
【2月更文挑战第3天】Java 将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享(Gitee源码)aspose转换中文乱码问题处理
99 0