asp.net mvc 上传excel文件并读取excle内容转成DataTable(Spire.Office.3.6.0)

news/2024/7/21 7:56:30 标签: mvc, excel, Spire

CSDN的编辑器乱码了!请点击这里看不乱码的:

https://blog.csdn.net/djk8888/article/details/80938469



本文配套源码下载:https://download.csdn.net/download/djk8888/10502601

一个需求:将一个Excel文件中的数据导入到数据库中去。

思路:上传一个excel文件,读取该excel文件中数据,转成DataTable(或List),循环insert到数据库中去

截图如下:


前端用到:jQuery-File-Upload-8.8.5    后台用到:Spire.Office.3.6.0

html代码:

@{
    ViewBag.Title = "djk8888";
}
<script src="~/jQuery-File-Upload-8.8.5/js/jquery.min.js"></script>
<script src="~/jQuery-File-Upload-8.8.5/js/vendor/jquery.ui.widget.js"></script>
<script src="~/jQuery-File-Upload-8.8.5/js/jquery.iframe-transport.js"></script>
<script src="~/jQuery-File-Upload-8.8.5/js/jquery.fileupload.js"></script>
<script src="~/jQuery-File-Upload-8.8.5/js/jquery.fileupload-process.js"></script>
<script src="~/jQuery-File-Upload-8.8.5/js/jquery.fileupload-validate.js"></script>
<link href="~/jQuery-File-Upload-8.8.5/css/jquery.fileupload-ui.css" rel="stylesheet" />
<style type="text/css">
    .bar {
        height: 18px;
        background: green;
    }
</style>
<script>
    $(function () {
        $('#fileupload').fileupload({
            url: "/Home/UploadFiles",
            dataType: 'json',
            replaceFileInput: false,//显示已选择文件文件名(必须)
            progressall: function (e, data) {
                var progress = parseInt(data.loaded / data.total * 100, 10);
                $('#progress .bar').css('width', progress + '%');
            },
            add: function (e, data) {
                //判断文件类型,此例限制为:Excel文件
                var fileType = data.files[0].name.split('.').pop();
                var acceptFileTypes = /xls|xlsx$/i;
                if (!acceptFileTypes.test(fileType)) {
                    $("#startBtn").hide();//隐藏上传按钮
                    alert("不支持的文件类型,仅支持EXCEL文件");
                    return;
                }
                //判断文件大小,此例限制为:1mb:
                var size = data.files[0].size;
                size = (size / 1024).toFixed(2);//文件大小单位kb
                var maxFileSize = 1024;//1mb=1024kb
                if (size > maxFileSize) {
                    $("#startBtn").hide();//隐藏上传按钮
                    alert("文件大小:" + size + "KB,超过最大限制:" + maxFileSize + "KB");
                    return;
                }
                $("#startBtn").show();//显示上传按钮
                //点击上传按钮开始上传
                data.context = $('#startBtn').click(function () {
                    data.context = $('<p/>').text('Uploading...').replaceAll($(this));
                    data.submit();
                });
            },
            done: function (e, data) {
                data.context = $('<p/>').text("文件上传成功!").replaceAll($(this));
                
                $("#tab1").empty();
                $('#tab1').append("<tr><th>进度</th><th>课程</th><th>说明</th></tr>");
                $.ajax({
                    type: "GET",
                    url: "/Home/ReadFile",
                    data: {},
                    dataType: "json",
                    success: function (result) {                     
                        var html = '';
                        for (var i = 0; i < result.length; i++) {
                            html += '<tr>';
                            html += '<td>' + result[i].no + '</td>';
                            html += '<td>' + result[i].title  + '</td>';
                            html += '<td>' + result[i].note  + '</td>';
                            html += '</tr>';
                        }              
                        $('#tab1').append(html);
                    }
                });

            },
            change: function (e, data) {
                if (data.files.length > 1) {
                    $("#startBtn").hide();//隐藏上传按钮
                    alert("只能选择1个文件");
                    return false;
                }
            },
            drop: function (e, data) {
                if (data.files.length > 1) {
                    $("#startBtn").hide();//隐藏上传按钮
                    alert("只能选择1个文件");
                    return false;
                }
            },
        });
    });

</script>
<h2>用jQuery-File-Upload上传Excel文件(ASP.NET MVC)</h2>
<input id="fileupload" type="file" name="multiFiles" multiple />
<button id="startBtn" style="display:none;">上传</button>
<div id="progress">
    <div class="bar" style="width: 0%;"></div>
</div>
<br />
<table border="1" id="tab1"></table>

mvc代码:

using Spire.Xls;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Web;
using System.Web.Mvc;

