2017-12-20 7 views
0

Ich bin derzeit arbeiten am Export des Objekts in XLSX-Datei. Dies ist so nah an dem, was ich brauche, Export xlsx in ASP.NET Core , aber das Problem ist - das ist der Export in den lokalen Projektordner wwwroot, und ich möchte auf Client-Maschine exportieren.Exportieren von Objekt in .xlsx Client-Maschine asp.net Kern

Ich hatte dies versucht.

private readonly IHostingEnvironment _hostingEnvironment; 

    public ImportExportController(IHostingEnvironment hostingEnvironment) 
    { 
     _hostingEnvironment = hostingEnvironment; 
    } 

    [HttpGet] 
    [Route("Export")] 
    public FileStreamResult Export() 
    { 
     string sWebRootFolder = _hostingEnvironment.WebRootPath; 
     string sFileName = @"demo.xlsx"; 
     string URL = string.Format("{0}://{1}/{2}", Request.Scheme, Request.Host, sFileName); 
     FileInfo file = new FileInfo(Path.Combine(sWebRootFolder, sFileName)); 
     if (file.Exists) 
     { 
      file.Delete(); 
      file = new FileInfo(Path.Combine(sWebRootFolder, sFileName)); 
     } 
     using (ExcelPackage package = new ExcelPackage(file)) 
     { 
      // add a new worksheet to the empty workbook 
      ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Employee"); 
      //First add the headers 
      worksheet.Cells[1, 1].Value = "ID"; 
      worksheet.Cells[1, 2].Value = "Name"; 
      worksheet.Cells[1, 3].Value = "Gender"; 
      worksheet.Cells[1, 4].Value = "Salary (in $)"; 

      //Add values 
      worksheet.Cells["A2"].Value = 1000; 
      worksheet.Cells["B2"].Value = "Jon"; 
      worksheet.Cells["C2"].Value = "M"; 
      worksheet.Cells["D2"].Value = 5000; 

      worksheet.Cells["A3"].Value = 1001; 
      worksheet.Cells["B3"].Value = "Graham"; 
      worksheet.Cells["C3"].Value = "M"; 
      worksheet.Cells["D3"].Value = 10000; 

      worksheet.Cells["A4"].Value = 1002; 
      worksheet.Cells["B4"].Value = "Jenny"; 
      worksheet.Cells["C4"].Value = "F"; 
      worksheet.Cells["D4"].Value = 5000; 

      package.Save(); //Save the workbook. 
     } 


     FileStream RptStream = new FileStream(Path.Combine(sWebRootFolder, sFileName), FileMode.Open, FileAccess.Read); 
     return new FileStreamResult(RptStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
    } 

aber scheint, wie ich das Arbeitsblatt exportieren müssen Ordner und später bei der Rückkehr Filestreamresult mit dem Arbeitsblatt URL wwwroot. und ich weiß nicht, wie man die URL des Arbeitsblattes in filestreamerult Funktion erhält.

Jeder kann mir helfen? Ich möchte diese .xlsx auf Client-Computer anstelle von wwwroot exportieren.

+0

Ich bin unklar, was die Frage ist. Was macht der Code jetzt? Was willst du stattdessen tun? – mjwills

+0

Dieser Code ist Export Excel Arbeitsblatt zu wwwroot Ordner, z. Export.xlsx, und ich möchte tatsächlich auf Client-Computer exportieren. –

Antwort

1

Versuchen Sie die Datei in einen Speicher-Stream Schreiben und Ihre Methode ein Objekt Filecontentresult zurückkehren zu müssen (via Controller.File-Methode):

var stream = new MemoryStream(package.GetAsByteArray()); 
return File(stream.ToArray(), "application/vnd.ms-excel", sFileName); 
+0

kann ich wissen, wie kann ich es ändern? –

+0

@Samsam Ersetzen Sie Ihre letzten zwei Zeilen Code durch mein Snippet von oben. – slashNburn

+0

Ich habe es, vielen Dank ~ –