public class AsyncExcel : Excel
{
static readonly object _objForlock = new object();
//public List<IAsyncResult> ReadAsyncResults
//{
// get;
// set;
//} //public List<IAsyncResult> WriteAsyncResults
//{
// get;
// set;
//}
public override void Read()
{
if (string.IsNullOrEmpty(this.Path) || !System.IO.File.Exists(this.Path))
{
throw new Exception(string.Format("文件“{0}”为空或不存在。", this.Path));
}
//ReadAsyncResults = new List<IAsyncResult>();
Workbook wb = new Workbook();
wb.Open(this.Path);
MemoryDataTables = new System.Data.DataTable[wb.Worksheets.Count];
object[] rowArrData;
for (var i = ; i < wb.Worksheets.Count; i++)
{
MemoryDataTables[i] = new System.Data.DataTable();
MemoryDataTables[i].TableName = wb.Worksheets[i].Name;
for (var j = ; j < wb.Worksheets[i].Cells.MaxColumn; j++)
{
//row = MemoryDataTables[i].NewRow();
//MemoryDataTables[i].Rows.Add(row);
rowArrData = new object[wb.Worksheets[i].Cells.MaxColumn];
for (var k = ; k < wb.Worksheets[i].Cells.MaxColumn; k++)
{
rowArrData[k] = wb.Worksheets[i].Cells[j, k].Value;
if (CellAction != null)
{
CellAction.BeginInvoke(rowArrData[k], null, null);
}
}
if (RowAction != null)
{
RowAction.BeginInvoke(rowArrData, null, null);
}
if (DataTableRowOpAction != null)
{
DataTableRowOpAction.BeginInvoke(rowArrData, null, null);
} }
if (DataTableAction != null)
{
DataTableAction.BeginInvoke(MemoryDataTables[i], null, null);
}
}
wb = null;
} public override void Write()
{
if (string.IsNullOrEmpty(this.Path))
{
throw new Exception(string.Format("保存路径“{0}”为空。", this.Path));
}
if (MemoryDataTables == null || MemoryDataTables.Length <= )
{
throw new Exception("没有数据写入。");
}
//WriteAsyncResults = new List<IAsyncResult>();
Workbook wb = new Workbook();
for (var i = ; i < MemoryDataTables.Length; i++)
{
wb.Worksheets.Add(MemoryDataTables[i].TableName);
wb.Worksheets[i].Cells.ImportDataRow(MemoryDataTables[i].Rows[], , wb.Worksheets[i].Cells.MinColumn);
for (var j = ; j < MemoryDataTables[i].Rows.Count; j++)
{
for (var k = ; k < MemoryDataTables[i].Columns.Count; k++)
{
wb.Worksheets[i].Cells[j + , k].PutValue(MemoryDataTables[i].Rows[j][k]);
if (CellAction != null)
{
CellAction.BeginInvoke(wb.Worksheets[i].Cells[j + , k], null, null);
}
}
if (RowAction != null)
{
RowAction.BeginInvoke(MemoryDataTables[i].Rows[j].ItemArray, null, null);
}
if (DataTableRowOpAction != null)
{
DataTableRowOpAction.BeginInvoke(MemoryDataTables[i].Rows[j].ItemArray, null, null);
}
}
if (DataTableAction != null)
{
DataTableAction.BeginInvoke(MemoryDataTables[i], null, null);
}
}
if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(this.Path)))
{
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(this.Path));
}
wb.Save(System.IO.Path.GetFullPath(this.Path));
} public Action<object[]> RowAction
{
get;
set;
} /// <summary>
/// 异步不会自动添加DataRow到DataTable,如果需要异步执行的最后结果,请在这个Action把Row添加到DataTable
/// </summary>
public Action<object[]> DataTableRowOpAction
{
get;
set;
} public Action<object> CellAction
{
get;
set;
} public Action<System.Data.DataTable> DataTableAction
{
get;
set;
}
}

