31

スプレッドシートは引き続き表示されますが、警告メッセージが表示されます。この問題は、Excel 2007 が以前のバージョンの Excel よりも拡張子に一致する形式についてよりうるさいために発生しているようです。

この問題は最初に ASP.Net プログラムによって発見され、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

4

6 に答える 6

29

http://blogs.msdn.com/vsofficedeveloper/pages/Excel-2007-Extension-Warning.aspx

これは基本的に、MS があなたが説明した問題を認識しており、ASP.NET コード内から抑制できないことを説明するリンクです。クライアントのレジストリで抑制/修正する必要があります。

于 2009-03-16T22:40:43.483 に答える
18

私と同じように、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は、ファイルの内容とファイル拡張子が一致しないという警告を表示しなくなります。

于 2009-07-21T14:56:31.217 に答える
1

数日間、この問題を解決しようとしていました。最後に、ここで解決策を見つけました: http://www.aspsnippets.com/Articles/Solution-ASPNet-GridView-Export-to-Excel-The-file-you-are-trying-to-open-is-ファイル拡張子.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();
        }
    }
于 2015-05-12T08:05:30.240 に答える
0

私はグリッドを使用して応答タイプを変更するのが好きですが、その方法論にはまだ問題がありません。タブ区切りのストレートファイルは使用していません。1 つの可能性として、\n は \r\n である必要があります。ただのブラインドショット。

于 2009-03-16T22:30:22.870 に答える
-2

使用する

content-type=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

拡張子を xlsx として指定します

于 2009-03-16T22:39:56.247 に答える