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. linux_vim_最佳快捷键

    如何使用vi文本编辑器     vi由比尔·乔伊(Bill Joy)撰写,所有UNIX like均默认安装此文本编辑器.详细简介请点击维基中文. 1.首先复制一个文件到/tmp目录(本例中为复制根目录 ...

  2. Zepto Code Rush 2014——Dungeons and Candies

    题目链接 题意: k个点,每一个点都是一个n * m的char型矩阵.对与每一个点,权值为n * m或者找到一个之前的点,取两个矩阵相应位置不同的字符个数乘以w.找到一个序列,使得全部点的权值和最小 ...

  3. Ajax得知(两)—— 一个简单的Ajax示例

    通过部分博客认识Ajax之后,我们通过一个简单的实例来消化消化理论知识,一睹Ajax的庐山真面目. 1.实例功能: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZ ...

  4. 选择29部分有用jQuery应用程序插件(免费点数下载)

    免积分下载:http://download.csdn.net/detail/yangwei19680827/7238711 原文地址:http://www.cnblogs.com/sxwgf/p/36 ...

  5. UVa 11121 - Base -2

    题目:计算以-2为基数的数的表示. 分析:数论.写出不同位数能表示的数字区间就能够找到规律. 长度为1:[1,1]: 长度为2:[-2,-1]: 长度为3:[2,5]: 观察发现,区间长度增长为1,2 ...

  6. jQuery UI dialog 參数说明

    前段时间碰到个问题 jquery UI dialog弹出层 弹出多个层是 比方弹出两个层A和B  B层假设显示的数据表格太大,伸到了A层的外面,那伸到A层之外的部分就看不到了,由于B层是在A层上弹出的 ...

  7. 当今最流行的Node.js应用开发框架简介

    快速开发而又容易扩展,高性能且鲁棒性强.Node.js的出现让所有网络应用开发者的这些梦想成为现实.但是,有如其他新的开发语言技术一样,从头开始使用Node.js的最基本功能来编写代码构建应用是一个非 ...

  8. C# TextBox实现全选

    A. 设置全局变量: 1.定义了个全局变量放本次点击的textbox的名字,默认为空. 2.textbox的Enter事件里SelectAll()一下 3.Click事件里判断全局变量是否是该text ...

  9. [译]Java 设计模式 之模板方法

    (文章翻译自Java Design Pattern: Template Method) 模板方法设计模式定义了归档特定操作的工作流.它允许子类去修改特定的步奏而不用改变工作流的结构. 下面的例子表示模 ...

  10. javascript 10进制和64进制的转换

    原文:javascript 10进制和64进制的转换 function string10to64(number) { var chars = '0123456789abcdefghigklmnopqr ...