열려는 파일이 As에서 파일 확장명으로 지정된 형식과 다릅니다.그물
열려는 파일이 excel에서 파일을 열려고 할 때 파일 확장자 c# 오류에 의해 지정된 형식과 다릅니다.
여기 제 코드가 있습니다.
public ActionResult Export(string filterBy)
{
MemoryStream output = new MemoryStream();
StreamWriter writer = new StreamWriter(output, Encoding.UTF8);
var data = City.GetAll().Select(o => new
{
CountryName = o.CountryName,
StateName = o.StateName,
o.City.Name,
Title = o.City.STDCode
}).ToList();
var grid = new GridView { DataSource = data };
grid.DataBind();
var htw = new HtmlTextWriter(writer);
grid.RenderControl(htw);
writer.Flush();
output.Position = 0;
return File(output, "application/vnd.ms-excel", "test.xls");
}
엑셀을 열려고 할 때 이 오류가 발생합니다.
열려는 파일이 파일 확장명으로 지정된 형식과 다릅니다.
예를 클릭한 후 파일이 제대로 열립니다. 그러나 이 메시지가 표시되지 않도록 합니다.
CloseXML을 사용하여 문제를 해결했습니다.
public static void ExportToExcel(IEnumerable<dynamic> data, string sheetName)
{
XLWorkbook wb = new XLWorkbook();
var ws = wb.Worksheets.Add(sheetName);
ws.Cell(2, 1).InsertTable(data);
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
HttpContext.Current.Response.AddHeader("content-disposition", String.Format(@"attachment;filename={0}.xlsx",sheetName.Replace(" ","_")));
using (MemoryStream memoryStream = new MemoryStream())
{
wb.SaveAs(memoryStream);
memoryStream.WriteTo(HttpContext.Current.Response.OutputStream);
memoryStream.Close();
}
HttpContext.Current.Response.End();
}
설치된 ClosedXNuget Package Manager를 사용하는 내 프로젝트의 ML.
열려는 파일이 파일 확장명으로 지정된 형식과 다릅니다.
생성된 파일이 실제 엑셀 파일이 아니기 때문에 경고 메시지가 계속 표시됩니다.생성된 파일을 들여다보면 html 태그의 묶음일 뿐입니다.기억하세요.GridView
의 RenderControl은 html 테이블을 생성합니다.
문제를 해결하려면 실제 Excel 파일(NPOI가 사용할 수 있는 도구 중 하나)을 생성하는 타사 도구를 사용하거나 쉼표로 구분된 파일 또는 단순히 csv 파일을 생성한 후 해당 파일을 반환해야 합니다.
만약 다른 사람이 이걸 우연히 발견한다면,저는 C#에서 블롭을 즉시 파일로 변환해야 했습니다.pdf는 잘 작동했고 excel은 OP가 설명하는 것과 같은 오류를 주었습니다.
이것은 다른 파일 형식과 다르게 엑셀을 처리하는 코드입니다.
엑셀 애플리케이션/옥텟 스트림에 실제 파일 이름을 부여하여 문제를 해결했습니다.아마도 그것을 하는 가장 깨끗한 방법은 아닐 것이지만 그것은 나의 목적에 충분했습니다.
string theExt = Path.GetExtension(theDoc.documentFileName).ToUpper();
Response.Clear();
if (theExt == ".XLS" || theExt == ".XLSX"){
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", string.Format("inline; filename={0}", theDoc.documentFileName));
}
else{
Response.ContentType = theDoc.documentMimeType;
Response.AddHeader("Content-Disposition", string.Format("inline; filename={0}", theDoc.documentTitle));
}
using (MemoryStream stream = new MemoryStream(theDoc.file))
{
stream.WriteTo(Response.OutputStream);
stream.Close();
};
Response.End();
CloseXML로 데이터셋을 Excel 파일로 내보내야 하는 경우.
Dataset ds = { your data from db }
var xlsx = new XLWorkbook();
var dataTable = ds.Tables[0];
xlsx.Worksheets.Add(dataTable);
xlsx.SaveAs("export.xlsx");
언급URL : https://stackoverflow.com/questions/16144900/the-file-you-are-trying-to-open-is-in-a-different-format-than-specified-by-the-f
'programing' 카테고리의 다른 글
평균 시간 간격은 어떻게 합니까? (0) | 2023.07.15 |
---|---|
Mongoose 및 Node.js 및 언더스코어로 코드를 생성하는 간단한 방법은 무엇입니까? (0) | 2023.07.15 |
"R" 재료를 검색하는 방법은 무엇입니까? (0) | 2023.07.15 |
스프링 JPA:데이터를 손실하지 않고 전환하는 방법 (0) | 2023.07.15 |
하나의 서버에 있는 두 개의 서로 다른 데이터베이스에 있는 테이블 간에 INER JOIN을 사용하여 쿼리 업데이트 (0) | 2023.07.15 |