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

新しいOffice.jsでPowerPointでもOffice用アプリが使えるようになりました。前のページ

[Excel 2013]Web関数を使ってマッシュアップ次のページ

関連記事

  1. Office アドイン

    [Office用アプリ]JavaScript API for Officeのポスター

    JavaScript API for Officeのオブジェクト、メソ…

  2. Office関連

    [Excel Services ECMAScript]選択範囲が変更されたときのイベントを利用する。…

    埋め込んだExcelワークブックの、選択範囲が変更されたときのイベント…

  3. Office関連

    [Excel Services ECMAScript]jPrintAreaで埋め込んだブック部分のみ…

    jQuery + jPrintAreaを利用して、埋め込んだExcel…

  4. Office関連

    [リボン・カスタマイズ]dynamicMenu要素から任意のマクロを実行する。

    HPのお問い合わせフォームから下記の質問がありました。「メニュ…

  5. Office関連

    Office 2016のコントロールIDリストが公開されました。

    昨年の秋にリリースされたOffice 2016。そのコントロールI…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

PAGE TOP