数据导入是软件开发中常使用的功能,ZKEACMS提供了方便快捷的方式来导入Excel数据。这里读取Excel数据主要还是通过OpenXML。

ExcelReader<T>

使用ExcelReader类来读取Excel的内容,并转成对应的类型,使用方式如下:

[HttpPost]
public IActionResult Import()
{
	var reader = new ExcelReader<Student>(Request.Form.Files[0].OpenReadStream());
	Service.BeginBulkSave();
	foreach (var item in reader.ToList())
	{
		var result = Service.Add(item);
	}
	Service.SaveChanges();
	return View();
}

类型转换

ExcelReader会跟据实际的类型来做转换,也可以自定义转换。例如需要将日期格式为20180517这种转成日期类型,可实现IValueTypeConvert接口来做自定义转换:

public class DateTypeConvert : IValueTypeConvert
{
    public virtual Type SupportType { get { return typeof(DateTime); } }

    public object Convert(string value)
    {
        if (value.IsNotNullAndWhiteSpace())
        {
            string pattern = "^([0-9]{4})([0-9]{2})([0-9]{2})$";
            DateTime dateTime = DateTime.MinValue;
            Regex.Replace(value, pattern, evaluator =>
            {
                dateTime = new DateTime(int.Parse(evaluator.Groups[1].Value), int.Parse(evaluator.Groups[2].Value), int.Parse(evaluator.Groups[3].Value));
                return evaluator.Groups[0].Value;
            });
            if (dateTime == DateTime.MinValue)
            {
                if (DateTime.TryParse(value, out dateTime))
                {
                    return dateTime;
                }
            }
            return dateTime;
        }
        return null;
    }
}
public class NullAbleDateTypeConvert : DateTypeConvert
{
    public override Type SupportType { get { return typeof(DateTime?); } }
}

然后在使用时,加入该转换方式即可:

reader.Converts.Add(new DateTypeConvert());
reader.Converts.Add(new NullAbleDateTypeConvert());

导入数据格式

导入的Excel格式,只需要Excel标题的名字和类型的属性显示名称一致即可,例如: