Winform使用Aspose.Cells快速导出DataGrid表格数据

1.前言

        在做桌面系统C/S程序的过程中,不免要碰到将数据导出到Excel表格的需求,此时如果表格上的数据量不大,一般都会用office相关的动态库来导出;但是如果数据量很大,用office相关动态库的话速度便会缓慢,这个时候如果用Aspose.Cells.dll提供的相关方法,便可大大加快导出速度。

2.引用动态库

        在NuGet程序包管理器中添加对Aspose.Cells.dll的引用:

3.相关方法代码
        /// <summary>
        /// 数据导出Excel
        /// 新方法,采用Aspose.Cells.dll插件,比平常用office插件更快
        /// </summary>
        /// <param name="dgv"></param>
        /// <param name="title"></param>
        public static void ExportToExcelNew(DataGridView dgv, string title)
        {

            if (dgv is null)
            {
                return;
            }
            #region 路径选择对话框
            // 申明保存对话框      
            var dlg = new SaveFileDialog();
            // 默认文件后缀      
            dlg.DefaultExt = "xlsx";
            // 文件后缀列表      
            dlg.Filter = "导出Excel(*.xls)|*.xlsx";
            // 默然路径是系统当前路径
            dlg.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
            // 文件名
            dlg.FileName = title;
            // 打开保存对话框      
            if (dlg.ShowDialog() == DialogResult.Cancel)
            {
                return;
            }
            // 返回文件路径      
            string fileNameString = dlg.FileName;
            // 验证strFileName是否为空或值无效      
            if (string.IsNullOrEmpty(fileNameString.Trim()))
            {
                return;
            }
            #endregion

            #region 将列表数据转换为DataTable
            DataTable data = new DataTable();

            foreach (DataGridViewColumn columnsItem in dgv.Columns)
            {
                data.Columns.Add(columnsItem.HeaderText, System.Type.GetType("System.String"));
            }
            //
            for (int i = 0; i < dgv.Rows.Count; i++)
            {
                DataRow dr = data.NewRow();

                for (int j = 0; j < data.Columns.Count; j++)
                {
                    dr[j] = dgv.Rows[i].Cells[j].Value;
                }
                data.Rows.Add(dr);
            }
            #endregion

            try
            {
                //Workbook book = new Workbook("E:\\test.xlsx"); //打开工作簿
                Workbook book = new Workbook(); //创建工作簿
                Worksheet sheet = book.Worksheets[0]; //创建工作表
                Cells cells = sheet.Cells; //单元格
                                           //创建样式
                Style style = book.Styles[book.Styles.Add()];
                style.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin; //应用边界线 左边界线  
                style.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; //应用边界线 右边界线  
                style.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin; //应用边界线 上边界线  
                style.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin; //应用边界线 下边界线   
                style.HorizontalAlignment = TextAlignmentType.Center; //单元格内容的水平对齐方式文字居中
                style.Font.Name = "宋体"; //字体
                //style.Font.IsBold = true; //设置粗体
                style.Font.Size = 11; //设置字体大小

                //表格填充数据
                int Colnum = data.Columns.Count;//表格列数 
                int Rownum = data.Rows.Count;//表格行数 
                                             //生成行 列名行 
                for (int i = 0; i < Colnum; i++)
                {
                    cells[0, i].PutValue(data.Columns[i].ColumnName); //添加表头
                    cells[0, i].SetStyle(style); //添加样式
                                                 //cells.SetColumnWidth(i, data.Columns[i].ColumnName.Length * 2 + 1.5); //自定义列宽
                                                 //cells.SetRowHeight(0, 30); //自定义高
                }
                //生成数据行 
                for (int i = 0; i < Rownum; i++)
                {
                    for (int k = 0; k < Colnum; k++)
                    {
                        cells[1 + i, k].PutValue(data.Rows[i][k].ToString()); //添加数据
                        cells[1 + i, k].SetStyle(style); //添加样式
                    }
                }
                sheet.AutoFitColumns(); //自适应宽
                book.Save(fileNameString); //保存
                GC.Collect();
            }
            catch (Exception e)
            {
                Logger.Error("生成excel出错:" + e.Message);
            }
        }
4.方法引用
        private void btnExport_Click(object sender, EventArgs e)
        {
            try
            {
                //这里dgvPrepaymentBalance是一个表格控件
                GlobalFunc.ExportToExcelNew(dgvPrepaymentBalance, "预交金余额明细表");
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
        }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值