Excel 2007에서 Excel 스프레드시트를 생성하면 "확장자 오류와 다른 파일 형식"이 발생한다.
스프레드시트는 계속 표시되지만 경고 메시지가 표시됩니다.이 문제는 Excel 2007이 이전 버전의 Excel보다 확장자 포맷에 더 까다롭기 때문에 발생하는 것으로 보입니다.
이 문제는 처음에 ASP에 의해 검출되었다.Net program 및 products Excel 오류 "열려고 하는 파일 "Spreadsheet.aspx-18.xls"가 파일 확장자로 지정된 형식과 다릅니다.확인..."다만, 파일을 열면, 정상적으로 표시됩니다.Excel 2007을 사용하고 있습니다.Firefox는 이 파일을 Excel 97-2003 워크시트로 식별합니다.
여기 ASP가 있습니다.문제를 발생시키는 NET 페이지:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Spreadsheet.aspx.cs" Inherits="Spreadsheet" %>
파일 뒤에 있는 코드는 다음과 같습니다.
public partial class Spreadsheet : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e)
{
Response.ContentType = "application/vnd.ms-excel";
Response.Clear();
Response.Write("Field\tValue\tCount\n");
Response.Write("Coin\tPenny\t443\n");
Response.Write("Coin\tNickel\t99\n");
}
}
T
http://blogs.msdn.com/vsofficedeveloper/pages/Excel-2007-Extension-Warning.aspx
이 링크는 기본적으로 MS가 당신이 설명한 문제를 알고 있으며 ASP 내에서 억제할 수 없음을 나타냅니다.NET 코드클라이언트의 레지스트리에서 억제/고정되어야 합니다.
저와 마찬가지로 Excel 시트를 2003 XML 문서로 생성하는 경우 다음을 수행하여 경고를 제거할 수 있습니다.
XML 출력에 추가됨:
<?xml version="1.0" encoding="utf-16"?>
<?mso-application progid="Excel.Sheet"?>
...
다운로드 페이지에 추가됨:
// Properly outputs the xml file
response.ContentType = "text/xml";
// This header forces the file to download to disk
response.AddHeader("content-disposition", "attachment; filename=foobar.xml");
이제 Excel 2007은 파일 내용과 파일 확장자가 일치하지 않는다는 경고를 표시하지 않습니다.
나는 이 질문을 여러 번 보았다.오늘도 같은 문제가 발생하여 NPOI npoi.codeplex.com/를 사용하여 문제를 해결했습니다.
public static class ExcelExtensions
{
/// <summary>
/// Creates an Excel document from any IEnumerable returns a memory stream
/// </summary>
/// <param name="rows">IEnumerable that will be converted into an Excel worksheet</param>
/// <param name="sheetName">Name of the Ecel Sheet</param>
/// <returns></returns>
public static FileStreamResult ToExcel(this IEnumerable<object> rows, string sheetName)
{
// Create a new workbook and a sheet named by the sheetName variable
var workbook = new HSSFWorkbook();
var sheet = workbook.CreateSheet(sheetName);
//these indexes will be used to track to coordinates of data in our IEnumerable
var rowIndex = 0;
var cellIndex = 0;
var excelRow = sheet.CreateRow(rowIndex);
//Get a collection of names for the header by grabbing the name field of the display attribute
var headerRow = from p in rows.First().GetType().GetProperties()
select rows.First().GetAttributeFrom<DisplayAttribute>(p.Name).Name;
//Add headers to the file
foreach (string header in headerRow)
{
excelRow.CreateCell(cellIndex).SetCellValue(header);
cellIndex++;
}
//reset the cells and go to the next row
cellIndex = 0;
rowIndex++;
//Inset the data row
foreach (var contentRow in rows)
{
excelRow = sheet.CreateRow(rowIndex);
var Properties = rows.First().GetType().GetProperties();
//Go through each property and inset it into a single cell
foreach (var property in Properties)
{
var cell = excelRow.CreateCell(cellIndex);
var value = property.GetValue(contentRow);
if (value != null)
{
var dataType = value.GetType();
//Set the type of excel cell for different data types
if (dataType == typeof(int) ||
dataType == typeof(double) ||
dataType == typeof(decimal) ||
dataType == typeof(float) ||
dataType == typeof(long))
{
cell.SetCellType(CellType.NUMERIC);
cell.SetCellValue(Convert.ToDouble(value));
}
if (dataType == typeof(bool))
{
cell.SetCellType(CellType.BOOLEAN);
cell.SetCellValue(Convert.ToDouble(value));
}
else
{
cell.SetCellValue(value.ToString());
}
}
cellIndex++;
}
cellIndex = 0;
rowIndex++;
}
//Set the width of the columns
foreach (string header in headerRow)
{
sheet.AutoSizeColumn(cellIndex);
cellIndex++;
}
return workbook.GetDownload(sheetName);
}
/// <summary>
/// Converts the NPOI workbook into a byte array for download
/// </summary>
/// <param name="file"></param>
/// <param name="fileName"></param>
/// <returns></returns>
public static FileStreamResult GetDownload(this NPOI.HSSF.UserModel.HSSFWorkbook file, string fileName)
{
MemoryStream ms = new MemoryStream();
file.Write(ms); //.Save() adds the <xml /> header tag!
ms.Seek(0, SeekOrigin.Begin);
var r = new FileStreamResult(ms, "application/vnd.ms-excel");
r.FileDownloadName = String.Format("{0}.xls", fileName.Replace(" ", ""));
return r;
}
/// <summary>
/// Get's an attribute from any given property
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="instance"></param>
/// <param name="propertyName"></param>
/// <returns></returns>
public static T GetAttributeFrom<T>(this object instance, string propertyName) where T : Attribute
{
var attrType = typeof(T);
var property = instance.GetType().GetProperty(propertyName);
return (T)property.GetCustomAttributes(attrType, false).First();
}
}
도움이 되시길 바랍니다.
저는 며칠 동안 이 문제를 해결하려고 했습니다.드디어 해결책을 찾았습니다.http://www.aspsnippets.com/Articles/Solution-ASPNet-GridView-Export-to-Excel-The-file-you-are-trying-to-open-is-in-a-different-format-than-specified-by-the-file-extension.aspx
네임스페이스:
using System.IO;
using System.Data;
using ClosedXML.Excel;
코드:
DataTable dt = new DataTable("GridView_Data");
// Fill your DataTable here...
//Export:
using (XLWorkbook wb = new XLWorkbook())
{
wb.Worksheets.Add(dt);
Response.Clear();
Response.Buffer = true;
Response.Charset = "";
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename=GridView.xlsx");
using (MemoryStream MyMemoryStream = new MemoryStream())
{
wb.SaveAs(MyMemoryStream);
MyMemoryStream.WriteTo(Response.OutputStream);
Response.Flush();
Response.End();
}
}
나는 그리드를 사용하고 반응 유형을 변경하는 것을 더 좋아한다. 나는 아직 그 방법론에 문제가 없다.스트레이트 탭 구분 파일을 사용하지 않았습니다.예를 들어 \n은 \r\n이어야 합니다.그냥 맹목적인 사격일 뿐이야.
사용하다
content-type=application/vnd.openxmlformats-officedocument.contentetml.시트
또한 내선번호를 xlsx로 지정합니다.
언급URL : https://stackoverflow.com/questions/652377/excel-spreadsheet-generation-results-in-different-file-format-than-extension-er
'programing' 카테고리의 다른 글
WPF에서 라벨 텍스트를 중앙에 배치하려면 어떻게 해야 합니까? (0) | 2023.04.17 |
---|---|
panda.read_excel에서 헤더마다 행 범위 건너뛰기 (0) | 2023.04.17 |
iPhone - 전체 UI에서 UIView 위치 가져오기 (0) | 2023.04.17 |
문자열에 C++ 문자열이 포함되어 있는지 확인합니다. (0) | 2023.04.17 |
추적되지 않은 파일을 어떻게 저장합니까? (0) | 2023.04.17 |