• .NET Excel导入


    前端代码:

    html:

    <form enctype="multipart/form-data" id="file-form">
    <p>
    <h3 style="color:red">上传的Excel要与指标项名字一致</h3>


    <input type="file" name="filed" id="filed" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" />

    <button type="button" class="btn-sm btn-primary pull-right" id="btn-Search" onclick="importExcel()"><i class="fa fa-upload"></i>导入Excel</button>
    </p>
    </form>

    js:

    // 导入Excel
    function importExcel() {
    var formData = new FormData()
    //多个才each
    //$.each($("#filed")[0].files, function (index, obj) {
    // formData.append("cusFile", obj);
    //});
    console.log($("#filed")[0].files[0]);

    formData.append("cusFile", $("#filed")[0].files[0]);
    $.ajax({
    url:'/FormInfo/UploadExcelData',
    type: 'POST',
    data: formData,
    async: false,
    cache: false, //告诉浏览器不缓存
    contentType: false, //因为data值是FormData对象,不需要对数据做处理。
    processData: false,
    success: function (data) {
    alert(data);
    $("#filed").val() = "";
    $("#importExcelModal").modal('hide');
    }
    });
    }

    后端代码:

    /// <summary>
    /// 导入
    /// </summary>
    /// <param name="path">没有什么用处</param>
    /// <returns></returns>
    public ActionResult UploadExcelData(string path)
    {
    HttpPostedFileBase files = Request.Files["cusFile"];//与formData.append("cusFile", $("#filed")[0].files[0]);的""要一直
    if (files == null)
    {
    return Content("请选择要上传Excel文件");
    }
    string name = files.FileName;
    string itemName = name.Substring(0, name.IndexOf("."));
    //判断是不是Excel文件
    string currFileExtension = name.Substring(name.LastIndexOf("."));
    if (currFileExtension != ".xlsx" && currFileExtension != ".xls")
    {
    return Content("请上传Excel文件");
    }

    Session["mathpath"] = name;

    //Resources/ImportExcel/  存放的路径
    string mathpath = HttpRuntime.AppDomainAppPath + "Resources/ImportExcel/" + name;
    files.SaveAs(mathpath);

    path = HttpRuntime.AppDomainAppPath + "Resources/ImportExcel/" + name;
    DataTable dt = Import_Excel(path, "sheet1");
    if (dt.Rows.Count == 0)
    {
    return Content("导入失败,请选择有效文件");
    }

    System.Transactions.TransactionOptions transactionOptions = new System.Transactions.TransactionOptions();
    transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.RepeatableRead;
    using (var trans = new System.Transactions.TransactionScope(System.Transactions.TransactionScopeOption.Required, transactionOptions))
    {
    try
    {
    foreach (DataRow dr in dt.Rows)
    {
    //对数据进行操作

    ......

    }
    }
    trans.Complete();//就这句就可以了。

    }
    catch (Exception e)
    {
    return Content("列错误,请选择有效文件");
    }
    }
    return Content("导入成功!");

    }

    /// <summary>
    /// 查询Excel表
    /// </summary>
    /// <param name="filePath"></param>
    /// <param name="SheetName"></param>
    /// <returns></returns>
    public DataTable Import_Excel(string filePath, string SheetName)
    {
    try
    {
    string currFileExtension = filePath.Substring(filePath.LastIndexOf("."));
    //连接字符串
    string sqlconn = string.Empty;
    if (currFileExtension == ".xlsx")
    {
    sqlconn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + filePath + "';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'"; // Office 07及以上版本
    }
    else if (currFileExtension == ".xls")
    {
    sqlconn = @"Provider=Microsoft.JET.OLEDB.4.0;Data Source='" + filePath + "';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'"; //Office 07以下版本
    }

    string[] str = GetExcelSheetNames(filePath);//17-4-10 替换

    string sql = @"select * from [" + SheetName + "$]";
    using (OleDbConnection conn = new OleDbConnection(sqlconn))
    {
    using (OleDbDataAdapter adapter = new OleDbDataAdapter(sql, conn))
    {
    System.Data.DataTable dt = new System.Data.DataTable();
    adapter.Fill(dt);
    return dt;
    }
    }
    }
    catch
    {

    DataTable ss = new DataTable();
    return ss;
    }

    }
    public String[] GetExcelSheetNames(string fileName)
    {
    OleDbConnection objConn = null;
    System.Data.DataTable dt = null;
    try
    {
    string connString = string.Empty;
    string FileType = fileName.Substring(fileName.LastIndexOf("."));
    if (FileType == ".xls")
    connString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
    "Data Source=" + fileName + ";Extended Properties=Excel 8.0;";
    else//.xlsx
    connString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";" + ";Extended Properties="Excel 12.0;HDR=YES;IMEX=1"";
    // 创建连接对象
    objConn = new OleDbConnection(connString);
    // 打开数据库连接
    objConn.Open();
    // 得到包含数据架构的数据表
    dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
    if (dt == null)
    {
    return null;
    }
    String[] excelSheets = new String[dt.Rows.Count];
    int i = 0;
    // 添加工作表名称到字符串数组
    foreach (DataRow row in dt.Rows)
    {
    string strSheetTableName = row["TABLE_NAME"].ToString();
    //过滤无效SheetName
    if (strSheetTableName.Contains("$") && strSheetTableName.Replace("'", "").EndsWith("$"))
    {
    excelSheets[i] = strSheetTableName.Substring(0, strSheetTableName.Length - 1);
    }
    i++;
    }
    return excelSheets;
    }
    catch (Exception ex)
    {
    return null;
    }
    finally
    {
    // 清理
    if (objConn != null)
    {
    objConn.Close();
    objConn.Dispose();
    }
    if (dt != null)
    {
    dt.Dispose();
    }
    }
    }

  • 相关阅读:
    日期转换DateTime
    linux 常用命令
    springcloud集成 xxl-job
    maven-阿里云镜像
    mysql 8.0+忘记root密码-linux
    java注解与自定义注解
    mysql联合索引的生效规则
    Maven常用命令及其作用、常见问题、常用命令使用场景举例
    反射的理解
    VirtualBox创建centos
  • 原文地址:https://www.cnblogs.com/zhaoyang021/p/9888558.html
Copyright © 2020-2023  润新知