如何在ASP.NET中保存Microsoft.Office.Interop.Excel.Workbook

时间:2015-12-11 08:54:11

标签: c# asp.net excel

所以问题是我在代码中创建了一个 Microsoft.Office.Interop.Excel 对象,我想保存它。但是,我希望用户能够选择保存文件的位置。

我尝试使用Response但没有成功。

PS:如果重要的话我会使用ASP.NET Webforms和.NET 4.5。

1 个答案:

答案 0 :(得分:2)

Microsoft.Office.Interop.Excel的唯一选择是将Excel文件保存到服务器,然后将文件传输到客户端。

如果这不是你想要的,你可以使用NPOI。您可以将其作为NuGet Package获取。 NPOI CodePlex

使用Microsoft.Office.Interop.Excel

string filname = @"C:\Upload\filename.xls";
workBook.SaveAs(filname)
workBook.Close();

Response.ContentType = "application/vnd.ms-excel"; //xls
// For xlsx, use: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Response.AddHeader(String.Format("content-disposition", "attachment; filename={0}"), Path.GetFileName(filename));
Response.TransmitFile(filname);
Response.End();

使用NPOI

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet("SheetName");

using (MemoryStream exportData = new MemoryStream())
{
    workbook.Write(exportData);
    Response.ContentEncoding = Encoding.GetEncoding("ISO-8859-1");
    Response.Charset = Encoding.GetEncoding("ISO-8859-1").EncodingName;
    Response.ContentType = "application/vnd.ms-excel"; //xls
    // For xlsx, use: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
    Response.AddHeader("content-disposition", String.Format("attachment; filename={0}.xls", "yourFilename"));
    Response.Clear();
    Response.BinaryWrite(exportData.GetBuffer());
    Response.End();
}