如何在ASP.NET中将创建的excel文件保存到Client pc

当我按下按钮并且我的应用程序创建它并保存到客户端桌面时,我正在asp.net中创建一个excel报告和html报告但是,由于excel文件在服务器的桌面上创建,因此它无法正常工作。 我该如何解决这个问题?

谢谢您的回复。

string CurrentDate; DateTime saveNow = DateTime.Now; CurrentDate = saveNow.Date.ToShortDateString(); string reportContent = prepareHTM(); string pathFile = Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory) + "\\As_Build_Report_ "+ CurrentDate + ".html"; using (StreamWriter outfile = new StreamWriter(pathFile, true)) { outfile.WriteLine(reportContent); } System.Diagnostics.Process.Start(pathFile); 

 object missing = System.Reflection.Missing.Value; //Start Excel Application. Excel.Application oXL = new Excel.Application(); oXL.Visible = true; //display Application . Excel._Workbook oWB = (Excel._Workbook)(oXL.Workbooks.Add(missing));//create a new workbook. Excel._Worksheet oSheet = (Excel._Worksheet)oWB.ActiveSheet; //create a sheet string CurrentDate; DateTime saveNow = DateTime.Now; CurrentDate = saveNow.Date.ToString(); int keep = 5; string project = list[0].Project; oSheet.Cells[1, 3] = "MiKES Configuration Management __" + project + "__ As-Built Report"; oSheet.Cells[3, 1] = "Report Date :"; oSheet.Cells[3, 2] = CurrentDate; oSheet.Cells[keep, 1] = "PART NO"; oSheet.Cells[keep, 2] = "REF.DES."; oSheet.Cells[keep, 3] = "DESCRIPTION"; oSheet.Cells[keep, 4] = "SERIAL NO"; oSheet.Cells[keep, 5] = "C/S"; oSheet.Cells[keep, 6] = "D/C"; oSheet.Cells[keep, 7] = "REMARK"; keep++; foreach(Classes.CMNewPart item in list) { try { oSheet.Cells[keep, 1] = item.PartNo; oSheet.Cells[keep, 2] = item.RefDes; oSheet.Cells[keep, 3] = item.Description1; oSheet.Cells[keep, 4] = item.SerialNo; oSheet.Cells[keep, 5] = item.Cs; oSheet.Cells[keep, 6] = item.Dc; oSheet.Cells[keep, 7] = item.Remark; } catch (Exception) { } keep++; } 

您需要使用Response对象将文件发送到客户端。 要忽略客户端打开excel文件时的警告消息 –

在此处输入图像描述

要防止这种情况,您需要在响应中使用示例代码提及内容类型和长度

 //Read the Excel file in a byte array. here pck is the Excelworkbook Byte[] fileBytes = pck.GetAsByteArray(); //Clear the response Response.Clear(); Response.ClearContent(); Response.ClearHeaders(); Response.Cookies.Clear(); //Add the header & other information Response.Cache.SetCacheability(HttpCacheability.Private); Response.CacheControl = "private"; Response.Charset = System.Text.UTF8Encoding.UTF8.WebName; Response.ContentEncoding = System.Text.UTF8Encoding.UTF8; Response.AppendHeader("Content-Length", fileBytes.Length.ToString()); Response.AppendHeader("Pragma", "cache"); Response.AppendHeader("Expires", "60"); Response.AppendHeader("Content-Disposition", "attachment; " + "filename=\"ExcelReport.xlsx\"; " + "size=" + fileBytes.Length.ToString() + "; " + "creation-date=" + DateTime.Now.ToString("R") + "; " + "modification-date=" + DateTime.Now.ToString("R") + "; " + "read-date=" + DateTime.Now.ToString("R")); Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; //Write it back to the client Response.BinaryWrite(fileBytes); Response.End(); 

您可以编写excel文件来响应HttpResponse.WriteFile方法

 string CurrentDate; DateTime saveNow = DateTime.Now; CurrentDate = saveNow.Date.ToShortDateString(); string reportContent = prepareHTM(); string pathFile = Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory) + "\\As_Build_Report_ "+ CurrentDate + ".html"; using (StreamWriter outfile = new StreamWriter(pathFile, true)) { outfile.WriteLine(reportContent); } System.IO.FileInfo file = new System.IO.FileInfo(pathFile); Response.Clear(); Response.Charset="UTF-8"; Response.ContentEncoding=System.Text.Encoding.UTF8; Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); Response.AddHeader("Content-Length", file.Length.ToString()); Response.ContentType = "application/ms-excel"; Response.WriteFile(file.FullName); Response.End(); 

需要注意的一件重要事情是,所选择的最佳答案适合您:
您必须使用与问题中隐含的Microsoft.Office.Interop.Excel不同的库。 你必须使用EPPlus。 这是您在项目中设置的方式:

  1. 从Visual Studio的软件包管理器控制台,键入:Install-Package EPPlus(这将根据需要安装库和引用)
  2. 添加此using语句( using OfficeOpenXml;

这是一些示例代码,用于创建excel包(pck),如最佳答案中所述:

  ExcelPackage pck = new ExcelPackage(); ExcelWorksheet ws = pck.Workbook.Worksheets.Add("exported data"); // Excel sheet headings ws.Cells[1, 1].Value = "Column 1 title"; ws.Cells[1, 2].Value = "Column 2 title"; 

现在您可以使用最佳答案中提供的代码。

您无法直接将其保存到特定的客户端位置。 你可以做的是返回带有该请求的文件,以便在浏览器端弹出一个“保存文件”对话框。