当前位置:编程学习 > 网站相关 >>

BatchFileProcessing(2)--实现之解析文件

     目前我的产品支持用户上传excel,csv,tab delimited等三种文件格式,鉴于office com组件性能太差,所以我们购买了aspose cells组件。下面我们以批量更新商品库存为例,阐述一下解析文件的实现。

     当我们从数据库读取到尚未处理的用户上传文件后,我们会将它下载到服务器磁盘上,然后开始解析。

  文件级别的检查下包括以下几项:

  (1)文件是否可以正常打开,如果不能正常打开,记录异常并通知客户。

  (2)文件中的关键列是否有缺失,如果有缺失,记录异常并通知客户。

  (3)文件中的列是否有重复,如果有重复,记录异常并通知客户。

  (4)文件中是否有未在模版中未定义的列,如果有未在模版中未定义的列,记录异常并通知客户。

     批量更新商品库存的业务检查下包括以下几项:

(1)商品编号是否提供,如果没有提供,记录异常到数据库。

(2)商品库存是否提供,如果没有提供,使用默认值零;如果提供了,验证是否在有效的范围内,比如0~999999,如果不合法,记录异常到数据库。

用 Aspose Cells组件读取数据:

 

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using Aspose.Cells;
  6
  7 namespace BatchFile.Jobs.FileParsers
  8 {
  9     public class AsposeCellParser : IExcelParser
 10     {
 11         private string m_fileName;
 12         private string m_fileExt;
 13         private FileFormatType m_fileFormatType;
 14         private Workbook m_workbook;
 15         private Worksheet m_worksheet;
 16
 17         public AsposeCellParser(string fileName, string fileExt)
 18         {
 19             m_fileName = fileName;
 20             m_fileExt = fileExt;
 21             if (FileExtType.IsCSV(m_fileExt))
 22             {
 23                 m_fileFormatType = FileFormatType.CSV;
 24             }
 25             else if (FileExtType.IsExcel2007(m_fileExt))
 26             {
 27                 m_fileFormatType = FileFormatType.Excel2007Xlsx;
 28             }
 29             else if (FileExtType.IsExcel2003(m_fileExt))
 30             {
 31                 m_fileFormatType = FileFormatType.Excel2003;
 32             }
 33             else if (FileExtType.IsTabDelimited(m_fileExt))
 34             {
 35                 m_fileFormatType = FileFormatType.TabDelimited;
 36             }
 37             else
 38             {
 39                 throw new NotSupportedException(string.Format("File extension({0}) cannot be supported.", fileExt));
 40             }
 41         }
 42
 43         #region IExcelParser
 44
 45         public string ExcelFile
 46         {
 47             get { return m_fileName; }
 48         }
 49
 50         public int RowCount
 51         {
 52             get { return m_worksheet.Cells.MaxDataRow; }
 53         }
 54
 55         public int ColumnCount
 56         {
 57             get { return m_worksheet.Cells.MaxDataColumn; }
 58         }
 59
 60         public object GetCellValue(int row, int col)
 61         {
 62             return m_worksheet.Cells[row, col].Value;
 63         }
 64
 65         public void ActiveWorksheet(int activeWorksheetIndex)
 66         {
 67             if (activeWorksheetIndex < 0 || activeWorksheetIndex >= m_workbook.Worksheets.Count)
 68             {
 69                 throw new ArgumentOutOfRangeException("Worksheet index is out of range.");
 70             }
 71             m_worksheet = m_workbook.Worksheets[activeWorksheetIndex];
 72         }
 73
 74         public void ActiveWorksheet(string activeWorksheetName)
 75         {
 76             if (string.IsNullOrWhiteSpace(activeWorksheetName))
 77             {
 78                 throw new ArgumentException("Worksheet name cannot be null or empty.");
 79             }
 80             m_worksheet = m_workbook.Worksheets[activeWorksheetName];
 81         }
 82
 83         public void OpenFile()
 84 

补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,