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



















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