博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NPOI利用多任务模式分批写入多个Excel
阅读量:2120 次
发布时间:2019-04-30

本文共 3724 字,大约阅读时间需要 12 分钟。

接上文,这次是利用task多任务同时写入到多个Excel。

Form2.cs

private void btnExport_Click(object sender, EventArgs e)        {                        try            {                txtSql.SafeCall(() =>                {                    txtSql.AppendText("开始处理...\r\n");                });                string sqlCount = Sql.GetRecordSql(GetBusinessType(), "");                recordCount = db.ExecuteScalar(sqlCount);                rowIndex = 0;                string[] sqlWhereArray = Sql.SqlWhereArray;                TaskFactory taskFactory = new TaskFactory();                Task[] tasks = new Task[sqlWhereArray.Length];                for (int k = 0; k < sqlWhereArray.Length; k++)                {                    string sqlWhere = sqlWhereArray[k];                    int sqlIndex = k;                    tasks[sqlIndex] = new Task(Export, sqlIndex);                    tasks[sqlIndex].Start();                }                taskFactory.ContinueWhenAll(tasks, TaskEnded, TaskContinuationOptions.None);            }            catch (Exception ex)            {                MessageBox.Show("发生异常,错误提示:" + ex.Message);            }        }                       private void Export(object state)        {            BusinessType businessType = GetBusinessType();            string[] DateRemarkArray = Sql.DateRemarkArray;            string sql = "";            string sqlWhere = "";            int sqlIndex = (int)state;            DataTable dt = null;            lock (moniter)            {                sqlIndex = (int)state;                sqlWhere = Sql.SqlWhereArray[sqlIndex];                sql = Sql.GetDataSql(businessType, sqlWhere);                dt = db.GetDataSet(sql).Tables[0];            }                        IWorkbook workbook = new XSSFWorkbook();            ISheet sheet = workbook.CreateSheet();            txtSql.SafeCall(() =>            {                txtSql.AppendText("条件" + (sqlIndex + 1).ToString() + ":" + DateRemarkArray[sqlIndex] + "\r\n");            });                                 IRow row0 = sheet.CreateRow(0);                    for (int m = 0; m < dt.Columns.Count; m++)            {                DataColumn dc = dt.Columns[m];                row0.CreateCell(m).SetCellValue(dc.ColumnName);            }            for (int i = 0; i < dt.Rows.Count; i++)            {                System.Threading.Interlocked.Increment(ref rowIndex);                DataRow dr = dt.Rows[i];                IRow row = sheet.CreateRow(i+1);                for (int j = 0; j < dt.Columns.Count; j++)                {                    row.CreateCell(j).SetCellValue(dr[j].ToString());                }                                Label lbl = GetLabel(sqlIndex + 1);                lbl.SafeCall(() =>                {                    if (i == (dt.Rows.Count - 1))                    {                        txtSql.AppendText("条件" + (sqlIndex + 1).ToString() + "完成,行数:" + (i + 1).ToString() + "\r\n");                        lbl.Text = "条件" + (sqlIndex + 1).ToString() + "完成";                    }                    else                    {                        lbl.Text = string.Format("正在导出第{0}个条件,第{1}行", (sqlIndex + 1).ToString(), (i + 1).ToString());                    }                    double x = rowIndex * 1.0 / recordCount * 100;                    lblProgress.Text = string.Format("总行数:{0}, 当前完成总{1}行,百分占比:{2} %", recordCount.ToString(), rowIndex.ToString(), x.ToString("#0.0"));                });            }            string fileName = string.Format("{0}_{1}.xlsx", businessType.ToString(), DateRemarkArray[sqlIndex]);            FileStream outFs = new FileStream(fileName, FileMode.Create);            workbook.Write(outFs);            outFs.Close();        }

转载地址:http://jezrf.baihongyu.com/

你可能感兴趣的文章
《kubernetes权威指南·第四版》第二章:kubernetes安装配置指南
查看>>
Leetcode C++《热题 Hot 100-49》399.除法求值
查看>>
Leetcode C++《热题 Hot 100-51》152. 乘积最大子序列
查看>>
[Kick Start 2020] Round A 1.Allocation
查看>>
Leetcode C++ 《第181场周赛-1》 5364. 按既定顺序创建目标数组
查看>>
Leetcode C++ 《第181场周赛-2》 1390. 四因数
查看>>
阿里云《云原生》公开课笔记 第一章 云原生启蒙
查看>>
阿里云《云原生》公开课笔记 第二章 容器基本概念
查看>>
阿里云《云原生》公开课笔记 第三章 kubernetes核心概念
查看>>
阿里云《云原生》公开课笔记 第四章 理解Pod和容器设计模式
查看>>
阿里云《云原生》公开课笔记 第五章 应用编排与管理
查看>>
阿里云《云原生》公开课笔记 第六章 应用编排与管理:Deployment
查看>>
阿里云《云原生》公开课笔记 第七章 应用编排与管理:Job和DaemonSet
查看>>
阿里云《云原生》公开课笔记 第八章 应用配置管理
查看>>
阿里云《云原生》公开课笔记 第九章 应用存储和持久化数据卷:核心知识
查看>>
linux系统 阿里云源
查看>>
国内外helm源记录
查看>>
牛客网题目1:最大数
查看>>
散落人间知识点记录one
查看>>
Leetcode C++ 随手刷 547.朋友圈
查看>>