首页 > 代码库 > Aspose.cells异步读写操作
Aspose.cells异步读写操作
1 public class AsyncExcel : Excel 2 { 3 static readonly object _objForlock = new object(); 4 //public List<IAsyncResult> ReadAsyncResults 5 //{ 6 // get; 7 // set; 8 //} 9 10 //public List<IAsyncResult> WriteAsyncResults 11 //{ 12 // get; 13 // set; 14 //} 15 public override void Read() 16 { 17 if (string.IsNullOrEmpty(this.Path) || !System.IO.File.Exists(this.Path)) 18 { 19 throw new Exception(string.Format("文件“{0}”为空或不存在。", this.Path)); 20 } 21 //ReadAsyncResults = new List<IAsyncResult>(); 22 Workbook wb = new Workbook(); 23 wb.Open(this.Path); 24 MemoryDataTables = new System.Data.DataTable[wb.Worksheets.Count]; 25 object[] rowArrData; 26 for (var i = 0; i < wb.Worksheets.Count; i++) 27 { 28 MemoryDataTables[i] = new System.Data.DataTable(); 29 MemoryDataTables[i].TableName = wb.Worksheets[i].Name; 30 for (var j = 0; j < wb.Worksheets[i].Cells.MaxColumn; j++) 31 { 32 //row = MemoryDataTables[i].NewRow(); 33 //MemoryDataTables[i].Rows.Add(row); 34 rowArrData = http://www.mamicode.com/new object[wb.Worksheets[i].Cells.MaxColumn]; 35 for (var k = 0; k < wb.Worksheets[i].Cells.MaxColumn; k++) 36 { 37 rowArrData[k] = wb.Worksheets[i].Cells[j, k].Value; 38 if (CellAction != null) 39 { 40 CellAction.BeginInvoke(rowArrData[k], null, null); 41 } 42 } 43 if (RowAction != null) 44 { 45 RowAction.BeginInvoke(rowArrData, null, null); 46 } 47 if (DataTableRowOpAction != null) 48 { 49 DataTableRowOpAction.BeginInvoke(rowArrData, null, null); 50 } 51 52 } 53 if (DataTableAction != null) 54 { 55 DataTableAction.BeginInvoke(MemoryDataTables[i], null, null); 56 } 57 } 58 wb = null; 59 } 60 61 62 public override void Write() 63 { 64 if (string.IsNullOrEmpty(this.Path)) 65 { 66 throw new Exception(string.Format("保存路径“{0}”为空。", this.Path)); 67 } 68 if (MemoryDataTables == null || MemoryDataTables.Length <= 0) 69 { 70 throw new Exception("没有数据写入。"); 71 } 72 //WriteAsyncResults = new List<IAsyncResult>(); 73 Workbook wb = new Workbook(); 74 for (var i = 0; i < MemoryDataTables.Length; i++) 75 { 76 wb.Worksheets.Add(MemoryDataTables[i].TableName); 77 wb.Worksheets[i].Cells.ImportDataRow(MemoryDataTables[i].Rows[0], 0, wb.Worksheets[i].Cells.MinColumn); 78 for (var j = 0; j < MemoryDataTables[i].Rows.Count; j++) 79 { 80 for (var k = 0; k < MemoryDataTables[i].Columns.Count; k++) 81 { 82 wb.Worksheets[i].Cells[j + 1, k].PutValue(MemoryDataTables[i].Rows[j][k]); 83 if (CellAction != null) 84 { 85 CellAction.BeginInvoke(wb.Worksheets[i].Cells[j + 1, k], null, null); 86 } 87 } 88 if (RowAction != null) 89 { 90 RowAction.BeginInvoke(MemoryDataTables[i].Rows[j].ItemArray, null, null); 91 } 92 if (DataTableRowOpAction != null) 93 { 94 DataTableRowOpAction.BeginInvoke(MemoryDataTables[i].Rows[j].ItemArray, null, null); 95 } 96 } 97 if (DataTableAction != null) 98 { 99 DataTableAction.BeginInvoke(MemoryDataTables[i], null, null);100 }101 }102 if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(this.Path)))103 {104 System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(this.Path));105 }106 wb.Save(System.IO.Path.GetFullPath(this.Path));107 }108 109 110 public Action<object[]> RowAction111 {112 get;113 set;114 }115 116 /// <summary>117 /// 异步不会自动添加DataRow到DataTable,如果需要异步执行的最后结果,请在这个Action把Row添加到DataTable118 /// </summary>119 public Action<object[]> DataTableRowOpAction120 {121 get;122 set;123 }124 125 public Action<object> CellAction126 {127 get;128 set;129 }130 131 public Action<System.Data.DataTable> DataTableAction132 {133 get;134 set;135 }136 }
Aspose.cells异步读写操作
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。