Excel導入+寫入數據庫


1.引用服務

2.前端

這里是上傳Excel功能頁面

<div>
    <form action="/Improve_Excel/get_Excel" method="post" enctype="multipart/form-data">//上傳文件必須要設置enctype="multipart/form-data"!!!

        <input type="file" id="" name="file" value="上傳文件" />
        <br />
        <br />
        <input type="submit" id="" name="" value="上傳文件按鈕" />

    </form>
</div>

3.后端

using Aspose.Cells;
using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Web;
using System.Web.Mvc;

namespace JJQ_Practice.Controllers
{
    public class Improve_ExcelController : Controller
    {
        // GET: Improve_Excel
        public ActionResult Index()
        {
            return View();
        }
        public ActionResult get_Excel()
        {
            /////////////////////////////////////////////////////////////////
            //上傳並保存文件
            HttpPostedFileBase file = Request.Files["file"];
            if (file == null || file.ContentLength <= 0)
            {
                return Content("請選擇文件!");
            }
            Stream streamfile = file.InputStream;
            string FinName = Path.GetExtension(file.FileName);//得到文件后綴名
            if (FinName != ".xls" && FinName != ".xlsx")
            {
                return Content("只能上傳Excel文檔");
            }
            string file_path = Server.MapPath("file_centre");
            var GUID = Guid.NewGuid();
            if (!Directory.Exists(file_path))
            {
                Directory.CreateDirectory(file_path);
            }
            var file_Path_Url = Path.Combine(file_path, Path.GetFileName(file.FileName));
            file.SaveAs(file_Path_Url);//上傳后保存文件
            ////////////////////////////////////////////////////////////////
            var dt = GetExcelData(file_Path_Url, 0);//得到第1個sheet表;index=0,1,2,3,...
            Workbook book = new Workbook(file_Path_Url);
            var all_sheet_Count = book.Worksheets.Count;//得到execl表中有幾個sheet表,數量;;為以后(本實例中沒有去實現)一execl多表寫入做for循環准備
            //!!!!!!!聲明數據庫中對應的表的表名;dbo.libraya表!!!!!!!重要!!!!!
            var table1 = "aa";//!!!!!!!聲明數據庫中對應的表的表名(就是數據庫中已經有的表,沒有數據的表);dbo.aa表!!!!!!!重要!!!!!
            BatchInsertBySqlBulkCopy(dt, table1);
            return Content("寫入成功!");
        }
        public static void BatchInsertBySqlBulkCopy(DataTable dt, string tableName)
        {
            var connString = "Data Source=*******;Initial Catalog=*******;User ID=*******;Password=*******;Min Pool Size=10;Max Pool Size=255;Connect Timeout=30";
            using (SqlBulkCopy sbc = new SqlBulkCopy(connString))
            {
                sbc.BatchSize = dt.Rows.Count;
                sbc.BulkCopyTimeout = 10;
                sbc.DestinationTableName = tableName;
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    sbc.ColumnMappings.Add(dt.Columns[i].ColumnName, i);
                }
                //將dt表中的數據全部寫入數據庫中對應名為tableName的表中
                sbc.WriteToServer(dt);
            }
        }
        #region Excel組件:讀取服務器端文件(配合導入用)
        public DataTable GetExcelData(string strSysUrl, int pageInfo)
        {
            try
            {
                //解析插入數據庫
                Workbook book = new Workbook(strSysUrl);
                Worksheet sheet = book.Worksheets[pageInfo];
                Cells cells = sheet.Cells;
                var num = book.Worksheets.Count;
                //提取excel數據 轉換為DataTable
                DataTable dt = cells.ExportDataTableAsString(0, 0, cells.MaxDataRow + 1, cells.MaxDataColumn + 1, true);
                return dt;
            }
            catch (Exception ex)
            {
                return null;
            }
        }
        #endregion

    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM