با سلامی دوباره خدمت تمامی همراهان مقالات آموزشی سایت میزفا ، با یکی از دیگر از مقالات آموزشی طراحی سایت با ASP.NET MVC در خدمت شما عزیزان هستیم. در این جلسه آموزشی به شما آموزش خواهیم داد که چگونه اطلاعاتی را از بانک اطلاعاتی دریافت کرده و سپس این اطلاعات را در یک فایل اکسل ذخیره نمایید پس تا پایان این مقاله آموزشی با ما همراه باشید.
نحوه گرفتن خروجی اکسل از اطلاعات دیتابیس در MVC
گام نخست : نصب کتابخانه NPOI
من برای گرفتن خروجی اکسل از اطلاعات دیتابیس از کتابخانه NPOI استفاده میکنم این کتابخانه می تواند هم فرمت xls. (اکسل 97-2003) و هم فرمت xlsx. (اکسل 2007+) را بخواند و بنویسید.
برای نصب NPOI، از طریق مسیر Tools -> NuGet Package Manager -> Package Manager Console وارد محیط Package Manager Console شده و سپس دستور زیر را در محیط کنسول کپی نمایید و سپس کلید Enter را بزنید تا این کتابخانه برای شما نصب شود:
Install-Package NPOI
فرآیند نصب ممکن است مدتی به طول بینجامد.
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; namespace ExportInExcel.Models { public class Students { [Key] public int ID { get; set; } public string ShNumber { get; set; } public string Name { get; set; } public string Family { get; set; } public string NationalNo { get; set; } public int Age { get; set; } public string Email { get; set; } public string Address { get; set; } } }
using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Web; namespace ExportInExcel.Models { public class ExportInExcelContext : DbContext { public ExportInExcelContext() : base("name=DefaultConnection") { } public System.Data.Entity.DbSet<ExportInExcel.Models.Students> Students { get; set; } } }
<connectionStrings> <add name="DefaultConnection" connectionString="Data Source=(Local);Initial Catalog=StudentDB;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings>
using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Linq; using System.Net; using System.Web; using System.Web.Mvc; using ExportInExcel.Models; namespace ExportInExcel.Controllers { public class StudentsController : Controller { private ExportInExcelContext db = new ExportInExcelContext(); public ActionResult Index() { return View(); } } }
کدهای View :
<div class="box"> <p>لطفا فرمت فایل اکسل خود را انتخاب نمایید .</p> @using (Html.BeginForm("WriteExcelWithNPOI", "Students", FormMethod.Post)) { @Html.AntiForgeryToken() <input type="radio" name="extension" value="xls" /> <span>فرمت xls. (اکسل 97-2003)</span> <br /> <input type="radio" name="extension" value="xlsx" /> <span>فرمت xlsx. (اکسل 2007+)</span> <br> <input type="submit" class="btn btn-primary pull-left" value="ذخیره اطلاعات در فایل اکسل" /> <p style="color:red;margin-top:20px;">@ViewBag.Alert</p> } </div>
public ActionResult WriteExcelWithNPOI(String extension) { IWorkbook workbook; var Students = (from n in db.Students select n).ToList(); DataTable dt = new DataTable(); dt.Columns.Add("ردیف", typeof(Int32)); dt.Columns.Add("نام", typeof(string)); dt.Columns.Add("نام خانوادگی", typeof(string)); dt.Columns.Add("کدملی", typeof(string)); dt.Columns.Add("شماره شناسنامه", typeof(string)); dt.Columns.Add("سن", typeof(int)); dt.Columns.Add("آدرس", typeof(string)); dt.Columns.Add("ایمیل", typeof(string)); foreach (var item in Students) { dt.Rows.Add(item.ID, item.Name, item.Family, item.NationalNo, item.ShNumber, item.Age, item.Address, item.Email); } if (extension == "xlsx") { workbook = new XSSFWorkbook(); } else if (extension == "xls") { workbook = new HSSFWorkbook(); } else { ViewBag.Alert = "فرمت فایل اکسل را انتخاب نکرده اید !!!"; return View("Index"); } ISheet sheet1 = workbook.CreateSheet("Sheet 1"); //make a header row IRow row1 = sheet1.CreateRow(0); for (int j = 0; j < dt.Columns.Count; j++) { ICell cell = row1.CreateCell(j); String columnName = dt.Columns[j].ToString(); cell.SetCellValue(columnName); } //loops through data for (int i = 0; i < dt.Rows.Count; i++) { IRow row = sheet1.CreateRow(i + 1); for (int j = 0; j < dt.Columns.Count; j++) { ICell cell = row.CreateCell(j); String columnName = dt.Columns[j].ToString(); cell.SetCellValue(dt.Rows[i][columnName].ToString()); } } using (var exportData = new MemoryStream()) { Response.Clear(); workbook.Write(exportData); if (extension == "xlsx") //xlsx file format { Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "example.xlsx")); Response.BinaryWrite(exportData.ToArray()); } else if (extension == "xls") //xls file format { Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "example.xls")); Response.BinaryWrite(exportData.GetBuffer()); } Response.End(); } return View(); }
رفرنس های زیر به به کنترلر Students اضافه نمایید :
using NPOI.SS.UserModel; using System.IO; using NPOI.XSSF.UserModel; using NPOI.HSSF.UserModel;
به همین راحتی شما موفق شدید که اطلاعات خود را در فایل اکسل ذخیره نمایید در صورتی که در ارتباط با این مقاله و سایر مقالات آموزشی ASP.NET MVC سوالی دارید حتما در انجمن میزفا مطرح کنید.
20 پاسخ
سلام با تشکر از سایت خوبتون ببخشید با این که سوالم به اینجا زیاد مربوط نیست
برای ساخت سبد خرید در mvc وقتی اطلاعات را چاپ کردیم( منظورم اطلاعات سبد خریده) حالا اگر بخواهیم اون اطلاعات در بانکمون ذخیره شود باید چیکار کنیم میشه راهنمایی کنید؟
سلام وقتتون بخیر
سوال شما خیلی کلی هست و نمیشه پاسخ داد باید کدشما و نیاز شما به صورت دقیق بررسی شود.
موفق باشید.
ممنون از توضیحات خوبتون.برای پیاده سازی این مسئله در .net core چه راهکاری ارائه میدید؟
خواهش میکنم
مقاله آموزشی زیر می تونه در ASP.NET Core به شما کمک کند
موفق باشید.
با سلام من باید به طور مرتب تعدادی فایل با فرمت اکسل را از دیتابیسی دانلود کنم. بعد فایلها را داخل پوشه ای بندازم تا با اجرای ماکروی خودم اطلاعات دسته بندی شوند برای اینکه بتوانم اطلاعات را به صورت خودکار و مستقیم از طریق برنامه اکسل از دیتابیس دریافت کنم چه راهی وجود دارد؟ ممنون می شوم راهنمایی کنید. اگه این کار بشه خیلی بهم کمک می کنه خیلی وقت توی وب گشتم راه حلی پیدا نکردم.
سلام وقتتون بخیر
می تونید از کتابخانه هایی استفاده کنید که برای انجام عملیات همزمان و خودکار طراحی شده اند
تا یک عمل در تاریخی که شما میخواید انجام بشه.
توضیح ها تون عااااااااالی بود ، واقعا ممنون از شما
خیلی راحت انجام دادم و جواب هم گرفتم
خواهش می کنم … خوش حالم براتون مفید بوده .
سلام
من این
آموزش را با ای جکس پیاده سازی کردم اما در نهایت خروجی اکسل نمیدهد میتوانید راهنمایی کنید.
با سلام … امکان داره مشکل از کدنویسی بخش ajax باشه ، متد اکشن WriteExcelWithNPOI رو خط به خط اجرا کنید و مطمئن بشید که وارد این متد میشه … کدهای بخش View رو هم ارسال کنید تا من کد شما رو بتونم دقیق تر بررسی کنم .
با سلام
بله وارد متد می شود و تمامی خط ها اجرا میشود اما در نهایت ذخیره نمیشود
این کد های قسمت ویو می باشد.
با تشکر از پاسخ گویی
سلام … اگر وارد تابع میشه و هیچ خطایی نمیده پس کد بخش ajax و کنترلر مشکلی نداره … متاسفانه کامنت قبلی شما حذف شده … کدهای بخش ویویی که فرستادید هم بعضی از کاراکترهاش پاک شده اگر مشکلتون هنوز برطرف نشده می تونید فایل کنترلر و ویو رو برام ارسال کنید تا من هم تست کنم .
ایمیل من : aeo.ebrahimi@gmail.com
با سلام ممنون از پاسخوگویی
تا اونجایی که من سرچ کردم متوجه شدم به علت reponse کردن نمیتوان این کد را ایجکس کرد.
سلام … خواهش میکنم من که کاری نکردم… موفق باشید .
باسلام.
ممنون از اموزش خوبتون
یه سوال دارم
اگه بخوایم موقع لود شدن سایت مثلا مشخصه name در کلاس student از دیتابیس واکشی بشه و روی سایت نمایش قرار داده بشه باید چی کار کنیم؟؟
سلام … ممنون .
خب شما با استفاده از Linq query می تونید اطلاعاتی که میخواهید رو واکشی کنید بریزید داخل ViewBag و سپس ViewBag را با علامت @ قبلش درون ویو قرار بدید تا مقدارش نمایش داده بشه.
سلام
من حدود ۶ ماه دوره آموزشی asp.net mvc را گذراندم
دوره ها:
Asp.netMvc مقدماتی
Eshop فروشگاه اینترنتی
Asp.netMvc پیشرفته
از قالب آماده برای طراحی سایت استفاده کردم کلا با دیزاین سایت سر وکار ندارم
من فقط به کد نویسی علاقه مندم
اما اکثر جا ها می خوان که هم برنامه نویسی بلد باشی و هم دیزاینر خوبی هم باشی اما من فقط با html-css-javascript آشنایی در حدی که تو دانشگاه یاد گرفتم دارم و اصلا حوصله ندارم دیزاین سایت و طراحی کنم ولی mvc و خوب یاد گرفتم مثل همین چیزایی که تو سایتتون آموزش می دید
میشه لطف کنید راهنماییم کنید که من باید چطوری باید فعالیتم و تو زمینه برنامه نویسی ادامه بدم
ممنون میشم اگه کمکم کنید
با سلام … دوره هایی که شما گذروندید دوره های بسیار خوبی هستند اما تا زمانی که شما یک پروژه رو خودتون از صفر تا صد شروع نکنید نمی تونید خودتون رو محک بزنید چون تجربه هایی که شما در حین انجام پروژه به دست میارید به هبچ عنوان با گذروندن هیچ دوره آموزشی به دست نمیاد پیشنهاد من اینه که حتما با طراحی یک سایت از تحلیل تا پیاده سازی و اجرا ، دانش خودتون رو محک یزنید .
دیزاین توی طراحی سایت خیلی مهمه حتی می تونم به جرات بگم از کدنویسی سمت سرور مهم تره چون کاربر و مشتری شما تنها ظاهر سایتی که طراحی کردید رو می بینند و شما و سطح کارتون رو با دیدن ظاهر پروژتون قضاوت میکنند . ممکنه شما یک سایت رو با کدنویسی بسیار حرفه ای تحویل مشتری بدید ولی اگر ظاهر مناسبی نداشته باشه قطعا مشتری از پروژه ی شما استقبالی نمیکنه … در زمینه ی دیزاین خودتونو تقویت کنید سایت های مختلف و حرفه ای رو نگاه کنید و سعی کنید از طراحی شون برای پروژه هاتون ایده بگیرید…. پیشنهاد من به شما اینه که حتما کار با فریمورک بوت استرپ رو یاد بگیرید یادگیریش برای شما اصلا کار سختی نیست بوت استرپ هم فریمورک سبکی هست و هم کلاس هایی داره که شما کمک میکنه سایتتون رو ریسپانسیو کنید قطعا کلاس های آماده ی بوت استرپ برای شما که حوصله دیزاین رو ندارید بسیار مفیده و کارتون رو خیلی ساده میکنه ..
سلام اموزش ها خیلی خوب و اسونه عالیه اما فصل بندی ها معلوم نیست. مشخص نیس درس بعدی چیه و قبلی چی بوده فهرست بندی نداره و این خیلی سخته ?
سلام دوست عزیز
مقالات MVC چون صرفا مقالات آموزشی هستند و پراکنده ، فصل بندی ندارن اما سایر آموزش ها از جمله آموزش HTML ، آموزش ASP.NET Core MVC و آموزش امنیت در MVC دارای فصل بندی هستند کافیه به اولین پست هر دوره آموزشی رجوع کنید …. باز هم سعی می کنم فصل بندی ها رو به صورت شفاف تر قرار بدم …