簡體   English   中英

導出excel文件無法在服務器中打開,但是在localhost excel文件中可以正確打開

[英]export excel file does not open in server but in localhost excel file open correctly

我想從asp.net mvc中的數據中獲取Excel文件報告,但是當我在本地主機中並從我的代碼運行時,它會正確地為我提供文件並正確打開文件。 但是,當我在服務器中獲取代碼並導出Excel文件時,在下載文件后,我單擊“打開”,但是文件格式不正確並且無法打開時出現錯誤。 我很困擾 。 請幫我 。 我的代碼:

public FileResult ExportOrders(string sortOrder, string title, string orderStatus
        , string sellerTrackCode, string paymentType, string settlementType, string sellerId, string excelDocumentId,
        string postmanId, string sellerCustomerName, string submittedDate, string fromSubmittedDate, string tillSubmittedDate,
        string fromDeliveredDate, string tillDeliveredDate, string fromPickUpDate, string tillPickUpDate, string fromId,
        string tillId, int? menuType, int? page, int? pageSize)
    {
        var query = _orderRepository.AsQueryable();
        var currentUser = User.Identity.GetUserName();

        if (currentUser != string.Empty)
        {
            var dbUser = _personRoleRepository.AsQueryable().FirstOrDefault(x => x.Person.UserName == currentUser);
            if (dbUser != null)
            {
                List<SellerCustomer> allSellerCustomers = new List<SellerCustomer>();
                var role = dbUser.Role;
                if (role.Title == "Seller")
                {
                    var seller = _sellerRepository.AsQueryable().First(x => x.PersonId == dbUser.PersonId);
                    query = query.Where(x => x.SellerId == seller.Id);
                }
            }
        }

        if (menuType == (int)MenuType.UnDoneOrders)
        {
            query = query.Where(x => x.OrderStatus == (byte)OrderStatus.Submitted || x.OrderStatus == (byte)OrderStatus.PayedByUser ||
                    x.OrderStatus == (byte)OrderStatus.TransmitToPort);
            ViewBag.menuType = MenuType.UnDoneOrders;
        }

        if (menuType == (int)MenuType.OpenOrders)
        {
            query = query.Where(x => x.OrderStatus == (byte)OrderStatus.WaitingForPostmanAssignment);
            ViewBag.menuType = MenuType.OpenOrders;
        }
        if (menuType == (int)MenuType.InProgressOrders)
        {
            query = query.Where(x => x.PostmanId != null && x.OrderStatus != (int)OrderStatus.DeliverToCustomer
                                                             && x.OrderStatus != (int)OrderStatus.ReturnedOrder);
            ViewBag.menuType = MenuType.InProgressOrders;
        }

        if (!String.IsNullOrEmpty(submittedDate))
        {
            DateTime date = CalendarHelper.GetGregorianDateTime(submittedDate);
            query = query.Where(s => s.SubmittedDate.Equals(date));
        }
        if (!String.IsNullOrEmpty(orderStatus))
        {
            var status = (byte)EnumsConverter.GetValueFromDescription<OrderStatus>(orderStatus);
            query = query.Where(s => s.OrderStatus.Equals(status));
        }
        if (!String.IsNullOrEmpty(title))
        {
            query = query.Where(s => s.Title.Contains(title));
        }
        if (!String.IsNullOrEmpty(sellerTrackCode))
        {
            query = query.Where(s => s.SellerTrackCode.Contains(sellerTrackCode));
        }
        if (!String.IsNullOrEmpty(paymentType))
        {
            var type = (byte)EnumsConverter.GetValueFromDescription<PaymentType>(paymentType);

            query = query.Where(s => s.PaymentType.Equals(type));
        }
        if (!String.IsNullOrEmpty(settlementType))
        {
            var settlement = (byte)EnumsConverter.GetValueFromDescription<SettlementType>(settlementType);
            query = query.Where(s => s.SettlementType.Equals(settlement));
        }
        if (!String.IsNullOrEmpty(sellerId))
        {
            var selId = Convert.ToInt32(sellerId);
            query = query.Where(s => s.SellerId == selId);
        }
        if (!String.IsNullOrEmpty(excelDocumentId))
        {
            var selId = Convert.ToInt32(excelDocumentId);
            query = query.Where(s => s.ExcelDocumentId == selId);
        }
        if (!String.IsNullOrEmpty(sellerCustomerName))
        {
            query = query.Where(s => s.SellerCustomerName.Contains(sellerCustomerName));
        }
        if (!String.IsNullOrEmpty(postmanId))
        {
            var selId = Convert.ToInt32(postmanId);
            query = query.Where(s => s.PostmanId == selId);
        }
        if (!String.IsNullOrEmpty(fromSubmittedDate))
        {
            var gregor = CalendarHelper.GetGregorianDate(fromSubmittedDate);
            query = query.Where(s => s.SubmittedDate >= gregor);
        }
        if (!String.IsNullOrEmpty(tillSubmittedDate))
        {
            var gregor = CalendarHelper.GetGregorianEndDate(tillSubmittedDate);
            query = query.Where(s => s.SubmittedDate <= gregor);
        }
        if (!String.IsNullOrEmpty(fromPickUpDate))
        {
            var gregor = CalendarHelper.GetGregorianDateTime(fromPickUpDate);
            query = query.Where(s => s.PickUpDate >= gregor);
        }
        if (!String.IsNullOrEmpty(tillPickUpDate))
        {
            var gregor = CalendarHelper.GetGregorianDateTime(tillPickUpDate);
            query = query.Where(s => s.PickUpDate <= gregor);
        }
        if (!String.IsNullOrEmpty(fromId))
        {
            var x = Convert.ToInt64(fromId);
            query = query.Where(s => s.Id >= x);
        }
        if (!String.IsNullOrEmpty(tillId))
        {
            var x = Convert.ToInt64(tillId);
            query = query.Where(s => s.Id <= x);
        }
        if (!String.IsNullOrEmpty(fromDeliveredDate))
        {
            var gregor = CalendarHelper.GetGregorianDate(fromDeliveredDate);
            query = query.Where(s => s.DeliveredDate >= gregor);
        }
        if (!String.IsNullOrEmpty(tillDeliveredDate))
        {
            var gregor = CalendarHelper.GetGregorianEndDate(tillDeliveredDate);
            query = query.Where(s => s.DeliveredDate <= gregor);
        }

        sortOrder = String.IsNullOrEmpty(sortOrder) ? SortKeys.PickupDateDesc : sortOrder;

        switch (sortOrder)
        {
            case SortKeys.SubmittedDate:
                query = query.OrderBy(x => x.SubmittedDate).ThenBy(x => x.Id);
                break;
            case SortKeys.SubmittedDateDesc:
                query = query.OrderByDescending(x => x.SubmittedDate).ThenBy(x => x.Id);
                break;
            case SortKeys.PickupDate:
                query = query.OrderBy(x => x.PickUpDate).ThenBy(x => x.Id);
                break;
            case SortKeys.PickupDateDesc:
                query = query.OrderByDescending(x => x.PickUpDate).ThenBy(x => x.Id);
                break;
            case SortKeys.OrderStatus:
                query = query.OrderBy(x => x.OrderStatus).ThenBy(x => x.Id);
                break;
            case SortKeys.OrderStatusDesc:
                query = query.OrderByDescending(x => x.OrderStatus).ThenBy(x => x.Id);
                break;
            case SortKeys.Title:
                query = query.OrderBy(x => x.Title).ThenBy(x => x.Id);
                break;
            case SortKeys.TitleDesc:
                query = query.OrderByDescending(x => x.Title).ThenBy(x => x.Id);
                break;
            case SortKeys.SellerTrackCode:
                query = query.OrderBy(x => x.SellerTrackCode).ThenBy(x => x.Id);
                break;
            case SortKeys.SellerTrackCodeDesc:
                query = query.OrderByDescending(x => x.SellerTrackCode).ThenBy(x => x.Id);
                break;
            case SortKeys.SellerId:
                query = query.OrderBy(x => x.Seller.StoreName).ThenBy(x => x.Id);
                break;
            case SortKeys.SellerIdDesc:
                query = query.OrderByDescending(x => x.Seller.StoreName).ThenBy(x => x.Id);
                break;
            case SortKeys.SellerCustomerName:
                query = query.OrderBy(x => x.SellerCustomerName).ThenBy(x => x.Id);
                break;
            case SortKeys.SellerCustomerNameDesc:
                query = query.OrderByDescending(x => x.SellerCustomerName).ThenBy(x => x.Id);
                break;
            case SortKeys.PostmanId:
                query = query.OrderBy(x => x.PostmanId).ThenBy(x => x.Id);
                break;
            case SortKeys.PostmanIdDesc:
                query = query.OrderByDescending(x => x.PostmanId).ThenBy(x => x.Id);
                break;
        }

        var orders = query.ToList();

        var path = Path.Combine(Server.MapPath("~/App_Data/"), "orderExcel.xlsx");

        if (orders.Count > 0)
        {
            using (var excelPackage = new ExcelPackage(new FileInfo(path)))
            {
                var ws = excelPackage.Workbook.Worksheets.FirstOrDefault(x => x.Name == "sheet1");
                if (ws != null)
                {
                    excelPackage.Workbook.Worksheets.Delete(ws);
                }
                excelPackage.Workbook.Worksheets.Add("sheet1");

                var workSheet = excelPackage.Workbook.Worksheets[1];
                workSheet.Cells.Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
                workSheet.DefaultColWidth = 15;
                workSheet.Column(2).Width = 20;
                workSheet.Column(4).Width = 20;
                workSheet.Column(5).Width = 30;
                workSheet.Column(6).Width = 20;
                workSheet.Column(7).Width = 20;
                workSheet.Column(8).Width = 20;
                workSheet.Column(11).Width = 30;
                workSheet.Column(12).Width = 30;
                workSheet.Column(13).Width = 40;
                workSheet.Cells["I1:J1"].Merge = true;
                workSheet.View.RightToLeft = true;

                workSheet.Cells.Style.WrapText = true;

                workSheet.Cells[1, 9].Value = "هزینه های قابل پرداخت گیرنده";
                workSheet.Cells[2, 1].Value = "ردیف";
                workSheet.Cells[2, 2].Value = "شماره ارجاع";
                workSheet.Cells[2, 3].Value = "نوع مرسوله";
                workSheet.Cells[2, 4].Value = "نام گیرنده";
                workSheet.Cells[2, 5].Value = "آدرس گیرنده";
                workSheet.Cells[2, 6].Value = "شماره همراه گیرنده";
                workSheet.Cells[2, 7].Value = "تلفن گیرنده";
                workSheet.Cells[2, 8].Value = "تاریخ دریافت سفارش";
                workSheet.Cells[2, 9].Value = "وجه کالا";
                workSheet.Cells[2, 10].Value = "هزینه حمل";
                workSheet.Cells[2, 11].Value = "وضعیت سفارش";
                workSheet.Cells[2, 12].Value = "توضیحات";
                workSheet.Cells[2, 13].Value = "کد رهگیری";

                for (var index = 0; index < orders.Count; index++)
                {
                    var order = orders[index];
                    workSheet.Cells[index + 3, 1].Value = index + 1;
                    workSheet.Cells[index + 3, 2].Value = order.SellerTrackCode;
                    workSheet.Cells[index + 3, 3].Value = order.Title;
                    workSheet.Cells[index + 3, 4].Value = order.SellerCustomerName ?? string.Empty;
                    workSheet.Cells[index + 3, 5].Value = order.OrderAddress;
                    workSheet.Cells[index + 3, 6].Value = order.Mobile;
                    workSheet.Cells[index + 3, 7].Value = order.Tel;
                    workSheet.Cells[index + 3, 8].Value = order.PickUpDate.GetPersianDate();
                    workSheet.Cells[index + 3, 9].Value = order.OrderValue;
                    workSheet.Cells[index + 3, 10].Value = order.DeliveryCost;
                    workSheet.Cells[index + 3, 11].Value = EnumsConverter.GetDescriptionFromValue((OrderStatus)order.OrderStatus);
                    workSheet.Cells[index + 3, 12].Value = order.Description;
                    workSheet.Cells[index + 3, 13].Value = order.Id;
                }
                excelPackage.Save();
            }
        }
        byte[] fileBytes = System.IO.File.ReadAllBytes(path);
        string fileName = "orderExcel.xlsx";
        return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
    }
}

您可能需要處理UTF-8字符:

byte[] fileBytes = Encoding.UTF8.GetBytes(File.ReadAllText(path));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM