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

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


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Free Spire.XLS for .NET 是e-iceblue公司开发的一款支持对所有Excel格式类型文件进行操作的.NET 控件。它适用于任何类型的应用程序比如ASP.NET Web应用程序或者Windows桌面应用程序。Spire.XLS for .NET允许开发人员创建和管理Excel,而不需要安装Microsoft Excel或者Microsoft Office。相比Microsoft,Spire.XLS for .NET对于开发人员来说是一个更好的选择 - 自动化,安全,稳定,可扩展性延伸,速度快,价格便宜和功能强大。 通过使用Free Spire.XLS for .NET,开发人员可以快速方便的查看,生成,读写以及自定义编辑Excel文件Spire.XLS for .NET支持Excel 97-2003, Excel 2007, Excel 2010 and Excel 2013。它还支持C#, VB.NET, ASP.NETASP.NET MVC编程语言 作为一款专业,强大,方便易用的控件,Spire.XLS for .NET有一下主要功能: 新建Excel文件,编辑已有的Excel文件,多种保存Excel方式,设置Excel文件属性,文件打印设置,合并,拆分或者拷贝单元格,支持对Excel文件加锁或者加密保护。 Spire.XLS for .NET支持把数据从数据库导出到Excel工作表,或者把数据从Excel数据导入到数据库。 Spire.XLS for .NET 提供强大的功能为开发者设置单元格格式。这次格式化数字,文字缩进,定位调整,设置单元格边线,单元格填充以及保护等。 开发人员可以轻松的利用Spire.XLS for .NET向Excel文件里面写入内容,包括超过530多种的公式,70多种表格,支持插入图片,不同类型的文字,链接,注释甚至VBA等。 Spire.XLS for .NET 还允许开发人员将Excel文件转换成PDF, HTML, CSV, Text, XML以及图片格式。 注:下载包含有Spire.xls.dll文件以及部分Demo, 你可以调用DLL并参照Demo提供的代码处理Excel文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值