使用web api在excel中导出数据

问题描述 投票:0回答:2

我们正在开发web api,其中将使用数据下载excel。在网上搜索时,我们找到了像npoi,epplus,closedxml这样的库。

我们真的需要使用这些库来使用excel或采用标准方法吗?

我们正在使用asp.net核心进行web api开发。

编辑:基本上我们的前端是从我们暴露web api的角度5。在web api中,我们编写了获取数据的逻辑,在获取数据之后,我们需要将其放置在提供的特定格式/模板中(Cell,Column wise,sheet wise等)。我们需要在excel中导出相当多的行。

我们的数据库和apis也是基于azure的。

对此有任何帮助表示赞赏!

c# excel asp.net-core
2个回答
2
投票

我使用过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);

1
投票

有几个很好的库,我最喜欢的是Microsoft的EPPlus和OpenXML

https://github.com/JanKallman/EPPlus

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

您的数据库和前端没有太大区别,因为后端组织了所有内容。

© www.soinside.com 2019 - 2024. All rights reserved.