namespace workbook.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
        /// <summary>
        /// 上传excel文件
        /// </summary>
        [HttpPost]
        public ActionResult UploadFiles()
        {
            bool b = false;
            var statuses = new List<ViewDataUploadFilesResult>();
            var headers = Request.Headers;
            if (string.IsNullOrEmpty(headers["X-File-Name"]))
            {
                b = UploadWholeFile(Request, statuses);//上传文件
            }
            if (b)//上传成功
            {
                JsonResult result = Json(statuses);
                result.ContentType = "text/plain";
                return result;
            }
            var r = new List<ViewDataUploadFilesResult>();
            return Json(r);//上传失败
        }
        private string StorageRoot
        {
            get { return Path.Combine(Server.MapPath("~/Files")); }//文件上传的路径:根目录下的/Files 文件夹
        }
        private bool UploadWholeFile(HttpRequestBase request, List<ViewDataUploadFilesResult> statuses)
        {
            try
            {
                var file = request.Files[0];//文件源
                var fullPath = Path.Combine(StorageRoot, Path.GetFileName(file.FileName));//服务器文件完整路径
                file.SaveAs(fullPath);//复制文件

                Workbook workbook = new Workbook();
                workbook.LoadFromFile(fullPath);
                //读取第一个sheet
                Worksheet worksheet = workbook.Worksheets[0];
                var dt = worksheet.ExportDataTable();

                //至此:已经获取上传的Excel文件中的内容并转成DataTable,即可进行写入(导入)数据库的操作(略)     
                Session["Upload"] = dt;//存到Session,用于展示上传的excel文件中的内容

                statuses.Add(new ViewDataUploadFilesResult()
                {
                    name = file.FileName,
                    size = file.ContentLength,
                    type = file.ContentType,
                });

                return true;
            }
            catch
            {
                return false;
            }
        }
        public class ViewDataUploadFilesResult
        {
            public string name { get; set; }
            public int size { get; set; }
            public string type { get; set; }
            public string url { get; set; }
            public string delete_url { get; set; }
            public string thumbnail_url { get; set; }
            public string delete_type { get; set; }
        }
        /// <summary>
        /// 展示上传的excel文件中的内容
        /// </summary>
        public ActionResult ReadFile()
        {
            DataTable dt = Session["Upload"] as DataTable;
            string json = "";
            json += "[";
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                json += "{";
                json += "\"no\":" + "\"" + dt.Rows[i]["no"].ToString() + "\"" + ",";
                json += "\"title\":" + "\"" + dt.Rows[i]["title"].ToString() + "\"" + ",";
                json += "\"note\":" + "\"" + dt.Rows[i]["note"].ToString() + "\"";
                json += "}";
                json += ",";
            }
            json = json.Substring(0, json.Length - 1);
            json += "]";
            return Content(json);
        }
    }
}
本文配套源码下载: https://download.csdn.net/download/djk8888/10502601

上传文件相关资料:https://blog.csdn.net/djk8888/article/details/78835131



http://www.niftyadmin.cn/n/836944.html

相关文章

PXC安装

PXC安装第一节点传入percona-release-0.1-6.noarch.rpm 文件[rootlocalhost ~]# yum install -y percona-release-0.1-6.noarch.rpm[rootlocalhost ~]# yum install Percona-XtraDB-Cluster-57传入my.cnf 文件克隆两个虚拟机[rootlocalhost ~]# mv my.cnf /etc/my.cnf[rootloca…

天兔插件监控mysql

Lepus3.8-天兔mysql数据库监控系统搭建 原创ixhao2016-08-24 02:36:23评论(11)3183人阅读Lepus3.8-天兔mysql数据库监控系统搭建lepus是一款开源的数据库监控软件&#xff0c;能详细的监控各种数据库状态&#xff0c;如mysql慢查询和主从状况。 这是web监控页面&#xff1a; wK…

【笔记】如何做好一场技术演讲——前期准备

唯有精心准备刻意训练方能成就精彩演讲。演讲最重要的是主题&#xff0c;所以首先要明确主题。然后&#xff0c;就需要设定好演讲的主线。对于技术类的分享&#xff0c;有一个相对固定的模式&#xff1a;who-what&when-why-how-future-recapwho&#xff1a;自我介绍&#x…

在线生成二维码的api接口

<img width"150" height"150" src"http://qr.liantu.com/api.php?texthttps://blog.csdn.net/djk8888" /> 替换红色字体(text...的参数)的值为你要的网址url即可

Java多线程进阶(二九)—— J.U.C之collections框架:ConcurrentLinkedQueue

本文首发于一世流云专栏&#xff1a;https://segmentfault.com/blog... 一、ConcurrentLinkedQueue简介 ConcurrentLinkedQueue是JDK1.5时随着J.U.C一起引入的一个支持并发环境的队列。从名字就可以看出来&#xff0c;ConcurrentLinkedQueue底层是基于链表实现的。 Doug Lea在实…

设计模式-工厂模式/委派模式/代理模式/单例模式

2019独角兽企业重金招聘Python工程师标准>>> 1.工厂模式:spring中运用的都是工厂模式,不参与业务的枚举就是工厂模式,所有人均可以调用,工厂模式就是在底层框架中写好. 例如:new 了一个Map 那这个Map创造的过程其实是底层工厂模式代码创造出来. 简单工厂模式: 抽…

UIPageViewController 翻页、新手引导--UIScrollView:pagingEnabled

UIPageViewController 翻页、新手引导--UIScrollView:pagingEnabled

uniqid() 函数 生成唯一ID

2019独角兽企业重金招聘Python工程师标准>>> 基于时间微秒生成唯一ID 语法 uniqid(prefix,more_entropy) 参数描述prefix可选。为 ID 规定前缀。如果两个脚本恰好在相同的微秒生成 ID&#xff0c;该参数很有用。more_entropy可选。规定位于返回值末尾的更多的熵。说…