【NPOI】Ajax异步导入Excel文件

21 篇文章 0 订阅
16 篇文章 0 订阅

【NPOI】导出Excel文件,后的导入Excel操作

关于【NPOI】的介绍和引用就不再说,上篇有讲到

将excel文件数据直接导入到数据,首先浏览器端要准备相对应格式的Excel文件才能正常的导入数据库。所以一般都有一个指定样式的Excel模板文件

实现方法:Ajax异步进行表单上传--->>一般处理程序-->>将文件保存到服务器--->>服务器读取文件-->>通过NPOI遍历Excel的内容-->>读取保存至数据库


一、Ajax异步提交表单

html代码:
<form enctype="multipart/form-data" id="file-form">
    <p>
        <a id="btnMCToOut" οnclick="importExcel()" class="easyui-linkbutton" data-options="iconCls:'icon_CloseAll'">导入Excel</a>
        <input type="file" name="filed" id="filed">
    </p>
</form>
注意:enctype="multipart/form-data" id="file-form"

JavaScript代码:
// 导入Excel
function importExcel() {
    var file = $("#filed").val();
    if (file == null || file.length == 0) {
        DJMask.msg("请先选择上传文件!");
        return false;
    }
    $('#file-form').ajaxSubmit({
        type: 'POST', // HTTP请求方式
        url: '../Ajax/Handler1.ashx', // 请求的URL地址
        dataType: 'text', // 服务器返回数据转换成的类型
        success: function (data) {
            DJMask.msg(data);
        },
        error: function (data) {
            DJMask.msg("oh,似乎出现点问题了!");
        }
    });
    $('#dgMenCards').datagrid('reload', {});//刷新表格
}
注意引入js文件:<script src="~/Scripts/jquery.form.js"></script>

二、一般处理程序部分

public void ProcessRequest(HttpContext context)
{
    context.Response.ContentType = "text/plain";
    HttpPostedFile filePost = context.Request.Files["filed"]; // 获取上传的文件
    string filePath = SaveExcelFile(filePost); // 保存文件并获取文件路径
    string msg= ExcelToDataTable(filePath, true);
    context.Response.Write(msg);
}
主要分为两个方法

1.保存Excel文件
/// <summary>
/// 保存Excel文件
/// <para>Excel的导入导出都会在服务器生成一个文件</para>
/// <para>路径:UpFiles/ExcelFiles</para>
/// </summary>
/// <param name="file">传入的文件对象</param>
/// <returns>如果保存成功则返回文件的位置;如果保存失败则返回空</returns>
public static string SaveExcelFile(HttpPostedFile file)
{
    try
    {
        var fileName = file.FileName.Insert(file.FileName.LastIndexOf('.'), "-" + DateTime.Now.ToString("yyyyMMddHHmmssfff"));
        var filePath = Path.Combine(HttpContext.Current.Server.MapPath("~/Upload"), fileName);
        string directoryName = Path.GetDirectoryName(filePath);
        if (!Directory.Exists(directoryName))
        {
            Directory.CreateDirectory(directoryName);
        }
        file.SaveAs(filePath);
        return filePath;
    }
    catch
    {
        return string.Empty;
    }
}

2.读取Excel文件保存至数据库
/// <summary>
/// 上传读取文件
/// </summary>
/// <param name="filePath"></param>
/// <param name="isColumnName"></param>
public string ExcelToDataTable(string filePath, bool isColumnName)
{
    int count = 0;
    try
    {


        DataTable dataTable = new DataTable();
        FileStream fs = null;
        IWorkbook workbook = null;
        ISheet sheet = null;
        using (fs = new FileStream(filePath, FileMode.Open))
        {
            if (filePath.IndexOf(".xlsx") > 0)
            {
                workbook = new XSSFWorkbook(fs);
                if (workbook != null)
                {
                    sheet = workbook.GetSheetAt(0);
                    if (sheet != null)
                    {
                        Models.MPMS_DBDataContext db = new Models.MPMS_DBDataContext();
                        int rowCount = sheet.LastRowNum;
                        for (int i = 1; i <= rowCount; i++)
                        {
                            Models.MemCards model = new Models.MemCards();
                            IRow row = sheet.GetRow(i);
                            model.CL_ID = int.Parse(row.GetCell(0).ToString());
                            model.S_ID = int.Parse(row.GetCell(1).ToString());
                            model.MC_CardID = (row.GetCell(2).ToString());//会员卡号

                            model.MC_Password = (row.GetCell(3).ToString());//卡片密码
                            model.MC_Name = (row.GetCell(4).ToString());//卡片密码
                            model.MC_Sex = int.Parse(row.GetCell(5).ToString());//会员性别

                            model.MC_Mobile = (row.GetCell(6).ToString());//手机号码
                            model.MC_Photo = "upload/1.jpg";//靓照

                            model.MC_Birthday_Month = 1;//会员生日--月
                            model.MC_Birthday_Day = 1;//会员生日--日
                            model.MC_BirthdayType = 1;//会员生日类型	

                            model.MC_IsPast = 1;//是否设置卡片过期时间	
                            model.MC_PastTime = DateTime.Now.AddYears(10);//卡片过期时间	
                            model.MC_Point = int.Parse(row.GetCell(7).ToString());//当前积分	
                            model.MC_Money = int.Parse(row.GetCell(8).ToString());//卡片付费	
                            model.MC_TotalMoney = 0;//累计消费	
                            model.MC_TotalCount = 0;//累计消费次数	
                            model.MC_State = 1;//卡片状态	
                            model.MC_IsPointAuto = 1;//积分是否可以自动换成等级	

                            model.MC_RefererID = null;//推荐人ID	
                            model.MC_RefererCard = null;//推荐人卡号	
                            model.MC_RefererName = null;//推荐人姓名	

                            model.MC_CreateTime = DateTime.Now;//积分是否可以自动换成等级	
                            count++;
                            db.MemCards.InsertOnSubmit(model);
                            db.SubmitChanges();
                        }
                    }
                }
            }
        }
    }
    catch{ return "导入失败,字段错误!"; }
    return "成功导入" +count+ "条数据";
}
/*
导入Excel时出现错误,错误提示:Wrong Local header signature: 0xE011CFD0,这个是excel的扩展名问题,
.xlsx  应该XSSFWorkbook workbook = new XSSFWorkbook(file);
而xls应该用 HSSFWorkbook workbook = new HSSFWorkbook(file);
*/
上传的Excel模板:


上传后的结果:


评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值