aspose导出Excel(webapi、多sheet、自定义日期样式)

[HttpGet]
        [Route("exportfoodapplydetail")]
        public HttpResponseMessage Export_Foodapplydetail(string id, string title)
        {
            var list = _fooddetailRepository.GetFoodSupplyDatail(id);
            string tableTitle = "序号, 食品名称,计量单位,单价,数量,小计";
            try
            {
                Workbook wb = new Workbook();
                wb.Worksheets.Clear();

                #region 为标题设置样式
                Style styleTitle = wb.CreateStyle();//新增样式 
                styleTitle.HorizontalAlignment = TextAlignmentType.Center;//文字居中 
                styleTitle.Font.Name = "宋体";//文字字体 
                styleTitle.Font.Size = 18;//文字大小 
                styleTitle.Font.IsBold = false;//粗体 

                //表头、数据行样式 
                Style style2 = wb.CreateStyle();//新增样式 
                style2.HorizontalAlignment = TextAlignmentType.Center;//文字居中 
                style2.Font.Name = "宋体";//文字字体 
                style2.Font.Size = 12;//文字大小 
                style2.Font.IsBold = false;//粗体 
                style2.IsTextWrapped = true;//单元格内容自动换行 
                style2.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;
                style2.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin;
                style2.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;
                style2.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;

                #endregion

                string[] Tile = tableTitle.Split(',');
                int Colnum = Tile.Count();//表格列数 



                List<string> sheetName = new List<string>();
                if (list.Where(a => a.type_name != "水果").Count() > 0)
                {
                    sheetName.Add("食品");
                }
                if (list.Where(a => a.type_name == "水果").Count() > 0)
                {
                    sheetName.Add("水果");
                }
                //生成sheet的名字
                for (int i = 0; i < sheetName.Count; i++)
                {
                    wb.Worksheets.Add(sheetName[i]);
                }
                for (int j = 0; j < sheetName.Count; j++)
                {
                    style2.Custom = "";
                    Worksheet sheet = wb.Worksheets[j];
                    Cells cells = sheet.Cells;//单元格 
                    List<FoodApplyDetailModel> food_list = null;
                    if (sheetName[j] == "食品")
                    {
                        food_list = list.Where(a => a.type_name != "水果").ToList();
                    }
                    else
                    {
                        food_list = list.Where(a => a.type_name == "水果").ToList();
                    }
                    int Rownum = food_list.Count();//表格行数 
                    #region 生成表头 标题列
                    //生成标题
                    cells.Merge(0, 0, 1, Colnum);//合并单元格 
                    cells[0, 0].PutValue(title + "备用食品(夜餐)选购清单");//填写内容 
                    cells[0, 0].SetStyle(styleTitle);
                    cells.SetRowHeight(0, 45);
                    //生成行2 列名行 
                    for (int i = 0; i < Colnum; i++)
                    {
                        cells[1, i].PutValue(Tile[i]);
                        cells.SetColumnWidth(i, 10);
                        cells[1, i].SetStyle(style2);
                        cells.SetRowHeight(1, 25);
                    }
                    #endregion
                    decimal? money = 0;
                    int? total = 0;
                    for (int i = 0; i < Rownum; i++)
                    {
                        food_list[i].price = (food_list[i].price != null) ? food_list[i].price : 0;
                        cells[2 + i, 0].PutValue(i + 1);
                        cells[2 + i, 1].PutValue(food_list[i].name);
                        cells[2 + i, 2].PutValue(food_list[i].unit);
                        cells[2 + i, 3].PutValue(food_list[i].price);
                        cells[2 + i, 4].PutValue(food_list[i].quantity);
                        cells[2 + i, 5].PutValue(food_list[i].quantity * food_list[i].price);
                        cells[2 + i, 0].SetStyle(style2);
                        cells[2 + i, 1].SetStyle(style2);
                        cells[2 + i, 2].SetStyle(style2);
                        cells[2 + i, 3].SetStyle(style2);
                        cells[2 + i, 4].SetStyle(style2);
                        cells[2 + i, 5].SetStyle(style2);
                        cells.SetRowHeight(2 + i, 25);
                        cells.SetColumnWidth(1, 30);
                        money += food_list[i].price * food_list[i].quantity;
                        total += food_list[i].quantity;
                    }
                    cells.Merge(2 + Rownum, 0, 1, Colnum - 1);
                    cells[2 + Rownum, 0].PutValue("合计");
                    cells[2 + Rownum, 5].PutValue(money);
                    //cells[2 + Rownum, 4].PutValue(total);
                    cells[2 + Rownum, 0].SetStyle(style2);
                    cells[2 + Rownum, 1].SetStyle(style2);
                    cells[2 + Rownum, 2].SetStyle(style2);
                    cells[2 + Rownum, 3].SetStyle(style2);
                    cells[2 + Rownum, 4].SetStyle(style2);
                    cells[2 + Rownum, 5].SetStyle(style2);
                    cells.SetRowHeight(2 + Rownum, 25);
                    cells[3 + Rownum, 0].PutValue("签名");
                    cells.Merge(3 + Rownum, 1, 1, 2);
                    cells[3 + Rownum, 3].PutValue("申请日期");
                    cells[3 + Rownum, 4].PutValue(food_list[0].create_date);
                    cells.Merge(3 + Rownum, 4, 1, 2);
                    cells[3 + Rownum, 0].SetStyle(style2);
                    cells[3 + Rownum, 1].SetStyle(style2);
                    cells[3 + Rownum, 2].SetStyle(style2);
                    cells[3 + Rownum, 3].SetStyle(style2);
                    style2.Custom = "yyyy-MM-dd";
                    cells[3 + Rownum, 4].SetStyle(style2);
                    cells[3 + Rownum, 5].SetStyle(style2);
                    cells.SetRowHeight(3 + Rownum, 25);
                }

                string sPath = AppDomain.CurrentDomain.RelativeSearchPath + "\\" + "UploadFile";
                sPath = sPath.Replace("\\bin\\", "\\");
                var fileName = "食品申请单_" + DateTime.Now.ToString("yyyy-MM-dd") + ".xls";
                fileName = HttpUtility.UrlEncode(fileName);
                string filePath = sPath + "\\" + fileName;
                wb.Save(filePath);
                var stream = FileToStream(filePath);
                HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
                result.Content = new StreamContent(stream);
                result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.ms-excel");
                result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
                result.Content.Headers.ContentDisposition.FileName = fileName;
                //return ResponseMessage(result);
                return result;

            }
            catch (Exception e)
            {
                return new HttpResponseMessage(HttpStatusCode.NoContent);
                //return Json(new { success = false, message = "导出有误,请联系管理员!" });
            }

        }

 

//不保存文件直接导出
。。。。(表格制作略)

var stream = new MemoryStream();
                wb.Save(stream, Aspose.Cells.SaveFormat.Xlsx);
                HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
                result.Content = new StreamContent(stream);
                result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.ms-excel");
                result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
                result.Content.Headers.ContentDisposition.FileName = fileName;
                return result;

 

 

 

//注:aspose未破解版导出时会多生成一个默认sheet 所以要使用破解版

posted @ 2019-09-27 17:06  艺洁  阅读(715)  评论(0编辑  收藏  举报