Aspose.cells异步读写操作的更多相关文章

  1. 对Aspose.Cells Excel文件操作的扩展

    工作中对Excel操作的需求很是常见,今天其他项目组的同事在进行Excel数据导入时,使用Aspose.Cells Excel 遇到了些问题. 刚好闲来不忙,回想自己用过的Excel文件操作,有NPO ...

  2. C# Aspose.Cells.dll Excel操作总结

    简介 Aspose.Cells是一款功能强大的 Excel 文档处理和转换控件,不依赖 Microsoft Excel 环境,支持所有 Excel 格式类型的操作. 下载 Aspose.Cells.d ...

  3. boost asio异步读写网络聊天程序client 实例具体解释

    boost官方文档中聊天程序实例解说 数据包格式chat_message.hpp <pre name="code" class="cpp">< ...

  4. boost asio异步读写网络聊天程序客户端 实例详解

    boost官方文档中聊天程序实例讲解 数据包格式chat_message.hpp <pre name="code" class="cpp">< ...

  5. 报表中的Excel操作之Aspose.Cells(Excel模板)

    原文:报表中的Excel操作之Aspose.Cells(Excel模板) 本篇中将简单记录下Aspose.Cells这个强大的Excel操作组件.这个组件的强大之处,就不多说,对于我们的报表总是会有导 ...

  6. 基于 Aspose.Cells与XML导入excel 数据----操作类封装

    前言 导入excel数据, 在每个项目中基本上都会遇到,第三方插件或者基于微软office,用的最多的就是npoi,aspose.cells和c#基于office这三种方式,其中各有各的优缺点,在这也 ...

  7. Aspose.Cells相应操作及下载

    Aspose.Cells相应操作 1,上传 1.1 Workbook Workbook workBook = new Workbook(); 属性: 名称 值类型 说明 Colors Color[] ...

  8. Aspose.Cells.dll操作execl

    附件:Aspose.Cells.dll 1.创建execl(不需要服务器或者客户端安装office) public void DCExexl(DataTable dt) {  Workbook wb ...

  9. C# 读写Excel的一些方法,Aspose.Cells.dll

    需求:现有2个Excel,一个7000,一个20W,7000在20W是完全存在的.现要分离20W的,拆分成19W3和7000. 条件:两个Excel都有“登录名”,然后用“登录名”去关联2个Excel ...

随机推荐

  1. Hadoop上传文件的报错

    baidu了很多,都说防火墙,datanode没有正常启动的问题,可是检查了都是正常,后来还是在老外的网站上找到了解决的方法 修改了/etc/security/limits.conf文件,上传成功 这 ...

  2. 【Java编码准则】の #12不要使用不安全或者强度弱的加密算法

    安全性要求高的应用程序必须避免使用不安全的或者强度弱的加密算法,现代计算机的计算能力使得攻击者通过暴力破解能够攻破强度弱的算法.比如,数据加密标准算法DES是极度不安全的,使用类似EFF(Electr ...

  3. 蜗牛—Hibernate之初识配置

    下载Hibernate的jar包 把下面jar文件考到项目lib下 然后在myeclipse中打开database的view视图创建一个新的数据库连接 接下来,配置连接,须要导入ORACLE的jar包 ...

  4. c# WebBrowser开发参考资料

    原文:c# WebBrowser开发参考资料 c# WebBrowser开发参考资料,所有资料的采集均来自网上 话说有了WebBrowser类,终于不用自己手动封装SHDocVw的AxWebBrows ...

  5. JDBC连接池的简单实现

    首先解释一下,我在做自己android发育.java web这是我的弱点,就在最近,京东云免费,因此,要折腾几.有一点经验,特别是作为共享. 假设内容的文章是错,还请高手指正. 我在这里web结束,需 ...

  6. angularJS之使用指令封装DOM操作

    angularJS之使用指令封装DOM操作 创建指令 指令也是一种服务,只是这种服务的定义有几个特殊要求: 必须使用模块的directive()方法注册服务 必须以对象工厂/factory()方法定义 ...

  7. 被FusionCharts V3.4抛弃的东西

    从FusionCharts Suite XT V3.4開始,FusionCharts产品家族放弃了Flash,发展成为一个纯JavaScript的图表组件.前面我们介绍了怎样升级到V3.4,接下来让我 ...

  8. Fckeditor用法

    试Fckeditor版本号:2.6.3 眼下Fckeditor仅仅能用于基于ie内核的浏览器,假设要使用于chrome等浏览器,请使用ckeditor. 详细用法: 1.将解压后的fckeditor整 ...

  9. ASP.Net MVC请求处理流程

    ASP.Net MVC请求处理流程 好听的歌 我一直觉得看一篇文章再听一首好听的歌,真是种享受.于是,我在这里嵌入一首好听的歌,当然你觉得不想听的话可以点击停止,歌曲 from 王菲 <梦中人& ...

  10. oracle 数据库技术支持生命周期表

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl4b3Jh/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...