且构网

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

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

更新时间:2022-08-30 11:04:28

 我们辛苦录入的数据都希望能有重复利用的价值,一方面这些基础数据需要有数据库级的重复利用,程序级别的重复利用,另一方面还需要直接可以方便的导出倒入的功能比较好,虽然我们自己制作的统计分析功能很强大,但是还是没有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格式快速导出功能代码参考(追求代码追求简洁复用)


代码参考如下:

全部导出:

1privatevoid 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;
6this.ExportExcel(this.grdOrganize, dataTable.DefaultView, @"\Modules\Export\""组织机构.csv");
7        }

导出当前页面:

1privatevoid btnExport_Click(object sender, EventArgs e)
2        {
3// 导出Excel
4this.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>
7privatebool FileExist(string fileName)
8        {
9if (System.IO.File.Exists(fileName))
10            {
11string targetFileName = System.IO.Path.GetFileName(fileName);
12if (MessageBox.Show(AppMessage.Format(AppMessage.MSG0236, targetFileName), AppMessage.MSG0000, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
13                {
14                    System.IO.File.Delete(fileName);
15                }
16else
17                {
18returntrue;
19                }
20            }
21returnfalse;
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>
33publicvoid ExportExcel(DataGridView dataGridView, DataView dataView, string directory, string fileName)
34        {
35// 开始忙了
36this.Cursor = Cursors.WaitCursor;
37string directoryName = BaseSystemInfo.StartupPath + directory;
38if (!Directory.Exists(directoryName))
39            {
40                Directory.CreateDirectory(directoryName);
41            }
42string file = BaseSystemInfo.StartupPath + directory + fileName;
43if (!this.FileExist(file))
44            {
45                BaseExportCSV.ExportCSV(dataGridView, dataView, file);
46                Process.Start(file);
47            }
48// 已经忙完了
49this.Cursor = Cursors.Default;
50        }
51#endregion
52
53publicvoid ExportExcel(DataGridView dataGridView, string directory, string fileName)
54        {
55            ExportExcel(dataGridView, (DataView)(dataGridView.DataSource), directory, fileName);
56        }


相关工具包的代码如下:

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





本文转自 jirigala 51CTO博客,原文链接:http://blog.51cto.com/2347979/1200716,如需转载请自行联系原作者