接上文NPOI大数据分批写入同个Excel,这次是利用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();
}

NPOI利用多任务模式分批写入多个Excel的更多相关文章

  1. NPOI大数据分批写入同个Excel

    实现过程: 要导出来的数据库数据量很大,一次取出来压力有点大,故分批取出来,导入到同一个Excel. 因为Excel2003版最大行数是65536行,Excel2007开始的版本最大行数是104857 ...

  2. 将如下三组不同类型的数据利用DataInputStream和DataOutputStream写入文件,然后从文件中读出

    三组数据如下: {19.99 , 9.99 , 15.99 , 3.99 , 4.99} {12 , 8 , 13 ,29 ,50} {"Java T-shirt" , " ...

  3. 利用工厂模式实现serviec层和dao层解耦

    利用工厂模式实现serveice和dao层的解耦,这样就可以不用在service层实例化dao层的对象,当dao层代码发生改变的时候(数据库实现发生改变)直接修改配置文件就不用改变service层的代 ...

  4. 利用mvc模式,实现用户的注册

    实现功能:利用mvc模式,实现用户的登陆注册功能 1.程序的框架结构 2个包,bean,以及servlet 3个jsp页面,注册页面,注册成功页面,注册失败页面 mysql驱动 2.编程思想 通过js ...

  5. [Office][C#] NPOI、OpenXML SDK、OpenOffice.org SDK 写入资料到 EXCEL 档案[转]

    原文地址:http://www.dotblogs.com.tw/chou/archive/2010/04/29/14912.aspx 一.簡介 要將資料寫入 EXCEL 檔案有許多的方法,但假如電腦不 ...

  6. C#中创建、打开、读取、写入、保存Excel的一般性代码

    ---转载:http://hi.baidu.com/zhaocbo/item/e840bcf941932d15fe358228 1. Excel对象微软的Excel对象模型包括了128个不同的对象,从 ...

  7. SQLBulkCopy使用实例--读取Excel写入数据库/将 Excel 文件转成 DataTable

    MS SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表可以在不同服务器上). SqlBulkCopy 类允许编写提供类似功能的托管代码解决方 ...

  8. python3爬取”理财大视野”中的股票,并分别写入txt、excel和mysql

    需求:爬取“理财大视野”网站的排名.代码.名称.市净率.市盈率等信息,并分别写入txt.excel和mysql 环境:python3.6.5 网站:http://www.dashiyetouzi.co ...

  9. Python常见问题 - 写入数据到 excel 报 ValueError: invalid literal for int() with base 10 错误

    背景 在上写入数据到excel中,报了以下错误 出现原因 对于写入excel场景下出现该错误的话,很大概率是写入数据的单元格原本的数据格式有问题 解决方法 清理掉单元格的旧数据,然后再写入就可以了

随机推荐

  1. Android横竖屏切换继续播放视频

    只需要重新onSaveInstanceState方法,在其里面记住我们要记录的参数 package com.bawei.day07_videoview; import android.os.Bundl ...

  2. eclispse快捷操作

    1几个最重要的快捷键 代码助手:Ctrl+Space(简体中文操作系统是Alt+/)快速修正:Ctrl+1单词补全:Alt+/打开外部Java文档:Shift+F2 显示搜索对话框:Ctrl+H快速O ...

  3. PHP的一些常用汇总

    1. 使用strcmp()函数[区分大小写] 和strcasecmp()函数按照字节比较.比较结果显示:前和后相同为0,前>后为大于0,前<后为小于0. 2. 格式化字符串:number_ ...

  4. ectouch第八讲 之模板内容修改

    前台:1.前台页面logo代码[ 文件位置:\mobile\themes\default\index.dwt] <div style="text-align: center;paddi ...

  5. AtomicInteger类保证线程安全的用法

    J2SE 5.0提供了一组atomic class来帮助我们简化同步处理.基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增.减.赋值(更新)操作 ...

  6. Prince2的七大原则(5)

    [Prince2科普]Prince2的七大原则(5) 按照惯例我们先来回顾一下,PRINCE2七大原则分别是指:持续的业务验证,经验学习,角色与责任,按阶段管理,例外管理,关注产品,剪裁. 第五个原则 ...

  7. [BIM]STEP标准和EXPRESS语言

    参考:http://blog.sina.com.cn/s/blog_620be62e0100iqyb.html (BIM名词和术语(四)- IFC/STEP/EXPRESS) IFC标准使用形式化的数 ...

  8. JSP 资源与网站

    JS文件说明 1.1 jquery 描述:一个兼容多浏览器的javascript框架,可以操作文档对象.选择DOM元素.制作动画效果.事件处理.使用Ajax以及其他功能. 文件路径:Commonjs/ ...

  9. 周赛-KIDx's Pagination 分类: 比赛 2015-08-02 08:23 7人阅读 评论(0) 收藏

    KIDx's Pagination Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) S ...

  10. I Think I Need a Houseboat 分类: POJ 2015-06-11 17:52 12人阅读 评论(0) 收藏

    I Think I Need a Houseboat Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 92090   Acce ...