CSFrameworkV6旗舰版 - 导入导出Excel文件数据开发教程
CSFrameworkV6旗舰版 - 导入导出Excel文件数据开发教程
目录
一、前言
本文主要讲解CSFrameworkV6导入及导出Excel文件的设计思路及开发流程。
二、设计思路
主要包含【导出数据】及【导入数据】
- 导出数据,导出Excel模板文件,以及导出的Excel模板文件包含主数据。
- 导入数据,将模板文件的数据导入到数据库。
Excel模板文件参考
Excel模板对应的实体模型
C# 全选
/// <summary>
/// Excel文件的数据模型
/// </summary>
public class ImportLanguageData_ExcelModel
{
public string 对象ID { get; set; }
public string 对象类型 { get; set; }
public string 来源语种 { get; set; }
public string 来源语言内容 { get; set; }
public string 目标语种 { get; set; }
public string 目标语言内容 { get; set; }
}
临时数据模型(中间数据)
在执行导入数据过程中,首先将Excel的数据导入到中间数据,然后提交中间数据到服务端,最后DAL层处理中间数据并提交到数据库。
C# 全选
/// <summary>
/// 临时数据模型,将Excel数据模型转换后存放的临时数据
/// </summary>
public class ImportLanguageData_DataModel
{
public string ObjectID { get; set; }
public string ObjectType { get; set; }
public string SourceLanType { get; set; }
public string TargetLanType { get; set; }
public string SourceLanData { get; set; }
public string TargetLanData { get; set; }
//
//这里可增加其他属性,用于存储转换后的临时数据,或对应实体模型的字段。
//
}
三、开发流程
初始化按钮
重写 InitButtons 方法,增加【导出模版文件】【导入模版数据】两个按钮。
C# 全选
/// <summary>
/// 初始化界面按钮
/// </summary>
public override void InitButtons()
{
base.InitButtons();
if (this.ButtonAuthorized(ButtonAuthority.ADD))
{
var btnExportFile = this.ToolbarRegister.CreateButton(ButtonNameList.btnExportFile,
LanLib.Get("导出模版文件"), ToolBarGroup.数据操作, Globals.LoadBitmap("32_excel_template.png"), new Size(57, 28), false, true,
DoExportTemplate);
var btnImportFile = this.ToolbarRegister.CreateButton(ButtonNameList.btnImportFile,
LanLib.Get("导入模版数据"), ToolBarGroup.数据操作, Globals.LoadBitmap("32_excel_import.png"), new Size(57, 28), false, true,
DoImportExcelData);
//添加子按钮
var btnOwner = _buttons.GetButtonByName(ButtonNameList.btnExportDataDict);//父级按钮:导入/导出按钮
btnOwner.AddSubButton(btnExportFile);
btnOwner.AddSubButton(btnImportFile);
}
}
导出模板文件按钮事件:DoExportTemplate
方式1:直接另存为模板文件(不含数据)
该方式用于直接导入Excel内所有数据。
C# 全选
public virtual void DoExportTemplate(IButtonInfo sender)
{
var file = Path.Combine(Globals.ApplicationPath, @"excel_templates\语言资料模板.xlsx");
if (File.Exists(file))
{
SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "Excel文件|*.xlsx";
dlg.FileName = DateTime.Today.ToString("yyyyMMdd") + " - 语言资料模板.xlsx";
if (dlg.ShowDialog() == DialogResult.OK)
{
File.Copy(file, dlg.FileName, true);
if (File.Exists(dlg.FileName))
Msg.ShowInformation("导出模版文件成功!");
else
Msg.Warning("导出失败!");
}
}
else
{
Msg.Warning("模版文件丢失(语言资料模板.xlsx),请联系管理员!");
}
}
方式2:导出模板文件(包含数据)
该方式用于提供参考数据给用户填写Excel文件内容。比如本文案例导出【中文简体】的语言内容作为参考数据,用户对照翻译为【英文】作为目标语言数据。
代码参考:frmLanguageData的 DoExportTemplate 方法。
导入模版数据按钮事件:DoImportExcelData
主要逻辑
- 设计数据导入类:ImportLanguageDataFromExcel
- 使用 frmImportExcel 通用导入界面导入数据。
C# 全选
public virtual void DoImportExcelData(IButtonInfo sender)
{
IImporterSource source = new ImporterDataSource_Excel_NPOI(typeof(ImportLanguageData_ExcelModel));
IImporterTarget target = new ImportLanguageDataFromExcel();
var count = frmImportExcel.ExecuteImporter(source, target);
if (count > 0)
{
btnQuery.PerformClick();//刷新数据
}
}
DAL层 Import 方法实现
C# 全选
public ImportResult Import(List<ImportLanguageData_DataModel> list)
{
ImportResult result = new ImportResult();
if (list.Count == 0) return result;
try
{
_Database.BeginTransaction();
List<sys_LanguageData> listNewData = new List<sys_LanguageData>();
List<sys_LanguageData> listModData = new List<sys_LanguageData>();
//获取已存在的语言数据
var lanTypes = list.Select(s => s.TargetLanType).Distinct().ToList();
var listOldData = _Database.GetQueryable<sys_LanguageData>().Where(w => lanTypes.Contains(w.LanType)).ToList();
sys_LanguageData old;
list.ForEach(source =>
{
old = listOldData.Where(a => a.LanType == source.TargetLanType && a.ObjectID == source.ObjectID).FirstOrDefault();
//不存在,新增语言数据
if (old == null)
{
var newData = new sys_LanguageData
{
isid = IdHelper.GetId(),
LanData = source.TargetLanData,
LanType = source.TargetLanType,
ObjectID = source.ObjectID,
ObjectType = source.ObjectType,
CreatedBy = _Loginer.Account,
CreationDate = DateTime.Now,
LastUpdatedBy = _Loginer.Account,
LastUpdateDate = DateTime.Now,
};
listNewData.Add(newData);
}
else //修改
{
old.LanData = source.TargetLanData;
old.LanType = source.TargetLanType;
old.ObjectType = source.ObjectType;
old.LastUpdatedBy = _Loginer.Account;
old.LastUpdateDate = DateTime.Now;
listModData.Add(old);
}
});
if (listNewData.Count > 0) _Database.Add(listNewData);
if (listModData.Count > 0) _Database.Update(listModData);
_Database.CommitTransaction();
result.Message = $"新增:{listNewData.Count},修改:{listModData.Count}";
result.Count = listNewData.Count + listModData.Count;
result.Success = true;
}
catch (Exception ex)
{
result.Message = ex.Message;
_Database.RollbackTransaction();
}
return result;
}
完整版源码
开发框架版本:CSFrameworkV6.1
文本源码位置:frmLanguageData.cs
截图参考
功能按钮
导入数据
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网