为了账号安全,请及时绑定邮箱和手机立即绑定

使用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 关注
  • 589 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信