asp.net 输出(导出) excel 文件(实用)

废话不多说直接上代码,因为文中有中间业务处理,用到的朋友需要去整改,原理: 拼写table插入数据,输出数据流即可!

        /// <summary>
        /// 商品导出Excel
        /// </summary>
        /// <returns></returns>
       public ActionResult ProjectToExcel()
        {
            string subjectNo = Request.Params["SNo"] ?? "";
            if (!string.IsNullOrEmpty(subjectNo))
            {
                SWfsSubjectService service = new SWfsSubjectService();
                IList<ProductInfo> productList = service.GetProductList(subjectNo.Trim());
                List<ProductInfo> list = new List<ProductInfo>();
                if (productList != null)
                    list = productList.ToList();

                //获取当前活动下的所有分组
                IList<SWfsSubjectCategory> categoryList = service.GetSWfsSubjectProductList(subjectNo.Trim());
                string tempCategoryNo = string.Empty;
                if (categoryList != null)
                {
                    //判断分组情况,单组情况按以前排序
                    if (categoryList.Count == 1)
                    {
                        #region 无分组排序
                        tempCategoryNo = categoryList[0].CategoryNo;
                        IList<SWfsSubjectProductSort> sortList = service.GetProductSortList(tempCategoryNo);

                        List<ProductInfo> tmplList = list;
                        if (sortList.Count > 0)
                        {
                            list = (from l in productList
                                    join s in sortList on l.ProductNo equals s.ProductNo
                                    orderby s.Sort ascending
                                    select l).ToList();
                        }
                        if (list.Count < tmplList.Count)
                        {
                            tmplList = (from t in tmplList
                                        where !(from b in list select b.ProductNo).Contains(t.ProductNo)
                                        select t).ToList();
                            list.AddRange(tmplList);
                        }
                        #endregion
                    }
                    else   // 分组情况,拆分成单组情况排序,分组顺序依照显示遍历
                    {
                        #region 分组排序
                        //单分组
                        List<ProductInfo> singleList = new List<ProductInfo>();
                        //聚合全部数据
                        List<ProductInfo> ListSum = new List<ProductInfo>();

                        //为防止多次访问数据库,直接查出所有分组数据
                        IList<SWfsSubjectProductSort> sortList = new List<SWfsSubjectProductSort>();
                        foreach (var model in categoryList)
                        {
                            tempCategoryNo += model.CategoryNo + ",";
                            sortList = service.GetProductSortList(tempCategoryNo);
                        }

                        //循环各组,拆分
                        foreach (var model in categoryList)
                        {
                            IList<SWfsSubjectProductSort> TempSortList = sortList.Where(c => c.SubjectNo == model.CategoryNo).ToList();

                            if (TempSortList != null && TempSortList.Count > 0)
                            {
                                //查出当前分组里面的所有商品
                                List<ProductInfo> singleALLList = productList.Where(c => c.CategoryNo == model.CategoryNo).ToList();

                                //排序的插入
                                singleList = (from l in singleALLList
                                              join s in TempSortList on l.ProductNo equals s.ProductNo
                                              orderby s.Sort ascending
                                              select l).ToList();
                                ListSum.AddRange(singleList);

                                //判断是否有无排序的,如果有,提取插入
                                if (singleList.Count < singleALLList.Count)
                                {
                                    singleList = (from t in singleALLList
                                                  where !(from b in singleList select b.ProductNo).Contains(t.ProductNo)
                                                  select t).ToList();
                                    ListSum.AddRange(singleList);
                                }

                            }
                            else
                            {
                                //无分排序直接插入
                                ListSum.AddRange(productList.Where(c => c.CategoryNo == model.CategoryNo).ToList());
                            }
                        }
                        list = ListSum;
                        #endregion
                    }
                }
                //判断当前商品数据,如果有数据那么可以导出,如果无数据,判断返回
                if (list.Count > 0)
                {
                    byte[] fileContents = Encoding.UTF8.GetBytes(ExcelMsg(subjectNo, list));
                    var fileStream = new MemoryStream(fileContents);
                    string excelname = "活动:" + subjectNo + "日期:" + DateTime.Now + ".xls";
                    return File(fileStream, "application/ms-excel", excelname);
                }
                else
                {
                    string TempAlert = string.Format("<script>alert(‘当前分组无商品数据!‘);history.back(-1);</script>");
                    return Content(TempAlert, "text/html");
                }
            }
            return View();
        }

        private string ExcelMsg(string subjectNo, IList<ProductInfo> productList)
        {
            #region 获取活动名称
            SWfsSubjectService service = new SWfsSubjectService();
            IList<SWfsSubject> subjectEntity = service.GetSWfsSubjectBySubjectNo(subjectNo);
            string sujectName = string.Empty;
            if (subjectEntity != null && subjectEntity.Count() > 0)
                sujectName = string.IsNullOrEmpty(subjectEntity[0].SubjectName) ? subjectEntity[0].SubjectEnName : subjectEntity[0].SubjectName;
            #endregion
            StringBuilder sb = new StringBuilder("<table width=\"100%\"><tr><td colspan=\"10\" rowspan=\"2\"><h2 width=\"100%\">活动名称:" + sujectName + "</h2></td></tr></table><h2>活动编号:" + subjectNo + "</h2><h2>活动商品</h2><table cellpadding=\"0\" cellspacing=\"0\" border=\"1\"  width=\"758px\" id=\"AccountListTable\" >");

            sb.AppendLine("<tr style=\"background-color:#FFFF00;\">");
            sb.AppendLine("<td><span>分组名称</span></td>");
            sb.AppendLine("<td><span>商品编号</span></td>");
            sb.AppendLine("<td><span>商品名</span></td>");
            sb.AppendLine("<td><span>品牌</span></td> ");
            sb.AppendLine("</tr>");
            foreach (ProductInfo psingle in productList)
            {
                #region 导出excel格式模板
                string brandName = string.IsNullOrEmpty(psingle.BrandEnName) == true ? psingle.BrandCnName : psingle.BrandEnName;
                sb.AppendLine("<tr align=\"left\">");
                sb.AppendLine(String.Format("<td>{0}</td>", psingle.CategoryName));
                sb.AppendLine(String.Format("<td style=\"mso-number-format:\\@;\">{0}</td>", psingle.ProductNo));
                sb.AppendLine(String.Format("<td>{0}</td>", psingle.ProductName));
                sb.AppendLine(String.Format("<td>{0}</td>", brandName));
                sb.AppendLine("</tr>");
                #endregion
            }

            sb.AppendLine("</table>");
            return sb.ToString();
        }

