• 如何批量从Excel文件中导入数据到数据库(一)


    设计系统不单单要考虑到录入界面,对哪些用户已经保存的数据文件(基本上都是Excel文件)难道需要用户再次将已有的数据进行录入吗?答案肯定是:No,一个好的设计和编码人员再设计系统和编码时,更多的需要考虑到界面友好,用户操作简单和设计合理,能更多的从用户的角度来分析设计系统。

    下面来说说实际工作中遇到了一些问题,我们需要做如何的处理呢?

    用户需求形成无非来源对客户的需求和现有文档的资料,将用户现有的文档变成要操作的界面。对于已有数据我们更倾向于用批量导入到数据库中,举个简单例子:

    以医院病人为例,病人有如下信息,如何将下面的文档中内容导入数据库,需要哪些步骤来完成:

    1.创建病人信息对象Patient,该对象中包含属性如下:ID(序号)、Name(姓名)、Sex(性别)、Age(年龄) and PatintID.

    注:用BirthDay(DateTime)替换Age更为合理,这里仅为了说明如何从文档中读取数据,就简单用Age属性。

     /// <summary>
        /// 病人基本信息对象
        /// </summary>
        public class Patient
        {
            /// <summary>
            /// 序号
            /// </summary>
            public int ID { get; set;}
            /// <summary>
            /// 姓名
            /// </summary>
            public string Name { get; set;}
            /// <summary>
            /// 性别
            /// </summary>
            public string Sex { get; set;}
            /// <summary>
            /// 年龄
            /// </summary>
            public int Age { get; set;}
            /// <summary>
            /// 病人就诊卡号
            /// </summary>
            public string PatintID { get; set;}        
        }
    View Code

    2.用Acey.ExcelX组件进行读取文件。方法如下:

    在用Acey.ExcelX组件前,需要加入Acey.ExcelX组件引用,加到命名空间中。

    using Acey.ExcelX;

     /// <summary>
            /// 从指定的excel文档中获取Patient对象集合。
            /// </summary>
            /// <param name="fileName">指定的excel文档</param>
            /// <returns></returns>
            public static List<Patient> GetPatientListFromExcel(string fileName)
            {
                //创建Patient对象集合。
                List<Patient> list = new List<Patient>();
                //创建Workbook对象通过打开指定的Excel文档。
                IWorkbook workbook = ExcelxApplication.Open(fileName);
                //获取以0为基数的Worksheet对象。
                IWorksheet worksheet = workbook.Worksheets[0];
                //获取工作表中最大数据行。
                int maxRow = worksheet.MaxDataRow;
                //获取工作表中最大数据列。
                int maxCol = worksheet.MaxDataColumn;
                IRange range = worksheet.Cells.CreateRange(0, 0, maxRow, maxCol);
                DataTable table = range.ExportDataTable();
    
                for (int row = 0; row <= maxRow; row++)
                {
                    Patient patient = new Patient();
                    for (int col = 0; col <= maxCol; col++)
                    {
                        ICell cell = worksheet.Cells[row, col];
                        switch (col)
                        {
                            case 0://序号
                                patient.ID = ObjectToInt(cell.Value);
                                break;
                            case 1://姓名
                                patient.Name = ObjectToString(cell.Value);
                                break;
                            case 2://性别
                                patient.Age = ObjectToInt(cell.Value);
                                break;
                            case 3://病人就诊号
                                patient.PatintID = ObjectToString(cell.Value);
                                break;
                        }
                    }
                    list.Add(patient);
                }
                return list;
            }
            
            /// <summary>
            /// 将Obj转换为Int类型值。
            /// </summary>
            /// <param name="obj">Obj对象。</param>
            /// <returns>返回Int类型值。</returns>
            public static int ObjectToInt(object obj)
            {
                if (obj == null) return 0;
                int value;
                int.TryParse(obj.ToString(), out value);
                return value;
            }
    
            /// <summary>
            /// 将Obj转换为String类型的值
            /// </summary>
            /// <param name="obj">Obj对象。</param>
            /// <returns>返回String类型值。</returns>
            public static string ObjectToString(object obj)
            {
                if (obj == null) return string.Empty;
                return obj.ToString();
            }
    View Code

    在这里为什么需要 patient.Name = ObjectToString(cell.Value);而不是patient.Name= cell.Value.ToString(); 如果读取文档中该单元格是空单元格,那么object obj =cell.Value;返回值obj为null,如果你直接换为ToString();就会引起空异常,为了代码严谨行还是建议用ObjectToString方式进行转换。

     3.将对象列表的信息插入到数据库中。

     1  /// <summary>
     2         /// 插入Patient对象信息到数据库中
     3         /// </summary>
     4         /// <param name="list"></param>
     5         public void Insert(List<Patient> list)
     6         {
     7             foreach (Patient patient in list)
     8             {
     9                 string strsql = "Insert into ...";
    10                 //执行插入操作....
    11             }
    12         }
    View Code


    批量导入指定文档数据不单单解决了用户再次录入数据的工作量,也体现了设计的合理性,更系统变得更人性化,这样设计出来的系统,客户能不爱上它吗?

    更多信息请访问Aceyoffice网站:http://www.aceyoffice.com/

  • 相关阅读:
    通过WCF引用ListData.svc查询,更新数据
    SharePoint2010 BCS搜索结果的标题
    多个Finder方法的外部内容类型
    SharePoint 2010 中的BCS身份验证模式
    使用Visual Studio工作流发布SharePoint网页
    PerformancePoint Services故障排除
    使用SharePoint 2010模式对话框
    在自定义字段类型的CAML中使用AJAX jQuery
    扩展Visual Studio 2010服务器资源管理器中的SharePoint结点
    BCS配置文件页、爬网与搜索
  • 原文地址:https://www.cnblogs.com/happyfish78/p/3313662.html
Copyright © 2020-2023  润新知