WebApi 使用 EPPlus excel 文件下载 - 打开时出错 - 无法读取内容 - 修复
WebApi using EPPlus excel file download - error on open - unreadable content - repair
在我的 extjs 网络客户端上,我点击了一个按钮,它下载了一个 excel 模板并填充了数据。当我点击 CHROME 弹出窗口打开 excel 文件时,它给我下面的 excel 错误消息。有谁知道我该如何解决这个问题?
实际文件对我来说很好。
这是我的 webapi 代码
public HttpResponseMessage CreatePosSheet(string cName, string calcMethod, string username, int cid, HttpRequestMessage Request)
{
string templatePath = HttpContext.Current.Server.MapPath(@"~\tempLocation\");
string templateFileName = System.Configuration.ConfigurationManager.AppSettings["TemplateFileName"];
string templateName = string.Format("{0}{1}", templatePath, templateFileName);
FileInfo xlTemplate = new FileInfo(templateName);
HttpResponseMessage response;
response = Request.CreateResponse(HttpStatusCode.OK);
MediaTypeHeaderValue mediaType = new MediaTypeHeaderValue("application/octet-stream");
//MediaTypeHeaderValue mediaType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.Content = new ByteArrayContent(ExcelSheet(xlTemplate, cName, calcMethod, username, cid));
response.Content.Headers.ContentType = mediaType;
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = "Orders.xlsx";
return response;
}
这里是ExcelSheet代码
public byte[] ExcelSheet(FileInfo xlTemplate, string cName, string calcMethod, string username, int cid)
{
object[] tempObj = Orders(username, cid);
List<TradeDetailDTO> tList = new List<TradeDetailDTO>();
List<TempClass> acctList = new List<TempClass>();
List<TempClass2> sectorList = new List<TempClass2>();
tList = tempObj[0] as List<TradeDetailDTO>;
acctList = tempObj[1] as List<TempClass>;
sectorList = tempObj[2] as List<TempClass2>;
#region set column variables
int colAcctNum = 1;
int colAcctDesc = 2;
int colAcctTrdLvl = 5;
int colCname = 6;
int rowCname = 15;
#endregion
using (var package = new ExcelPackage(xlTemplate))
{
var worksheet = package.Workbook.Worksheets["Data"];
var wkshtFormula = package.Workbook.Worksheets["Formulas"];
wkshtFormula.Cells[rowCname, colCname].Value = cName;
package.Save();
return package.GetAsByteArray();
}
}
您必须删除对 .Save()
的调用,因为它会作为副作用关闭 pck。有关详细信息,请参阅此内容:
在我的 extjs 网络客户端上,我点击了一个按钮,它下载了一个 excel 模板并填充了数据。当我点击 CHROME 弹出窗口打开 excel 文件时,它给我下面的 excel 错误消息。有谁知道我该如何解决这个问题? 实际文件对我来说很好。
这是我的 webapi 代码
public HttpResponseMessage CreatePosSheet(string cName, string calcMethod, string username, int cid, HttpRequestMessage Request)
{
string templatePath = HttpContext.Current.Server.MapPath(@"~\tempLocation\");
string templateFileName = System.Configuration.ConfigurationManager.AppSettings["TemplateFileName"];
string templateName = string.Format("{0}{1}", templatePath, templateFileName);
FileInfo xlTemplate = new FileInfo(templateName);
HttpResponseMessage response;
response = Request.CreateResponse(HttpStatusCode.OK);
MediaTypeHeaderValue mediaType = new MediaTypeHeaderValue("application/octet-stream");
//MediaTypeHeaderValue mediaType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.Content = new ByteArrayContent(ExcelSheet(xlTemplate, cName, calcMethod, username, cid));
response.Content.Headers.ContentType = mediaType;
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = "Orders.xlsx";
return response;
}
这里是ExcelSheet代码
public byte[] ExcelSheet(FileInfo xlTemplate, string cName, string calcMethod, string username, int cid)
{
object[] tempObj = Orders(username, cid);
List<TradeDetailDTO> tList = new List<TradeDetailDTO>();
List<TempClass> acctList = new List<TempClass>();
List<TempClass2> sectorList = new List<TempClass2>();
tList = tempObj[0] as List<TradeDetailDTO>;
acctList = tempObj[1] as List<TempClass>;
sectorList = tempObj[2] as List<TempClass2>;
#region set column variables
int colAcctNum = 1;
int colAcctDesc = 2;
int colAcctTrdLvl = 5;
int colCname = 6;
int rowCname = 15;
#endregion
using (var package = new ExcelPackage(xlTemplate))
{
var worksheet = package.Workbook.Worksheets["Data"];
var wkshtFormula = package.Workbook.Worksheets["Formulas"];
wkshtFormula.Cells[rowCname, colCname].Value = cName;
package.Save();
return package.GetAsByteArray();
}
}
您必须删除对 .Save()
的调用,因为它会作为副作用关闭 pck。有关详细信息,请参阅此内容: