Экспорт данных в Excel с помощью вебапи - PullRequest
0 голосов
/ 31 августа 2018

Мы разрабатываем веб-API, откуда Excel будет загружаться с данными. При поиске в сети мы нашли такие библиотеки, как npoi, epplus, closedxml.

Нужно ли нам использовать эти библиотеки для работы с Excel или использовать стандартный подход?

Мы используем ядро ​​asp.net для разработки веб-API.

Редактировать: В основном наш интерфейс находится под углом 5 от того места, где мы разоблачают веб API. В веб-API мы написали логику для получения данных, и после получения данных нам нужно разместить их в определенном формате / шаблоне (ячейка, столбец, лист и т. Д.). Есть довольно много строк, которые нам нужно экспортировать в Excel.

Также наша база данных и apis основаны на лазури.

Любая помощь по этому вопросу приветствуется!

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Я использовал 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);
0 голосов
/ 31 августа 2018

Для этого есть несколько хороших библиотек, мои любимые EPPlus и OpenXML от Microsoft

https://github.com/JanKallman/EPPlus

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

Нет большой разницы, каковы ваши db и внешний интерфейс, поскольку все организовано бэкэндом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...