在 asp.net 使用网络 API 和 javascript 从服务器下载 excel 文件到本地机器
download excel file from server to local machine in asp.net using web API and javascript
这是我的代码:
Html:
<a class="castrol_button " data-bind="click: createExcelFile">download excel file</a>
在我的代码的 js 部分我有这个
createExcelFile = function (data, event) {
//call an API
}
在我的控制器中我有这个代码:
[HttpGet]
public HttpResponseMessage CreatePaymentExcelFile(long Customerid)
{
try
{
// get data from DB to list which name is lst
// using epplus dll for creating Excel file
var file =new FileInfo(HttpContext.Current.Server.MapPath("~/DesktopModules/Castrolo2c/Resource/PaymentList.xlsx");
using (ExcelPackage xlPackage = new ExcelPackage(file))
{
ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets.Add("PaymentList");
if (worksheet != null)
{
int row = 2;
foreach( var i in res )
{
worksheet.Cells[row, 1].Value = i.typename;
worksheet.Cells[row, 2].Value = i.pNO;
worksheet.Cells[row, 3].Value = i.Date;
worksheet.Cells[row, 4].Value = i.cashdate;
worksheet.Cells[row, 5].Value = i.Money;
worksheet.Cells[row, 6].Value = i.bedehkari;
worksheet.Cells[row, 7].Value = i.bestankari;
row++;
}
worksheet.Column(1).Width = 16;
xlPackage.Workbook.Properties.Title = "patments";
xlPackage.Workbook.Properties.Company = "Castrol";
xlPackage.Save();
return Request.CreateResponse(HttpStatusCode.OK);
}
catch (Exception e)
{
return Request.CreateResponse(HttpStatusCode.InternalServerError, "ERR"));
} }
一切正常,我的 excel 文件已在我服务器的文件夹中创建。但我想将文件复制到客户端机器。我该怎么做?
你 return http 代码所以你应该 return
而不是这个
Response.Clear();
Response.AddHeader("", "");
Response.Charset = System.Text.UTF8Encoding.UTF8.WebName;
Response.AddHeader("content-disposition", "attachment; filename="MyFile.xlsx");
Response.ContentType = "application/text";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
Response.BinaryWrite(xlPackage.GetAsByteArray());
Response.End();
这应该可以完成工作
JS 应该是这样的:
createExcelFile = function (data, event) {
e.preventDefault();
window.location.href = '...'; //The Api Address
}
和 Api:
[HttpGet]
public HttpResponseMessage GetExcel()
{
using (var p = new OfficeOpenXml.ExcelPackage())
{
var ws = p.Workbook.Worksheets.Add("My WorkSheet");
ws.Cells["A1"].Value = "A1";
var stream = new System.IO.MemoryStream(p.GetAsByteArray());
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StreamContent(stream)
};
result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
{
FileName = "myworkbook.xlsx"
};
result.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentLength = stream.Length;
return result;
}
}
这是我的代码: Html:
<a class="castrol_button " data-bind="click: createExcelFile">download excel file</a>
在我的代码的 js 部分我有这个
createExcelFile = function (data, event) {
//call an API
}
在我的控制器中我有这个代码:
[HttpGet]
public HttpResponseMessage CreatePaymentExcelFile(long Customerid)
{
try
{
// get data from DB to list which name is lst
// using epplus dll for creating Excel file
var file =new FileInfo(HttpContext.Current.Server.MapPath("~/DesktopModules/Castrolo2c/Resource/PaymentList.xlsx");
using (ExcelPackage xlPackage = new ExcelPackage(file))
{
ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets.Add("PaymentList");
if (worksheet != null)
{
int row = 2;
foreach( var i in res )
{
worksheet.Cells[row, 1].Value = i.typename;
worksheet.Cells[row, 2].Value = i.pNO;
worksheet.Cells[row, 3].Value = i.Date;
worksheet.Cells[row, 4].Value = i.cashdate;
worksheet.Cells[row, 5].Value = i.Money;
worksheet.Cells[row, 6].Value = i.bedehkari;
worksheet.Cells[row, 7].Value = i.bestankari;
row++;
}
worksheet.Column(1).Width = 16;
xlPackage.Workbook.Properties.Title = "patments";
xlPackage.Workbook.Properties.Company = "Castrol";
xlPackage.Save();
return Request.CreateResponse(HttpStatusCode.OK);
}
catch (Exception e)
{
return Request.CreateResponse(HttpStatusCode.InternalServerError, "ERR"));
} }
一切正常,我的 excel 文件已在我服务器的文件夹中创建。但我想将文件复制到客户端机器。我该怎么做?
你 return http 代码所以你应该 return
而不是这个 Response.Clear();
Response.AddHeader("", "");
Response.Charset = System.Text.UTF8Encoding.UTF8.WebName;
Response.AddHeader("content-disposition", "attachment; filename="MyFile.xlsx");
Response.ContentType = "application/text";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
Response.BinaryWrite(xlPackage.GetAsByteArray());
Response.End();
这应该可以完成工作
JS 应该是这样的:
createExcelFile = function (data, event) {
e.preventDefault();
window.location.href = '...'; //The Api Address
}
和 Api:
[HttpGet]
public HttpResponseMessage GetExcel()
{
using (var p = new OfficeOpenXml.ExcelPackage())
{
var ws = p.Workbook.Worksheets.Add("My WorkSheet");
ws.Cells["A1"].Value = "A1";
var stream = new System.IO.MemoryStream(p.GetAsByteArray());
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StreamContent(stream)
};
result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
{
FileName = "myworkbook.xlsx"
};
result.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentLength = stream.Length;
return result;
}
}