Winform框架通用导入程序,支持Excel,xls/xlsx格式
目录
一、功能介绍
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
测试程序:Tester
三、开发环境
开发工具: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文件格式:
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;
});
}
开发者注意事项
开发者注意:
- 创建数据源表结构模型,如:CustomerDataSourceModel
- 创建目的表结构模型,如:tb_Customer
- 实现导入逻辑,继承 IImporterTarget 抽象类
- 重写GetMapping方法
- 若要检查数据是否重复,需要从BLL层获取数据库存在的键值用于导入时比较
- 重写PostImportedData方法
- 实现BLL层提交数据方法
程序截图 & 测试报告
1. 打开Excel文件
2. 选择资料表,预览数据
3. 开始导入
4. 导入完成,显示操作报告
5. 模拟导入存在的资料
C# 全选
public List<string> GetCustomerKeys()
{
//
//从数据库获取现有的客户编码
//
var list = new List<string>();
list.Add("csv6customer"); //模拟数据库存在客户编码
return list;
}
DevExpress版本低于v17.x或升级更高版本的用户请注意
打开 CSFramework.GenericImporter项目下Form1,在工具箱搜索 grid,拖放一个GridControl 组件到 界面
此时会自动添加DevExpress引用,删除 v17.2引用即可。
若需要源码请联系作者:C/S框架网/喜鹊软件
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网