Office アドイン

[Office用アプリ]ドキュメントをバイト配列として取得後Base64エンコードする

WordとPowerPointが対象になりますが、getFileAsyncメソッドのfileTypeパラメータに“compressed”を指定することで、ドキュメントをバイト配列(OOXMLフォーマット(docx,pptx))として取得することができます。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=Edge">
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
        <script src="https://appsforoffice.microsoft.com/lib/1.0/hosted/office.js"></script>
        <script>
            Office.initialize = function(reason){}
            $(function(){
                $("#btnOK").click(function(){
                    //1MB(1048576バイト)ごとにスライスして文書を取得
                    Office.context.document.getFileAsync("compressed", {sliceSize:1048576}, function(result){
                        if(result.status == "succeeded"){
                            var myFile = result.value;
                            $("#result").empty();
                            $("#size").text("Size:" + myFile.size + "byte.");
                            for (var i=0; i<myFile.sliceCount; i++){
                                myFile.getSliceAsync(i, function(result){
                                    if(result.status == "succeeded"){
                                        sendSlice(result.value);
                                    }
                                });
                            }
                            myFile.closeAsync(function(result){
                                if(result.status == "succeeded"){
                                    $("#status").text("Status:File closed.");
                                } else {
                                    $("#status").text("Status:File couldn't be closed.");
                                }
                            });
                        }
                    });
                });
            });
            
            function sendSlice(slice){
                 var data = slice.data;
                 if(data){
                     $("#result").append('<span>index of the file slice:' + slice.index + '</span><br><textarea rows="4" cols="30">' + OSF.OUtil.encodeBase64(data) + '</textarea><br>');
                 }
            }
        </script>
    </head>
    <body>
        <input id="btnOK" type="button" value="OK"><br>
        <span id="size">Size:</span><br>
        <span id="status">Status:</span><br>
        <div id="result"></div>
    </body>
</html>

上記コードではsliceSizeオプションでスライスサイズを1MBに指定していますが、指定しない場合はデフォルトのスライスサイズ4MB(4194304バイト)が適用されます。
また、上記コードでは取得したバイト配列をBase64エンコードしてtextareaの値としていますが、このエンコードされた値をバイナリ変換すると、下図のようにOOXMLフォーマットのドキュメントになります。

・Document.getFileAsync method (apps for Office)
http://msdn.microsoft.com/en-us/library/office/jj715284.aspx
・FileType enumeration (apps for Office)
http://msdn.microsoft.com/en-us/library/office/jj220084.aspx
・File.getSliceAsync method (apps for Office)
http://msdn.microsoft.com/en-us/library/office/jj715281.aspx

関連記事

  1. Office関連

    [Excel]別インスタンスからの貼り付け時のダイアログを非表示にする方法

    Msdn フォーラムに「excel 2010 貼り付けで警告メッセージ…

  2. Office関連

    Office 2016で“ヤツ”を召喚してみた。

    4月1日にMicrosoft Office公式アカウント、MSOffi…

  3. Office関連

    指定したフォルダ内の画像ファイルを一括挿入するPowerPointマクロ

    大量の画像ファイルを1枚/1スライドで挿入する必要があり、…

  4. Office関連

    Office 2016 Previewをインストールしてみました。

    「Microsoft、「Office 2016」と「Skype for…

  5. アイコン一覧

    Office 2013 アイコン一覧(G)

    ・Office 2013 アイコン一覧 NUM…

  6. Office関連

    パスワードが設定されたファイルを開くPowerPointマクロ

    WordやExcelと違って、PowerPointの場合はOpenメソ…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP