Я создал API на C # и использую его как бэкэнд для моего углового проекта.Мне было поручено сохранить данные в виде файла Excel со своей страницы с помощью кнопки, выполненной в угловом формате.Логика в задней части.Я перепробовал все, чтобы добиться этого, но ничего не получается.Сейчас я использую EPPlus с методом SaveAs, преобразуя пакет Excel в байтовый массив.
Итак, вот моя функция в C #
public IHttpActionResult CreateExcelDocument()
{
//Creates a blank workbook. Using statement disposes the package.
using (var p = new ExcelPackage())
{
var result = new MemoryStream();
List<Hero> heroes = new List<Hero>();
var documents = collection.Find(new BsonDocument()).ToList();
foreach (BsonDocument docum in documents)
{
heroes.Add(BsonSerializer.Deserialize<Hero>(docum));
}
//Adding worksheet
var ws = p.Workbook.Worksheets.Add("Heroes");
//To set values in the spreadsheet use the Cells indexer.
ws.Cells["A1"].Value = "ID";
ws.Cells["B1"].Value = "Name";
for(var row = 1; row <= heroes.Count(); row++)
{
ws.Cells[row, 1].LoadFromCollection(heroes[row].Id);
ws.Cells[row, 2].LoadFromCollection(heroes[row].Name);
}
var stream = new MemoryStream(p.GetAsByteArray());
//string filePath = @"c:\workbooks\myworkbook.xlsx";
//FileInfo template = new FileInfo(filePath);
//MemoryStream outputStream = new MemoryStream();
p.SaveAs(stream);
return Ok(stream);
}
}
Вот как это получаетсяэто
saveDocument(): Observable<any> {
return this.http.get<any>(this.heroesUrl)
.pipe(
tap(p => this.log('saved excel document' + p)),
catchError(this.handleError<any>('saveDocument', []))
);
}
Я создал компонент сообщения, который показывает мне состояние моих запросов API, поэтому с помощью saveDocument я получил следующее: HeroService: сохраненный документ Excel [объект объекта], [объект объекта], [объектОбъект], [Объект Объект], [Объект Объект], [Объект Объект], [Объект Объект], [Объект Объект], [Объект Объект], [Объект Объект]
Я использую MongoDB, Angular 8и ASP.NET Web API 2 (C #)
РЕДАКТИРОВАТЬ: здесь кнопка в угловом
<button (click)="saveDocument()"> Save heroes </button>