ワークシートのアウトライン表示
V11Jでは図11のように、階層データをアウトライン表示できるようになりました。
 
 アウトライン表示の処理はリスト7の通りです。
// 表示データ ...(1)
var smartphones = [
  { name: 'iOS', indent:0 },
  { name: 'Apple', indent:1 },
  { name: 'iPhone XS', indent:2 },
(略)
];
// データとインデントを設定 ...(2)
for (var r = 0; r < smartphones.length; r++) {
  sheet.setValue(r, 0, smartphones[r]['name']);
  sheet.getRange(r, 0, 1, 1).textIndent(smartphones[r].indent); // ...(2a)
}
// アウトライン表示の設定 ...(3)
sheet.outlineColumn.options({
  columnIndex: 0,     // アウトラインの基準にする列(ここではA列)...(3a)
  showImage: true,    // 画像を表示
  showCheckBox: true, // チェックボックスを表示
  images: [           // レベルの高いほうから順番に画像を指定
    'img/1f4bf.png', 'img/1f3e2.png', 'img/1f4f1.png'
  ],
});
  (1)が表示するデータで、表示名(name)とアウトラインのレベル(indent)からなるJavaScriptオブジェクトの配列です。このデータを(2)でワークシートに設定します。このとき(2a)で、sheet.getRangeメソッドで取得したセルのtextIndentメソッドを実行して、各データのindentを設定しています。
(3)はアウトライン表示の設定です。(3a)で、A列を基準にアウトライン表示するよう設定します。画像やチェックボックスの表示もここで設定します。
PDFエクスポート機能
V11Jでは、クライアントサイドでのPDFファイルエクスポートを新たにサポートしました。図12のサンプルでは、「エクスポート」ボタンを押下すると、表示内容をPDFファイルにエクスポートします。
 
 PDFエクスポート機能を利用するために、index.htmlのhead要素で、表3のファイルへの参照を追加します。
| No. | ファイル名 | ファイルの役割 | 
|---|---|---|
| 1 | scripts/gc.spread.sheets.print.11.2.4.min.js | 印刷機能のファイル | 
| 2 | scripts/gc.spread.sheets.pdf.11.2.4.min.js | PDF出力機能のファイル | 
| 3 | scripts/FileSaver.js | saveAsメソッドの実装 | 
| 4 | fonts.js | フォントファイル | 
No.1と2は印刷・PDF出力の機能を提供するSpread.Sheetsの追加ファイル、No.3は、ファイルを保存するsaveAsメソッドを提供するライブラリです。
No.4は、日本語フォントを含むファイルです。リスト8のように、フォントファイルをBase64エンコードして、JavaScriptオブジェクトに設定します。本サンプルでは、日本語フォントにIPAexゴシックを利用しています。
var fontsObj = 
{'ipaexg.ttf':'<Base64エンコードしたフォントファイルの内容>'}
  PDFエクスポート機能で日本語を文字化けさせずに表示するため、まずリスト9のように、日本語フォントを登録します。
// 'ipaexg.ttf'フォントを登録 ...(1)
var fonts = {
  normal: fontsObj['ipaexg.ttf']
};
GC.Spread.Sheets.PDF.PDFFontsManager.registerFont(fonts); // ...(1a)
// フォントの関連付けを設定 ...(2)
GC.Spread.Sheets.PDF.PDFFontsManager.fallbackFont = function (font) {
  // フォント名を取得
  var fontInfoArray = font.split(' ');
  var fontName = fontInfoArray[fontInfoArray.length - 1];
  // フォント名が'Calibri'の場合、代替フォントを返却 ...(2a)
  if (fontName === 'Calibri') {
    return fonts.normal;
  }
}
  (1)は日本語フォントを登録する処理で、(1a)のPDFFontsManager.registerFontメソッドで登録します。(2)はフォントの関連付けを設定する処理で、ここでは(2a)で、デフォルトフォントの「Calibri」を日本語フォントに置き換えます。
PDFエクスポートを実行する処理は、リスト10の通りです。
workbook.savePDF(   // エクスポート実行 ...(1)
  function (blob) { // 第1引数:成功時の処理 ...(2)
    var fileName = 'download';
    saveAs(blob, fileName + '.pdf');
  },
  function (error) { // 第2引数:失敗時の処理 ...(3)
    console.log(error);
  },
  { // 第3引数:オプション ...(4)
    title: 'Spraed.Sheets Export',
    author: 'Eiichi YOSHIKAWA'
  }
);
  ワークブックに対応するworkbookオブジェクトのsavePDFメソッドを実行します(1)。メソッドの第1引数(2)は成功時の処理で、blob変数として渡されるPDFファイル内容をsaveAsメソッドでファイルに保存します。第2引数(3)は失敗時の処理です。第3引数(4)はオプションで、ここではPDFファイルのタイトルと著者を設定しています。
まとめ
本記事では、SpreadJSの新バージョンV11Jで導入された新機能と、その利用法を紹介しました。Spread.Sheetsに、よりExcelライクに利用できる機能が追加され、スプレッドシート部品としての完成度がいっそう高まりました。

 
              
               
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                          
                           
                              
                               
                              
                               
                              
                               
                              
                               
                              
                               
                      
                     
                      
                     
                      
                     
                      
                     
                      
                     
                      
                     
                      
                     
															
														 
															
														.png) 
     
     
     
     
     
													 
													 
													 
													 
													 
										
									
 
                     
                    
