亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用webapi在excel中導出數據

使用webapi在excel中導出數據

C#
智慧大石 2021-12-25 18:24:28
我們正在開發 web api,從中可以下載 excel 和數據。在網上搜索時,我們發現了諸如 npoi、epplus、closedxml 之類的庫。我們真的需要使用這些庫來處理 excel 還是采用標準方法?我們正在使用 asp.net core 進行 web api 開發。編輯:基本上我們的前端是從我們暴露 web api 的角度 5。在 web api 中,我們編寫了獲取數據的邏輯,在獲取數據后,我們需要以提供的特定格式/模板(單元格、列明智、表格明智等)放置。我們需要在excel中導出相當多的行。我們的數據庫和 API 也是基于 azure 的。對此的任何幫助表示贊賞!
查看完整描述

2 回答

?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

我使用過 epplus,我認為它適用于這種情況。讓我給你舉個例子。導出數據


private ExcelPackage CreateDoc(string title, string subject, string keyword)

    {

        var p = new ExcelPackage();

        p.Workbook.Properties.Title = title;

        p.Workbook.Properties.Author = "Application Name";

        p.Workbook.Properties.Subject = subject;

        p.Workbook.Properties.Keywords = keyword;

        return p;

    }


public ExcelPackage getApplicantsStatistics()

    {

        ExcelPackage p = CreateDoc("Applicant Statistics", "Applicant statistics", "All Applicants");

        var worksheet = p.Workbook.Worksheets.Add("Applicant Statistics");


        //Add Report Header

        worksheet.Cells[1, 1].Value = "Applicant Statistics";

        worksheet.Cells[1, 1, 1, 3].Merge = true;


      //Get the data you want to send to the excel file

        var appProg = _unitOfWork.ApplicantsProgram

                        .AllIncluding(pr => pr.Program1)

                        .GroupBy(ap => ap.Program1.Name)

                        .Select(ap => new { programName = ap.Key, TotalNum = ap.Count() })

                        .ToList();

        //First add the headers

        worksheet.Cells[2, 1].Value = "SR No";

        worksheet.Cells[2, 2].Value = "Program";

        worksheet.Cells[2, 3].Value = "No. of Applicants";


        //Add values

        var numberformat = "#,##0";

        var dataCellStyleName = "TableNumber";

        var numStyle = p.Workbook.Styles.CreateNamedStyle(dataCellStyleName);

        numStyle.Style.Numberformat.Format = numberformat;


        for (int i = 0; i < appProg.Count; i++)

        {

            worksheet.Cells[i + 3, 1].Value = i + 1;

            worksheet.Cells[i + 3, 2].Value = appProg[i].programName;

            worksheet.Cells[i + 3, 3].Value = appProg[i].TotalNum;

        }

        // Add to table / Add summary row

        var rowEnd = appProg.Count + 2;

        var tbl = worksheet.Tables.Add(new ExcelAddressBase(fromRow: 2, fromCol: 1, toRow: rowEnd, toColumn: 3), "Applicants");

        tbl.ShowHeader = true;

        tbl.TableStyle = TableStyles.Dark9;

        tbl.ShowTotal = true;

        tbl.Columns[2].DataCellStyleName = dataCellStyleName;

        tbl.Columns[2].TotalsRowFunction = RowFunctions.Sum;

        worksheet.Cells[rowEnd, 3].Style.Numberformat.Format = numberformat;


        // AutoFitColumns

        worksheet.Cells[2, 1, rowEnd, 3].AutoFitColumns();

        return p;

    }

返回的 ExcelPackage 對象可以作為下載發送到帶有 MVC 的文件


byte[] reportBytes;

            using (var package = _excelRep.getApplicantsStatistics())

            {

                reportBytes = package.GetAsByteArray();

            }

            return File(reportBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName);



查看完整回答
反對 回復 2021-12-25
?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

有幾個很好的庫可以這樣做,我最喜歡的是微軟的 EPPlus 和 OpenXML

https://github.com/JanKallman/EPPlus

https://docs.microsoft.com/en-us/office/open-xml/open-xml-sdk

您的數據庫和前端沒有太大區別,因為一切都由后端組織。


查看完整回答
反對 回復 2021-12-25
  • 2 回答
  • 0 關注
  • 616 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號