サーバー PHP JAVA

iPhone iPadでExcelファイルを開くと文字化けする

2016年7月3日

JAVAやExcelで
PDFやExcel、Wordを作成し出力する際に、パソコン側では問題なくダウンロードするのにiPhone、iPadで実行するとうまく表示してくれない場合があります。

iPhoneでExcel開いたときの表示

原因

MIME TYPEがヘッダーに設定されていない、もしくはMIME TYPEの指定に誤りがあるとうまく開いてくれないようです。

上記ファイルはExcel2007以降のファイル(xlsx)のため【Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet】とヘッダーに指定してあげるとうまくいくようです。

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
/* 以下出力処理 /
//JavaDriveさんのコードを引用させていただいてます。
import java.io.;
import javax.servlet.*;
import javax.servlet.http.*;

public class Sample extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
		response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
		/* 以下出力処理 */
	}
}

うまく開くことができました。

octet-streamだとどうなるか

ダウンロード処理をさせるために【application/octet-stream】を設定しているサイトも多いと思いますが、iPhone、iPadではExcelファイルの表示をしてくれませんでした。

また、xlsxなのにxlsのMIME TYPEを設定しても表示できないようです。

適切なMIME TYPEの設定が必要

モバイル端末を使用しているユーザも対象にするなら適切なMIME TYPEを設定する必要があるのでシステム構築する&テストする際は注意が必要ですね。

Androidの場合はダウンロードマネージャがファイルをダウンロードしてくれるようなのでMIME TYPEを設定してなくても開けるようです。

MIME TYPE

形式拡張子MIME TYPE
Excel 2003xls xlmapplication/vnd.ms-excel
Excel 2007xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Excel 2007(マクロ有)

xlsmapplication/vnd.ms-excel.sheet.macroEnabled.12
Word 2003docapplication/msword
Word 2007docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document
Word 2007(マクロ有)docmapplication/vnd.ms-word.document.macroEnabled.12
PowerPoint 2003pptapplication/vnd.ms-powerpoint
PowerPoint 2007pptxapplication/vnd.openxmlformats-officedocument.presentationml.presentation
PowerPoint 2007(マクロ有)pptmapplication/vnd.ms-powerpoint.presentation.macroEnabled.12
PDFpdfapplication/pdf

参考サイト

・JavaDrive:コンテンツタイプの設定(setContentType)

・Microsft:2007 Office system ファイル形式の MIME タイプをサーバーで登録する

-サーバー, PHP, JAVA
-, , , ,