Aspose.cells异步读写操作
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异步读写操作的更多相关文章
- 对Aspose.Cells Excel文件操作的扩展
工作中对Excel操作的需求很是常见,今天其他项目组的同事在进行Excel数据导入时,使用Aspose.Cells Excel 遇到了些问题. 刚好闲来不忙,回想自己用过的Excel文件操作,有NPO ...
- C# Aspose.Cells.dll Excel操作总结
简介 Aspose.Cells是一款功能强大的 Excel 文档处理和转换控件,不依赖 Microsoft Excel 环境,支持所有 Excel 格式类型的操作. 下载 Aspose.Cells.d ...
- boost asio异步读写网络聊天程序client 实例具体解释
boost官方文档中聊天程序实例解说 数据包格式chat_message.hpp <pre name="code" class="cpp">< ...
- boost asio异步读写网络聊天程序客户端 实例详解
boost官方文档中聊天程序实例讲解 数据包格式chat_message.hpp <pre name="code" class="cpp">< ...
- 报表中的Excel操作之Aspose.Cells(Excel模板)
原文:报表中的Excel操作之Aspose.Cells(Excel模板) 本篇中将简单记录下Aspose.Cells这个强大的Excel操作组件.这个组件的强大之处,就不多说,对于我们的报表总是会有导 ...
- 基于 Aspose.Cells与XML导入excel 数据----操作类封装
前言 导入excel数据, 在每个项目中基本上都会遇到,第三方插件或者基于微软office,用的最多的就是npoi,aspose.cells和c#基于office这三种方式,其中各有各的优缺点,在这也 ...
- Aspose.Cells相应操作及下载
Aspose.Cells相应操作 1,上传 1.1 Workbook Workbook workBook = new Workbook(); 属性: 名称 值类型 说明 Colors Color[] ...
- Aspose.Cells.dll操作execl
附件:Aspose.Cells.dll 1.创建execl(不需要服务器或者客户端安装office) public void DCExexl(DataTable dt) { Workbook wb ...
- C# 读写Excel的一些方法,Aspose.Cells.dll
需求:现有2个Excel,一个7000,一个20W,7000在20W是完全存在的.现要分离20W的,拆分成19W3和7000. 条件:两个Excel都有“登录名”,然后用“登录名”去关联2个Excel ...
随机推荐
- XEvent – SQL Server Log文件对磁盘的写操作大小是多少
原文:XEvent – SQL Server Log文件对磁盘的写操作大小是多少 本篇是上一篇SQL Server Log文件对磁盘的写操作大小是多少的续,使用XEvent收集SQL Server D ...
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第四步--地图循环&主角加入动作
说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...
- java编程接口(5) ------ button和button组
这篇文章是由自己的学习笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 了解了布局管理器和Swing事件模型,那么剩下的就是Swing 的各个组件了 ...
- Tomcat 80 端口被占,解决方案
Windows 平台下Tomcat启动不起,显示 SEVERE: Failed to initialize end point associated with ProtocolHandler [&qu ...
- 使用IntelliLock加密授权你的.Net程序
原文:使用IntelliLock加密授权你的.Net程序 转自:http://www.nsoff.com/post/2012/05/23/%E4%BD%BF%E7%94%A8IntelliLock%E ...
- 文档PDF开放
108个大数据文档PDF开放下载 投递人 itwriter 发布于 2015-01-29 13:34 评论(13) 有2251人阅读 原文链接 [收藏] « » 文/36 大数据 总有人问我 ...
- php 常用 小知识点
PHP 邮箱正则表达式代码如下: /^([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*\@([a-z0-9])*(\.([a-z0-9])([-a-z0-9_-])([a-z ...
- C# Winform 界面线程的Invoke死锁,以及Application.DoEvent的问题
1.对于非界面线程来说,Invoke是把一个操作丢到界面线程的队列里,然后阻塞,等到这个操作被界面线程完成后,才继续后续操作.也就是说,Invoke是同步的. 问题来了,如果界面线程此时正在等待这个非 ...
- :link,:visited,:focus,:hover,:active详解
原文::link,:visited,:focus,:hover,:active详解 CSS 又名 层叠样式表,所谓层叠,就是后面的样式会覆盖前面的样式,所以在样式表中,各样式排列的顺序很有讲究. ...
- 【剑指offer】Q32:从1至n整1出现的次数(python)
def q32(n, len): if n < 0: return 0 elif n <= 1: return n total = 0 while n > 0: if n >= ...