Excelの保存についての問題と対処方法

このQ&Aのポイント
  • Excelの保存に関する問題として、Excel2007及び2010で保存したExcelファイルを開こうとすると、拡張子とファイルの内容が一致しないというメッセージが表示されるという現象があります。
  • 対処方法として、保存時のContent-Typeを"Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"に設定することが挙げられます。しかし、この対処方法を試した場合でも、まだメッセージが表示されることがあります。
  • いかなるバージョンのExcelで保存しても、上記のメッセージを表示させない方法は現時点では確立されていません。しかし、保存後に一度開いて再保存することで、メッセージを表示させずに開くことができるようになります。
回答を見る
  • ベストアンサー

Excelの保存について

お世話になります。 <環境>  Web/DBサーバー    Windows2003Server    IIS6.0    SQL Server2000  クライアントPC    WindowsXP Pro /Windows7 Pro    ブラウザ IE7/8/9    Excel 2003/2007/2010 ASPにてSQLよりデータを抽出し、Webページ上に表示された内容をダウンロードボタンを押すことによりExcelにて保存できるようにしております。 Response.ContentType = "Application/vnd.ms-excel" Response.AddHeader "Content-Disposition", "attachment;filename=filemane.xls" Excel2003では保存したExcelは問題なく開けるのですが、Excel2007及び2010で保存し開こうとすると『開こうとしているファイル"○○○○○.xls"の形式は、ファイル拡張子が示す形式と異なります。このファイルを開く前に、ファイルが破損していないこと、信頼できる発行元からのファイルであることを確認してください。ファイルを今すぐ開きますか?』とメッセージが表示されてしまいます。 調べたところ、2007以降のバージョンでは拡張子とファイルの内容が一致しない場合に、確認メッセージを表示する機能が追加されたようです。 対処として、 Response.ContentType = "Application/vnd.openxmlformats-officedocument. spreadsheetml.sheet" Response.AddHeader "Content-Disposition", "attachment;filename=filemane.xlsx" とやってみましたが、やはりメッセージは表示されます。 『はい』を選択すると普通に開き、保存しなおすとそのファイルではメッセージは表示されなくなくなるのですが、できればこの手間は省きたいところです。 どのバージョンのExcelで保存した場合でも、開く際に上記メッセージを表示させないようにするにはどのようにすればよいでしょうか。 ご教授の程、宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

そうですね。 アイコンや関連付けは、拡張子だけを見ているので、中のデータが実際には違っても、Excelのデータのように表示されます。 Excelは、拡張子xlsのデータとして開いてみて、中身の形式が違うことがわかると、別の形式で読み込めないか試すのでしょう。そして、2007以降は、その際にメッセージが出るように変更されているわけです。 サーバーでExcel形式のデータを作成するには、サーバーにExcelをインストールしてExcelのプロセスを操作するか、Excel以外でExcel形式のデータを作成できるものを導入するしかないでしょう。

その他の回答 (2)

回答No.2

> 送信しているファイルの内容は、Excel形式のデータではなく、テキストデータなどではないですか? この仮定が正しいのかどうかの返答がないことには、回答のしようがないのですが。

naoto0216
質問者

お礼

ご回答ありがとうございます。 おっしゃる通り、テキストデータでございます。 そのデータをクライアントにて開いたときに、Excelファイルとして認識させてExcelで開かせたいところです。 なお、2003では(先に記載した方法で)問題無いと認識していたのですが、保存したファイルを開いて名前を付けて保存とやろうとするとファイルの種類が『Webページ(*.htm; *.html)』となることが判明しました。見た目上は問題無いのですが(ファイルのアイコンはExcelで、Excelで開き、エラーも出ない)、中身はWebページだったようです。ファイルの種類をExcelとし、保存しなおすことでExcelファイルと認識されるようです。 2003と2007以降では大きく仕様が変わり、2003で出来ていたものが2007以降では出来なくなった・・という認識でおりましたが、2003でも結局エラーメッセージが出ないだけでWebページだったということになります。

回答No.1

送信しているファイルの内容は、Excel形式のデータではなく、テキストデータなどではないですか? そうであれば、まさにそのメッセージの意図する状況なので、そのままで回避する方法はありません。 メッセージを表示しないようにするには、Excel形式のデータを作成するしかありません。

naoto0216
質問者

お礼

