Winform框架通用导入程序,支持Excel,xls/xlsx格式|C/S开发框架
作者:csframework|C/S框架网  发布日期:2023/02/21 17:56:16

Winform框架通用导入程序,支持Excel,xls/xlsx格式|C/S开发框架

一、功能介绍

CSFramework.GenericImporter (Excel通用导入程序)是CSFrameworkV6旗舰版的通用功能之一,提供Excel两种格式的数据导入。

  • xls : Microsoft Excel 97~2003 Files
  • xlsx: Microsoft Excel 2007~2010 Files

IImporterSource 接口提供扩展,用户可实现导入其他文件或数据库的资料。

xls 文件连接字符串

C# 全选
Provider=Microsoft.ACE.OLEDB.12.0;Data Source={_FileName};Extended Properties='Excel 8.0;HDR=YES;IMEX=1';Mode=ReadWrite;Persist Security Info=False;

xlsx 文件连接字符串

C# 全选
Provider=Microsoft.ACE.OLEDB.12.0;Data Source={_FileName};Extended Properties='Excel 12.0;HDR=YES;IMEX=1';Mode=ReadWrite;Persist Security Info=False;

二、VS解决方案

核心库:CSFramework.GenericImporter

Winform框架通用导入程序,支持Excel,xls/xlsx格式|C/S开发框架

测试程序:Tester

Winform框架通用导入程序,支持Excel,xls/xlsx格式|C/S开发框架

三、开发环境

开发工具:VS2019

开发语言:C#

.NET版本:.NET Framework 4.5+

其他组件:DevExpress 17.2

四、Demo 开发手册

该Demo演示从Excel文件导入客户资料。

Tester 工程项目 引用 CSFramework.GenericImporter.dll

1. 建立数据源表结构模型

C# 全选
 /// <summary>
    /// 数据源表结构
    /// </summary>
    public class CustomerDataSourceModel
    {
        public string 客户编码 { get; set; }
        public string 客户名称 { get; set; }
        public string 英文名 { get; set; }
        public string 联系人 { get; set; }
        public string 电话号码 { get; set; }
        public string 地址 { get; set; }
        public string 开户银行 { get; set; }
        public string 银行账号 { get; set; }
        public string 备注 { get; set; }
    }

对应 Excel文件格式:

Winform框架通用导入程序,支持Excel,xls/xlsx格式|C/S开发框架

2. 实现导入逻辑

定义一个自定类,实现 IImporterTarget 抽象类,编写客户资料相关程序逻辑。

C# 全选
    /// <summary>
    /// 从Excel导入客户资料
    /// </summary>
    public class ImportCustomerFromExcel : IImporterTarget
    {
        bllCustomer _BLL;
        List<tb_Customer> _List = new List<tb_Customer>();
        List<String> _ExistsKeys = new List<string>();

        public ImportCustomerFromExcel()
        {
            _BLL = new bllCustomer();
            _ExistsKeys = _BLL.GetCustomerKeys();

            this.TargetType = typeof(tb_Customer);
            this.SourceType = typeof(CustomerDataSourceModel);
        }

        /// <summary>
        /// 数据源映射关系
        /// </summary>
        /// <returns></returns>
        public override List<FieldMapping> GetMapping()
        {
            List<FieldMapping> list = new List<FieldMapping>();
            list.Add(new FieldMapping("客户编码", nameof(tb_Customer.CustomerCode), typeof(String)));
            list.Add(new FieldMapping("客户名称", nameof(tb_Customer.NativeName), typeof(String)));
            list.Add(new FieldMapping("英文名", nameof(tb_Customer.EnglishName), typeof(String)));
            list.Add(new FieldMapping("联系人", nameof(tb_Customer.ContactPerson), typeof(String)));
            list.Add(new FieldMapping("电话号码", nameof(tb_Customer.Tel), typeof(String)));
            list.Add(new FieldMapping("地址", nameof(tb_Customer.Address1), typeof(String)));
            list.Add(new FieldMapping("开户银行", nameof(tb_Customer.Bank), typeof(String)));
            list.Add(new FieldMapping("银行账号", nameof(tb_Customer.BankAccount), typeof(String)));
            list.Add(new FieldMapping("备注", nameof(tb_Customer.Remark), typeof(String)));
            return list;
        }
//
// 省略其他代码....
//
}

3. 调用Demo

C# 全选
 private void btnImportCustomer_Click(object sender, EventArgs e)
        {
            IImporterTarget target = new ImportCustomerFromExcel();
            frmImportExcel.ExecuteImporter(target, (list) =>
            {
                //显示导入结果
                gridControl1.DataSource = list;
            });
        }

开发者注意事项

开发者注意:

  1. 创建数据源表结构模型,如:CustomerDataSourceModel
  2. 创建目的表结构模型,如:tb_Customer
  3. 实现导入逻辑,继承 IImporterTarget 抽象类
    1. 重写GetMapping方法
    2. 若要检查数据是否重复,需要从BLL层获取数据库存在的键值用于导入时比较
    3. 重写PostImportedData方法
    4. 实现BLL层提交数据方法

程序截图 & 测试报告

1. 打开Excel文件

Winform框架通用导入程序,支持Excel,xls/xlsx格式|C/S开发框架

2. 选择资料表,预览数据

Winform框架通用导入程序,支持Excel,xls/xlsx格式|C/S开发框架

3. 开始导入

Winform框架通用导入程序,支持Excel,xls/xlsx格式|C/S开发框架

4. 导入完成,显示操作报告

Winform框架通用导入程序,支持Excel,xls/xlsx格式|C/S开发框架

5. 模拟导入存在的资料

C# 全选
  public List<string> GetCustomerKeys()
        {
            //
            //从数据库获取现有的客户编码
            //
            var list = new List<string>();
            list.Add("csv6customer"); //模拟数据库存在客户编码
            return list;
        }

Winform框架通用导入程序,支持Excel,xls/xlsx格式|C/S开发框架

DevExpress版本低于v17.x或升级更高版本的用户请注意

打开 CSFramework.GenericImporter项目下Form1,在工具箱搜索 grid,拖放一个GridControl 组件到 界面

Winform框架通用导入程序,支持Excel,xls/xlsx格式|C/S开发框架

此时会自动添加DevExpress引用,删除 v17.2引用即可。

Winform框架通用导入程序,支持Excel,xls/xlsx格式|C/S开发框架

若需要源码请联系作者:C/S框架网/喜鹊软件

Winform框架通用导入程序,支持Excel,xls/xlsx格式|C/S开发框架

C/S框架网|原创精神.创造价值.打造精品


扫一扫加作者微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务
上一篇 下一篇