zoukankan      html  css  js  c++  java
  • 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 = 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[]> RowAction
    111         {
    112             get;
    113             set;
    114         }
    115 
    116         /// <summary>
    117         /// 异步不会自动添加DataRow到DataTable,如果需要异步执行的最后结果,请在这个Action把Row添加到DataTable
    118         /// </summary>
    119         public Action<object[]> DataTableRowOpAction
    120         {
    121             get;
    122             set;
    123         }
    124 
    125         public Action<object> CellAction
    126         {
    127             get;
    128             set;
    129         }
    130 
    131         public Action<System.Data.DataTable> DataTableAction
    132         {
    133             get;
    134             set;
    135         }
    136     }
  • 相关阅读:
    jquery的优势
    基于指纹识别技术的超市储物箱设计
    jquery核心
    jquery中的筛选
    红包算法设计
    jquery中trim() 去掉收尾空格
    jquery中效果的创建
    项目缓存
    StringUtils方法全集
    IE8下onclick事件不支持
  • 原文地址:https://www.cnblogs.com/yomho/p/3974331.html
Copyright © 2011-2022 走看看