早速のご回答ありがとうございます。 『Excel形式のデータを作成するしかありません。』ということですが、具体的にどのように作成するのかご教授頂けませんでしょうか。 勉強不足で申し訳ございません。宜しくお願い致します。

関連するQ&A

  • EXCELファイルの複数ダウンロードについて

    お世話になっております。 【環境】 ASP.NET(VB) IIS 【質問】 ボタン押下時に2つの異なる帳票(A帳票.xls、B帳票.xls)を作成し、別々にダウンロード処理をさせたいのですが、上記2帳票を別々にダウンロードさせるための実装方法がわかりません。 1つの帳票でしたら、下記の実装方法でダウンロードをすることが確認できました。 Response.Clear() Response.ContentType = "application/vnd.ms-excel" Response.Charset = "" Response.AddHeader("content-disposition", "attachment; filename=A帳票.xls") Response.WriteFile("D:\temp/A帳票.xls") どなたかご存知の方がいらっしゃれば、ご教授ください。 よろしくお願いいたします。

  • クライアントのファイルダウンロード後にサーバー側のファイルを削除したい

    お世話になっております。 ASP.NET(VB)を用いてExcelのファイルを操作保存し、保存してあるファイルをクライアントにダウンロードさせた後にExcelのファイルを削除させようとしています。 ですが、ファイルダウンロード実行する前にファイルが削除されています。 感じとしては、IEにダウンロードするように命令するのですが、そのレスポンスが遅くて削除になってしまっている感じがします。 できればクライアントのダウンロード完了をきっかけに削除するようなコードにしたいです。 どなたかご教授願えませんでしょうか。 以下 コード オブジェクトの宣言、処理 (省略) '*ファイル保存ブロック* 開始 '保存ファイル名 xlFilePath = ("C:\0.xls") '保存時の問合せのダイアログを非表示に設定 xlApp.DisplayAlerts = False xlSheet.SaveAs(xlFilePath) xlApp.DisplayAlerts = True Excel終了、オブジェクト解放 (省略) '*excelファイルダウンロードブロック* 開始 Response.Clear() Response.ContentType = "Application / vnd.ms - Excel" Response.AddHeader("Content-Disposition", "attachment;filename=" & "0.xls") Response.WriteFile("c:\0.xls") My.Computer.FileSystem.DeleteFile("c:\0.xls") 処理終了

  • JSPからエクセルダウンロードでIEが強制終了

    WEBサーバーにJSPでエクセルのダウンロード機能を作成しましたが 実際にIEでエクセルのダウンロードを行うと、使用する端末によって元画面が強制終了してしまいます。正常にダウンロードできる端末もあります。 ソースコードのヘッダ部は下記のように記述しています。 <%@ page contentType="application/vnd.ms-excel; charset=WINDOWS-31J"%> <%response.setHeader("Content-Disposition","attachment; filename=sample.xls"); 問題は、IEの設定でしょうか? もし対応方法があれば教えて頂けないでしょうか? よろしくお願いします。

  • ASPでエクセルの印刷定義・・・

    ASPの初心者です。皆さんご教授願います。 上手くお伝えできるかどうかも不安ですが・・・  ASPでエクセルを起動しています。  そのエクセルをA4横とか、ページヘッダとかページを指定したい(ASP上で)のですが、どのような設定、スクリプトになるんでしょうか? ちなみに・・・ Response.Clear() Response.ContentEncoding = System.Text.Encoding.GetEncoding("shift-jis") Response.ContentType = "application/vnd.ms-excel" Response.AppendHeader("Content-Disposition", "inline;filename=out_excel.xls;") Response.Write("<table>") Response.Write("<tr>") : : Response.Write("</tr>") Response.Write("</table>") Response.End() でエクセルを表示しています。 (Win2K,asp.net) 上手くお伝えできなかったら、すみません。 よろしくお願いします。

  • ASPでExcelファイルのダウンロード

    はじめて質問します。 よろしくお願いいたします。 さて、現在ASPでDBから取得したデータをExcelでダウンロードする機能を実装しています。 ダウンロード自体は問題なくできています。 #ソース Response.ContentType = "application/octet-stream" Response.AddHeader "Content-Disposition","attachment; filename=sample.xls" Response.Write "項目1" & vbTab & "項目2" Response.End #ここまで この状態ですと、「sample」というSheetのA列とB列にそれぞれ、項目1と項目2が入っているExcelファイルがダウンロードできます。 ここからが質問で、今回シートを4枚設けたいと考えています。現状では「ファイル名」のSheetが一枚できるだけなので、複数のSheetにそれぞれデータを書き込む方法をご存知の方はいらっしゃらないでしょうか? なお、Excelのライブラリを使用しない方法がベストと考えています。 以上、長々となりましたが、よろしくご教示ください。

  • VBScriptでファイル保存先のデフォルト設定

    こんにちわ。 ASP(VBScript)で、CSV形式のデータを出力する処理を作成しています。 ヘッダー部に Response.ContentType = "text/csv" Response.AddHeader "Content-Disposition","filename=" & CSVFileName と書いて、該当のページを開いたら、ファイル保存のダイ アログを表示するようにしているのですが、ファイル保存 先は、デフォルトではデスクトップになっています。 これを、Cドライブあたりにしたいのですが、VBScriptで その辺の制御はできるのでしょうか?

  • ASP.Net 全角文字コード

    大変お世話になっております。 現在、ObjectDataSource のデータをCSVファイルにしたいと思い、まずは固定データをテストとしまして下記のプログラムを書きました。(ほとんど受け売りです^^;)   Protected Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click     Dim csvStr As String     csvStr = "1,AAA,これはテスト" + vbCrLf _      + "2,BBB,これもテスト"     Response.ContentType = "application/octet-stream"     'Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode("CSVファイル.csv"))     Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode("CSVファイル.csv"))     Response.Write(csvStr)     Response.End()   End Sub HttpUtility.UrlEncode と Server.UrlEncode 両方でファイルを出力しました。 メモ帳で開くと何も問題なく開けるのですが、Excelで直接開くと、3項目目の全角文字がバケてしまいます。Excelの外部データの取り込みで、Csvファイルを選択していく方法だと問題ないのですが、これだと面倒なので、 CSVファイルをダブルクリック → Excelで開く → ふつうにデータを表示させたい 上記を行うためには、どのような文字コードで出力させればよいでしょうか? 上記プログラムでご指摘の箇所やご教授をいただけますと大変うれしい限りでございます。 何卒よろしくお願い申し上げます。

  • CSV出力後に画面を変える方法

    親画面から子画面を表示させ、その子画面から、 CSVダウンロードをさせています。ダウンロードが終わった時点で 親画面を別のASP画面に変更したいのですが、 どうすればよいか教えてください。お願いいたします。 <CSV出力部分> Response.ContentType = "text/csv" Response.AddHeader "Content-Disposition","attachment;filename=" & szCsvNm Response.Write szCSV Response.End

  • エクセルのシートをブラウザに表示させたい

    現在、以下のものを作っています。 1:ブラウザの画面に「EXCEL」というボタンを置く。 2:データをブラウザに表示する。 3:EXCELというボタンを押す 4:ブラウザに表示したデータがエクセルシート形式でそのままブラウザに表示される こういうのを作っており、今は4の過程で以下のプログラムを入れています。 Response.AddHeader ("content-disposition", "inline; filename=" + fname + ".xls"); しかしこれですと、「ファイルのダウンロード」ボックスが出てきます。 これは、ユーザーが自分でパス指定してダウンロードさせるという方法としては良いのですが、 私がやりたいのはそれではなく、ブラウザにエクセルを表示させたいということです。 誰か知っている方がおられましたらご教授お願いします。

  • [ASP]CSVダウンロード時に、直接開いた場合のシート名

    お世話になります。 ASPからcsvファイルを動的に生成して(サーバには保存しないで)ダウンロードを実行するという方法は実現できています。 しかし、ダウンロードダイアログが表示された際に、「開く、保存、キャンセル」の中から「開く」を選択すると、Excelが起動しcsvファイルを読み込むのですが、 シート名が「 .csv]ファイル名[1] 」となってしまいます。(余計な文字がくっついてきます。) この余計な文字がシート名に含まれないようにしたいのですが、何かよい方法はないでしょうか。 よろしくお願いいたします。 ◆環境 サーバ:windows2003server クライアント:windowsXP SP2        EXCEL2000         ◆csv生成時の設定 ContentType = "application/x-csv" AddHeader "Content-Disposition" ,  " attachment; filename = AAA20060928.csv"

専門家に質問してみよう