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 
补充:综合编程 , 其他综合 ,