文档章节

C#一个可导出大数据到excel 的封装方法

foming
 foming
发布于 2016/08/02 11:53
字数 308
阅读 47
收藏 1

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Windows.Forms; using Microsoft.Office.Interop.Excel; using System.IO; using System.Web; namespace GetDatascoreTable { public class perferctExcel {

    public static void DataGridViewToExcel(System.Data.DataTable dt, string fileName,ProgressBar po)   
{
    long totalcount = dt.Rows.Count;
   //将进度条控件显示
    po.Maximum = (int)totalcount;//设置进度条控件的最大值
    long rowRead = 0;
    float percent = 0;
    string saveFileName = "";
    SaveFileDialog saveDialog = new SaveFileDialog();
    saveDialog.DefaultExt = "xls";
    saveDialog.Filter = "Xls文件|*.xls";
    saveDialog.FileName = fileName;
    saveDialog.ShowDialog();
    saveFileName = saveDialog.FileName;
    if (saveFileName.IndexOf(":") < 0) return; 
    string path = "";
    po.Visible = true;
    Microsoft.Office.Interop.Excel.Application objExcel = null;
    Microsoft.Office.Interop.Excel.Workbook objWorkbook = null;
    Microsoft.Office.Interop.Excel.Worksheet objsheet = null;
    object missing = System.Reflection.Missing.Value;
    try
    {
        objExcel = new Microsoft.Office.Interop.Excel.Application();
        objWorkbook = objExcel.Workbooks.Add(missing);
        objsheet = (Microsoft.Office.Interop.Excel.Worksheet)objWorkbook.ActiveSheet;
        objExcel.Visible = false;
        int rowCount = dt.Rows.Count;
        int columnCount = dt.Columns.Count;
        string[,] datas = new string[rowCount + 1, columnCount];
        for (int i = 0; i < columnCount; i++)
        {
            datas[0, i] = dt.Columns[i].ColumnName.Trim();
        }
        for (int row = 0; row < rowCount; row++)
        {
            for (int col = 0; col < columnCount; col++)
            {

                try
                {
                    datas[row + 1, col] = dt.Rows[row][col].ToString().Trim();
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message.ToString());
                }
               //进度条控件需要用百分号表示进度时,使用该行代码

               // po.Value = (int)(rowRead);//设置进度条控件的当前值
                
            }
            rowRead++;
            percent = ((float)(100 * rowRead)) / totalcount;
            po.Value = (int)(rowRead);
        }
        int exportRowCount = rowCount + 1;

        int count = dt.Columns.Count;
        Range range = objsheet.Range[objsheet.Cells[1, 1], objsheet.Cells[rowCount + 1, columnCount]];
        
        range.Value = datas;
        objsheet.Columns.EntireColumn.AutoFit();               
     

        path = saveFileName;            

        objWorkbook.SaveAs(path, missing, missing, missing, missing, missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, missing, missing, missing, missing, missing);
        GC.Collect();
        MessageBox.Show("文件导出完成");
        po.Visible = false;
    }
    catch (Exception error)
    {
        throw new Exception(error.Message.ToString());

    }
    finally
    {

        if (objWorkbook != null) objWorkbook.Close(missing, missing, missing);
        if (objExcel.Workbooks != null) objExcel.Workbooks.Close();
        if (objExcel != null) objExcel.Quit();
        objsheet = null;
        objWorkbook = null;
        objExcel = null;
    }

}

  
}

}

© 著作权归作者所有

foming
粉丝 3
博文 1
码字总数 308
作品 0
孝感
程序员
私信 提问
C#工具:CSV文件转换帮助类

CSV是逗号分隔值格式的文件,其文件以纯文本形式存储表格数据(数字和文本)。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串...

刘元蛟
03/29
0
0
【转载】 C#工具类:Csv文件转换类

CSV是逗号分隔值格式的文件,其文件以纯文本形式存储表格数据(数字和文本)。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串...

江湖逍遥
03/13
0
0
Excel组件Spire.XLS 教程:将Excel导出到XML和XML导入Excel

Spire.XLS for .NET是一个专业的.NET Excel组件,通过Spire.XLS for .NET我们能够将Excel快速导出到Office Open XML,或者仅仅通过三个步骤将Office Open XML导入Excel。 导出/导入功能如下所...

可乐瓶的小辣椒
2017/11/02
0
0
web报表开发技术专题五:Excel的阴影

自从 n 年前 Excel 击败 Lotus ,独霸电子表格软件市场以来。所有的表格类软件都不能不充分考虑 Excel ,寻找 Excel 照顾不到的功能点。所有的表格类软件都要被迫考虑和 Excel 兼容,能够导入...

长平狐
2012/10/11
172
0
Excel解析与数据生成(支持JXL,POI)

最近项目中需要用到Excel解析与生成Excel,但现有系统中没有进行解析工具封装于是便封装一个Excel工具包,支持JXL工具包与POI工具包解析与生成数据,POI支持2003与2007。 Excel解析目前网上有...

皮蛋猫
2013/02/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java中print、printf、println的区别

printf主要是继承了C语言的printf的一些特性,可以进行格式化输出 print就是一般的标准输出,但是不换行 println和print基本没什么差别,就是最后会换行

hellation_
25分钟前
0
0
spring在静态类中注入bean的的解释

@Componentpublic class ModelMapper {@AutoWiredprivate static AssignmentManager assignmentManager;public static void add(){a+b;}} 静态方法是属于类的,普通方法才属于...

无知的小狼
25分钟前
2
0
分而治之-归并排序

如果有1个数组,数组的左半部分和右半部分都已经排好序,如何将该数组合成1个有序的数组? 开辟1个同样大小的临时空间辅助我们完成归并过程,如下图 k:表示归并过程中,当前需要替换的原数组...

万山红遍
40分钟前
2
0
Linux修改时区的正确方法【修改时间,需要修改软连接,靠谱】

CentOS和Ubuntu的时区文件是/etc/localtime,但是在CentOS7以后localtime以及变成了一个链接文件 [root@centos7 ~]# ll /etc/localtime lrwxrwxrwx 1 root root 33 Oct 12 11:01 /etc/loca......

Airship
今天
1
0
《Netkiller Spring Cloud 手札》之 Master / Slave 主从数据库数据源配置

5.19.1. Master / Slave 主从数据库数据源配置 5.19.1.1. application.properties spring.datasource.master.driverClassName = com.mysql.cj.jdbc.Driverspring.datasource.master.url=j......

netkiller-
今天
50
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部