[Office2013用アプリ]ドキュメントをバイト配列として取得後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>

"office2013 20216-1-29-1" 

上記コードではsliceSizeオプションでスライスサイズを1MBに指定していますが、指定しない場合はデフォルトのスライスサイズ4MB(4194304バイト)が適用されます。

また、上記コードでは取得したバイト配列をBase64エンコードしてtextareaの値としていますが、このエンコードされた値をバイナリ変換すると、下図のようにOOXMLフォーマットのドキュメントになります。

"office2013 20216-1-29-2"