Ситуация требует создания файла Excel, а затем его передачи. файла Excel в браузер пользователя для загрузки.
Я создаю CSV-файл с необходимыми мне данными из HTML-отчета.
Затем я открываю шаблон Excel, созданный с помощью Aspose Cells, и заполняю его содержимым CSV.
Это отлично работает, когда я сохраняю файл локально. на мою машину, но никогда, когда я пытаюсь передать его обратно в Javascript для загрузки через браузер.
Пожалуйста, найдите мой код ниже:
C# — создание книги Excel
Код: Выделить всё
Workbook temp = new Workbook(System.Web.Hosting.HostingEnvironment.MapPath($"~/templates/") + @"excel_template.xlsx");
Worksheet ws = temp.Worksheets[0];
ws.Cells.ImportCSV(csvFile, ",", false, 1, 0);
// Used to test the excel populates correctly
temp.Save("Path_to_file" + fileName + ".xlsx", SaveFormat.Xlsx);
После долгих поисков это то, что я придумал (ПРИМЕЧАНИЕ: может быть совершенно неправильно)
Код: Выделить всё
MemoryStream ms = new MemoryStream();
temp.Save(ms, SaveFormat.Xlsx);
byte[] bytes = ms.ToArray();
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new ByteArrayContent(bytes);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = fileName + ".xlsx";
response.Content.Headers.ContentType = new MediaTypeHeaderValue("Application/x-msexcel");
return response;
Код JavaScript
Код: Выделить всё
$.get(ROOT + 'api_route', { 'csv': csv }, function (data) {
var byteArray = new Uint8Array(data);
var link = document.createElement('a');
var blob = new Blob(byteArray, { type: "application/octet-stream" });
link.href = window.URL.createObjectURL(blob);
link.download = "sample_excel_" + new Date(Date.now()).toLocaleDateString() + '_' + new Date(Date.now()).toLocaleTimeString() + ".xlsx";
link.click();
});
Я спрашиваю, можно ли это сделать в первую очередь?
Если да, то очевидно ли, что я сделал что-то не так?
Подробнее здесь: https://stackoverflow.com/questions/509 ... ia-browser