asp.net 输出(导出) excel 文件(实用)

时间: 2024-10-06 15:26:18

asp.net 输出(导出) excel 文件(实用)的相关文章

关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法

转载自 阿姆的博客 关于asp.net C# 导出Excel文件打开Excel文件格式与扩展名指定格式不一致的解决办法 导致“文件格式与扩展名指定格式不一致”这个问题,是因为大多数人在导出excel文件的时候,都是默认保存excel的格式, 也就是直接workbook.Save(path)或者workbook.SaveAs(path).进而忽略了SaveAs方法里面的参数.与保存excel文件格式有 关的是它第二个参数FileForMat. FileFormat 类型:System.Object

asp.net 导出excel文件

之前做过winfrom程序的导出excel文件的功能,感觉非常简单.现在试着做asp.net中导出excel的功能,之前用的是Microsoft.Office.Interop.Excel这个对象来实现数据导出excel,在asp.net上完全被它给恶心到了.首先是不能弹出保存对话框,然后又是在代码执行到Microsoft.Office.Interop.Excel.Application myexcel = new Microsoft.Office.Interop.Excel.Applicatio

在ASP MVC中如何使用Angular5导出excel文件

话不多说,直接来实际的. import { Injectable } from '@angular/core';import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';import { Observable } from 'rxjs';@Injectable() 首先引用基础组件. url: string; constructor(private http: HttpClient) { } 声明api路

ASP.NET datable导出excel

本文转载:http://www.cnblogs.com/chwkai/archive/2005/10/08/250426.html 不错的文章:http://www.cnblogs.com/lzhp/archive/2012/08/02/2680763.html 不错文章:http://hcyu2012.blog.163.com/blog/static/165192580201132532526918/ public void DataTable2Excel(DataTable dtData)

ADF Faces导出Excel文件【附样例工程】

本文提供一个基于ADF Face组件开发样例工程,工程的实现过程分为3个部分以应对Excel导出开发中常见的处理. 1.空模版文件下载:将Excel文件视为普通文件提供下载操作. 2.数据文件输出,将数据内容输出为Excel文件,目标文件尽在服务端内存中存在,这种方式需要对Excel文件的内容处理,需要引入响应的类库. 3.模版文件填充数据后下载,基于服务端的物理文件为模板,将业务数据填入约定位置后提供下载,在实现方面需要为工作簿对象指定源文件输入流,并完成后续内容处理. 实现的基本思路,由AD

使用Open Xml按模版导出Excel文件(上)

完整内容请参见我的网站 http://www.iyummy.com.cn/Blog/Detail/3 我们在做应用系统中经常需要将数据库中的数据导出成为Excel文件.如果是要导出报表的话,最好是能够根据定义好的模版生成一个美观的Excel. 以前要生成有样式的Excel.一般是使用Xml形式的Excel修改,或者使用Excel的Api.前者要修改样式的话特别麻烦,后者在Asp.net里会起很多进程. 庆幸的是从office 2007开始,微软使用了OpenXml来定义office的文件.使用r

Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ?Copyright 蕃薯耀 2017年9月13日 http://www.cnblogs.com/fanshuyao/ 直接上代码: import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.ref

asp.net DataTable导出 excel的方法记录(第三方)

官网:http://npoi.codeplex.com/ 简单应用,主要是可以实现我们想要的简单效果,呵呵 需要引入dll,可以在官网下载,也可在下面下载 C#代码   protected void getExcel(DataTable dt) { NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook(); NPOI.SS.UserModel.Sheet sheet = book.CreateSh

jxl导出Excel文件

一.java项目实现读取Excel文件和导出Excel文件 实现读取和导出Excel文件的代码: package servlet; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.text.SimpleDateFormat;