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 ...
随机推荐
- 前端学习笔记(zepto或jquery)——对li标签的相关操作(五)
对li标签的相关操作——has与find的差异性 demo代码: <ul> <li><p>1</p></li> <li>2< ...
- WebView无法放大缩小解决方式
先看看我们之前所写的代码 1) 加入权限:AndroidManifest.xml中必须使用了许可"android.permission.INTERNET" 2) 使用了一个WebV ...
- [Unity3D]Unity3D游戏开发之Unity与Android交互调用研究
各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.在前一篇文章中,我们研究了Android平台上Unity3D的手势操作并在之前的基础 ...
- Linux中加入用户、删除用户时新手可能遇到的问题
Linux中加入用户.删除用户时新手可能遇到的问题 1.创建新用户后切换到新用户:No directory, logging in with HOME=/ 加入用户 #sudo us ...
- Ubuntu下的用户和权限(二)
五.chown.chgrp命令 从名字就能够猜測他们是干嘛的,可是这两个命令须要root权限. chown命令的格式为:chown user:group file 中间的user : group三项 ...
- Node.js与MongoDB的基本连接示例
Node.js与MongoDB的基本连接示例 前提 已经安装了node.js和MongoDB,本文使用的node.js是v0.12.0,MongoDB是3.0.0. 初始化数据 启动MongoDB服务 ...
- 走进windows编程的世界-----windows进程
Windows进程 1 Windows进程 进程是一个容器,包括了一个应用程序实例的各种资源.Windows多任务的操作系统,因此能够同一时候运行多个进程. 2 Windows进程的 ...
- UIImage分类:返回一个可以拉伸的图片
// 返回一个可拉伸的图片 // UIImage的分类 + (UIImage *)resizedImage:(NSString *)name { UIImage *image = [self imag ...
- 最新HTML BroadcastChannel API引荐
HTML BroadcastChannel API 当前浏览器中只有Firefox38唯一能支持BroadcastChannel API(在编写本文的时间点),而Firefox38官方宣称要到2015 ...
- 快速构建Windows 8风格应用8-贴靠视图
原文:快速构建Windows 8风格应用8-贴靠视图 本篇博文主要介绍如何切换出贴靠视图.关于贴靠视图的设计.关于贴靠视图的应用程序栏和如何实现贴靠视图. 如何切换出贴靠视图 第一步:水平方向全屏视图 ...