假导出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轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
阿里云实时数仓实战 - 用户行为数仓搭建
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求:熟练掌握 SQL 语法熟悉 Linux 命令,对 Hadoop 大数据体系有一定的了解 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
9月前
|
Python
Excel中如何批量重命名工作表与将每个工作表导出到单独Excel文件
本文介绍了如何在Excel中使用VBA批量重命名工作表、根据单元格内容修改颜色,以及将工作表导出为独立文件的方法。同时提供了Python实现导出工作表的代码示例,适用于自动化处理Excel文档。
|
数据可视化 数据处理 Python
使用Pandas实现Excel中的数据透视表功能
本文介绍了如何使用Python的Pandas库实现Excel中的数据透视表功能,包括环境准备、创建模拟销售数据、代码实现及输出等步骤。通过具体示例展示了按地区和销售员汇总销售额的不同方法,如求和、平均值、最大值等,帮助读者掌握Pandas在数据处理上的强大能力。
573 12
|
数据格式 UED
记录一次NPOI库导出Excel遇到的小问题解决方案
【11月更文挑战第16天】本文记录了使用 NPOI 库导出 Excel 过程中遇到的三个主要问题及其解决方案:单元格数据格式错误、日期格式不正确以及合并单元格边框缺失。通过自定义单元格样式、设置数据格式和手动添加边框,有效解决了这些问题,提升了导出文件的质量和用户体验。
1108 3
|
前端开发
实现Excel文件和其他文件导出为压缩包,并导入
实现Excel文件和其他文件导出为压缩包,并导入
336 1
|
前端开发 Java easyexcel
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
1040 8
|
JavaScript 前端开发 数据处理
Vue导出el-table表格为Excel文件的两种方式
Vue导出el-table表格为Excel文件的两种方式
1106 6
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
1090 4
|
Java API Apache
|
9月前
|
Python
如何根据Excel某列数据为依据分成一个新的工作表
在处理Excel数据时,我们常需要根据列值将数据分到不同的工作表或文件中。本文通过Python和VBA两种方法实现该操作:使用Python的`pandas`库按年级拆分为多个文件,再通过VBA宏按班级生成新的工作表,帮助高效整理复杂数据。
|
9月前
|
数据采集 数据可视化 数据挖掘
用 Excel+Power Query 做电商数据分析:从 “每天加班整理数据” 到 “一键生成报表” 的配置教程
在电商运营中,数据是增长的关键驱动力。然而,传统的手工数据处理方式效率低下,耗费大量时间且易出错。本文介绍如何利用 Excel 中的 Power Query 工具,自动化完成电商数据的采集、清洗与分析,大幅提升数据处理效率。通过某美妆电商的实战案例,详细拆解从多平台数据整合到可视化报表生成的全流程,帮助电商从业者摆脱繁琐操作,聚焦业务增长,实现数据驱动的高效运营。
下一篇
开通oss服务