販売管理

次のサンプルは、SpreadJS のスプレッドシートを使用して、入力した受注情報に基づく売上レポートを作成する方法を示しています。このサンプルには、受注情報シートに関連する売上レポートを作成するための、チャート、スパークライン、ピボットテーブル、スライサー、およびさまざまな関数や数式の使い方を示しています。

このサンプルでは、「受注情報」シートに受注明細などを記入する際に、記入されたデータを売上情報や各集計情報シートに反映します。 「受注情報」シート: 各種セル型や条件付き書式を使用しています。 重量に応じて送料の選択を切り替えます。 出荷状態を出荷済みにチェックすると、出荷日に当日日付が自動入力され、該当行データが売上レポートに計上されます。 「売上情報」シート: 受注情報シートの出荷済みとなるデータをソートし、テーブルで表示します。 スライサーを使うことで、データのフィルタリングができます。 「月集計」シート: 折れ線スパークライン/縦棒スパークラインを使用しています。 複合チャート/円グラフ(ドーナツグラフ)/横棒グラフを使用して、売上の月集計を表示します。 チャートを作成する際に、軸やデータポイント、ホバースタイルを設定し、チャートのスタイルをカスタマイズしています。 「担当者集計」シート: ブレットスパークライン/積み上げスパークライン/円スパークラインを使用し、売上データの視覚的な表現を実現します。 「請求集計」シート: ピボットテーブルを使用し、ビューの切り替えで単価/出荷/請求情報を表示します。 フィールド集計とレイアウトの設定を適用しています。
var spreadNS = GC.Spread.Sheets; window.onload = function () { var spread = new spreadNS.Workbook('ss', { sheetCount: 6 }); // アクティブシート spread.setActiveSheetIndex(0); // 初期処理 initSpread(spread); // 編集終了時、DataSource更新 var sheet = spread.getSheet(0); sheet.bind(spreadNS.Events.ValueChanged, function (sender, args) { updateDataSource(spread); }); }; // ---------------------------------- // function // ---------------------------------- // 初期処理 function initSpread(spread) { // スプレッドのスタイルを設定 initSpreadStyle(spread); // 「受注情報」シート初期化 initOrderSheet(spread); // 「売上情報」シート初期化 initSalesSheet(spread); // 「月集計」シート初期化 initMonthSheet(spread); // 「担当者集計」シート初期化 initChargePersonSheet(spread); // DataSourceシート initDataSourceSheet(spread); // 「請求情報」シート初期化 initInvoiceSheet(spread); } /* スプレッドスタイル初期化 */ function initSpreadStyle(spread) { // タブを左に設定 spread.options.tabStripPosition = spreadNS.TabStripPosition.left; // スプレッド背景色 spread.options.backColor = "#F4F8EB"; // グレー部分の色 spread.options.grayAreaBackColor = "thistle"; } /* 「受注情報」シート初期化 */ function initOrderSheet(spread) { spread.suspendPaint(); spread.options.tabStripRatio = 0.8; var sheet = spread.getSheet(0); // 初期データ読み込み sheet.setDataSource(data); // シート名 sheet.name("受注情報"); // セル型を設定 setCellData(sheet); // カスタマイズヘッダを設定 setCustomHeader(sheet); // シートのスタイルを設定 setSheetStyle(sheet); // ホバースタイルを設定 setHoverState(sheet); // アクティブスタイルを設定 setActiveState(sheet); // ダーティデータスタイルを設定 setDirtyState(sheet); // データ検証を設定 setInvalidState(spread); // 条件付き書式を設定 setConditionalRules(sheet); spread.resumePaint(); } /* 「売上情報」シート初期化 */ function initSalesSheet(spread) { spread.suspendPaint(); spread.options.tabStripRatio = 0.8; var sheet = spread.getSheet(1); // シート名 sheet.name("売上情報"); sheet.options.backgroundImage = "logo.png"; sheet.options.backgroundImageLayout = spreadNS.ImageLayout.center; // グリッド線 sheet.options.gridline.showHorizontalGridline = false; sheet.options.gridline.showVerticalGridline = false; // ヘッダー var viewport = GC.Spread.Sheets.SheetArea.viewport; sheet.setValue(0, 0, "受注日付", viewport); sheet.setValue(0, 1, "受注No.", viewport); sheet.setValue(0, 2, "製品名", viewport); sheet.setValue(0, 3, "仕入先", viewport); sheet.setValue(0, 4, "箱数", viewport); sheet.setValue(0, 5, "入数", viewport); sheet.setValue(0, 6, "数量", viewport); sheet.setValue(0, 7, "単価", viewport); sheet.setValue(0, 8, "金額", viewport); sheet.setValue(0, 9, "重量", viewport); sheet.setValue(0, 10, "送料", viewport); sheet.setValue(0, 11, "担当者", viewport); sheet.setValue(0, 12, "出荷状態", viewport); sheet.setValue(0, 13, "評価", viewport); sheet.setValue(0, 14, "出荷日", viewport); var sheet1 = spread.getSheet(0); var fromRange = [new GC.Spread.Sheets.Range(0, 0, sheet1.getRowCount(), 15)]; var pastedRanges = [ new GC.Spread.Sheets.Range(1, 0, sheet1.getRowCount(), 15), ]; spread.commandManager().execute({ cmd: "clipboardPaste", sheetName: "売上情報", fromSheet: sheet1, fromRanges: fromRange, pastedRanges: pastedRanges, isCutting: false, clipboardText: "", pasteOption: GC.Spread.Sheets.ClipboardPasteOptions.values, }); // 不要な列を削除 sheet.deleteColumns(1, 1); sheet.deleteColumns(3, 4); sheet.deleteColumns(7, 2); // テーブルを設定 setToTable(sheet); // テーブルスライサー設定 setSlicer(sheet); spread.resumePaint(); } /* 「月集計」シート初期化 */ function initMonthSheet(spread) { spread.suspendPaint(); var sheet = spread.getSheet(2); // シート名 sheet.name("月集計"); sheet.options.backColor = "lightyellow"; // グリッド線 sheet.options.gridline.showHorizontalGridline = false; sheet.options.gridline.showVerticalGridline = false; // 列 var dataArray = [["", "5月", "6月", "7月", "8月"]]; sheet.setArray(0, 0, dataArray, false); // 行 sheet.setValue(1, 0, "日本酒", spreadNS.SheetArea.viewport); sheet.setValue(2, 0, "ワイン", spreadNS.SheetArea.viewport); sheet.setValue(3, 0, "ビール", spreadNS.SheetArea.viewport); sheet.setValue(4, 0, "酎ハイ", spreadNS.SheetArea.viewport); sheet.setValue(5, 0, "合計", spreadNS.SheetArea.viewport); // 合計数式 var formulaArray = [ [ '=SUMIFS(受注情報!I1:I100,受注情報!C1:C100,"日本酒",受注情報!A1:A100,"2022/05",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!C1:C100,"日本酒",受注情報!A1:A100,"2022/06",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!C1:C100,"日本酒",受注情報!A1:A100,"2022/07",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!C1:C100,"日本酒",受注情報!A1:A100,"2022/08",受注情報!M1:M100,TRUE)', ], [ '=SUMIFS(受注情報!I1:I100,受注情報!C1:C100,"ワイン",受注情報!A1:A100,"2022/05",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!C1:C100,"ワイン",受注情報!A1:A100,"2022/06",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!C1:C100,"ワイン",受注情報!A1:A100,"2022/07",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!C1:C100,"ワイン",受注情報!A1:A100,"2022/08",受注情報!M1:M100,TRUE)', ], [ '=SUMIFS(受注情報!I1:I100,受注情報!C1:C100,"ビール",受注情報!A1:A100,"2022/05",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!C1:C100,"ビール",受注情報!A1:A100,"2022/06",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!C1:C100,"ビール",受注情報!A1:A100,"2022/07",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!C1:C100,"ビール",受注情報!A1:A100,"2022/08",受注情報!M1:M100,TRUE)', ], [ '=SUMIFS(受注情報!I1:I100,受注情報!C1:C100,"酎ハイ",受注情報!A1:A100,"2022/05",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!C1:C100,"酎ハイ",受注情報!A1:A100,"2022/06",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!C1:C100,"酎ハイ",受注情報!A1:A100,"2022/07",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!C1:C100,"酎ハイ",受注情報!A1:A100,"2022/08",受注情報!M1:M100,TRUE)', ], ["=SUM(B2:B5)", "=SUM(C2:C5)", "=SUM(D2:D5)", "=SUM(E2:E5)"], ]; sheet.setArray(1, 1, formulaArray, true); // スタイル sheet .getRange("A1:G6") .setBorder(new spreadNS.LineBorder("black", spreadNS.LineStyle.dotted), { all: true, }); sheet .getRange("B1:G1", spreadNS.SheetArea.viewport) .backColor({ type: spreadNS.PatternType.darkDown, backgroundColor: "#D3D3D3", patternColor: "white", }) .hAlign(spreadNS.HorizontalAlign.center) .foreColor("black") .font("italic"); sheet .getRange("A2:A6", spreadNS.SheetArea.viewport) .backColor({ type: spreadNS.PatternType.gray125, backgroundColor: "#B3B3B3", patternColor: "white", }) .hAlign(spreadNS.HorizontalAlign.center) .foreColor("black"); // 背景色 sheet.getRange("B2:G6", spreadNS.SheetArea.viewport).backColor("white"); // 列幅 sheet.getRange("A:E").width(100); sheet.getRange("F:G").width(170); // 行高 sheet.getRange(1, -1, 5, -1, GC.Spread.Sheets.SheetArea.viewport).height(35); // チャートを追加 setChart(sheet); // スパークラインを追加 setSparkLine(sheet); spread.resumePaint(); } /* 「担当者集計」シート初期化 */ function initChargePersonSheet(spread) { var sheet = spread.getSheet(3); // シート名 sheet.name("担当者集計"); // グリッド線 sheet.options.gridline.showHorizontalGridline = false; sheet.options.gridline.showVerticalGridline = false; // スタイル sheet .getRange("A1:K4") .setBorder(new spreadNS.LineBorder("black", spreadNS.LineStyle.dotted), { all: true, }); sheet .getRange("A6:B6") .setBorder(new spreadNS.LineBorder("black", spreadNS.LineStyle.medium), { all: true, }); sheet .getRange("B1:K1", spreadNS.SheetArea.viewport) .backColor({ type: spreadNS.PatternType.darkDown, backgroundColor: "#D3D3D3", patternColor: "white", }) .hAlign(spreadNS.HorizontalAlign.center) .foreColor("black") .font("italic bold"); sheet.getRange("B2:K4", spreadNS.SheetArea.viewport).backColor("white"); // スタイル sheet.getCell(1, 0).backColor("#d8bfd8"); sheet.getCell(2, 0).backColor("#b0c4de"); sheet.getCell(3, 0).backColor("#fffacd"); sheet .getCell(5, 0) .backColor("yellow") .hAlign(spreadNS.HorizontalAlign.center) .vAlign(spreadNS.VerticalAlign.center); sheet .getCell(5, 1) .foreColor("red") .formatter("#,##0") .backColor("white") .hAlign(spreadNS.HorizontalAlign.right) .vAlign(spreadNS.VerticalAlign.center); // 列幅 sheet.getRange("A:G").width(80); sheet.getRange(-1, 7, -1, 1, GC.Spread.Sheets.SheetArea.viewport).width(250); sheet.getRange(-1, 10, -1, 1, GC.Spread.Sheets.SheetArea.viewport).width(150); // 行高 sheet.getRange(0, -1, 1, -1, GC.Spread.Sheets.SheetArea.viewport).height(35); sheet.getRange(1, -1, 3, -1, GC.Spread.Sheets.SheetArea.viewport).height(70); sheet.getRange(5, -1, 1, -1, GC.Spread.Sheets.SheetArea.viewport).height(40); // セル結合 sheet.addSpan(0, 8, 1, 3, GC.Spread.Sheets.SheetArea.viewport); sheet.addSpan(1, 8, 3, 1, GC.Spread.Sheets.SheetArea.viewport); sheet.addSpan(1, 9, 3, 2, GC.Spread.Sheets.SheetArea.viewport); // 列 var dataArray = [ ["", "5月", "6月", "7月", "8月", "合計", "予測", "達成度", "貢献率"], ]; sheet.setArray(0, 0, dataArray, false); // 行 sheet.setValue(1, 0, "山下", spreadNS.SheetArea.viewport); sheet.setValue(2, 0, "佐藤", spreadNS.SheetArea.viewport); sheet.setValue(3, 0, "田中", spreadNS.SheetArea.viewport); sheet.setValue(5, 0, "目標値", spreadNS.SheetArea.viewport); sheet.setValue(5, 1, 40000, spreadNS.SheetArea.viewport); // 合計数式 var formulaArray = [ [ '=SUMIFS(受注情報!I1:I100,受注情報!L1:L100,"山下",受注情報!A1:A100,"2022/05",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!L1:L100,"山下",受注情報!A1:A100,"2022/06",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!L1:L100,"山下",受注情報!A1:A100,"2022/07",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!L1:L100,"山下",受注情報!A1:A100,"2022/08",受注情報!M1:M100,TRUE)', "=SUM(B2:E2)", "=SUM(B2:D2,8000)", "=BULLETSPARKLINE(B6,F2,50000,39000,35000,G2,5000)", "=STACKEDSPARKLINE(F2:F4,,A2:A4,B6,B6,,,,,,TRUE)", '=PIESPARKLINE(F2:F4,"#d8bfd8","#b0c4de","#fffacd")', ], [ '=SUMIFS(受注情報!I1:I100,受注情報!L1:L100,"佐藤",受注情報!A1:A100,"2022/05",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!L1:L100,"佐藤",受注情報!A1:A100,"2022/06",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!L1:L100,"佐藤",受注情報!A1:A100,"2022/07",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!L1:L100,"佐藤",受注情報!A1:A100,"2022/08",受注情報!M1:M100,TRUE)', "=SUM(B3:E3)", "=SUM(B3:D3,8000)", "=BULLETSPARKLINE(B6,F3,50000,39000,35000,G3,5000)", ], [ '=SUMIFS(受注情報!I1:I100,受注情報!L1:L100,"田中",受注情報!A1:A100,"2022/05",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!L1:L100,"田中",受注情報!A1:A100,"2022/06",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!L1:L100,"田中",受注情報!A1:A100,"2022/07",受注情報!M1:M100,TRUE)', '=SUMIFS(受注情報!I1:I100,受注情報!L1:L100,"田中",受注情報!A1:A100,"2022/08",受注情報!M1:M100,TRUE)', "=SUM(B4:E4)", "=SUM(B4:D4,8000)", "=BULLETSPARKLINE(B6,F4,50000,39000,35000,G4,5000)", ], ]; sheet.setArray(1, 1, formulaArray, true); // コメントを設定 setComment(sheet); } /* 「請求情報」シート初期化 */ function initInvoiceSheet(spread) { var sheet = spread.getSheet(4); // シート名 sheet.name("請求情報"); // グリッド線 sheet.options.gridline.showHorizontalGridline = false; sheet.options.gridline.showVerticalGridline = false; // 列幅 sheet.getRange("B:C").width(125); sheet.getRange("D:P").width(80); // データ var range = "=DataSource!$A$1:$O$101"; var layout = GC.Spread.Pivot.PivotTableLayoutType.outline; // ピボットテーブルのビューレイアウト var theme = GC.Spread.Pivot.PivotTableThemes.dark10; var options = { showRowHeader: true, showColumnHeader: true, bandRows: true, bandColumns: true, }; var pivotTable = sheet.pivotTables.add( "InvoicePivot", range, 1, 1, layout, theme, options ); // デフォルトスタイル var style1 = new GC.Spread.Sheets.Style(); style1.formatter = "#,##0.0"; pivotTable.setStyle({ dataOnly: true }, style1); pivotTable.layoutType(1); pivotTable.suspendLayout(); // ピボットビューマネージャを設定 setViewManager(pivotTable); // 計算フィールド追加 pivotTable.addCalcField("手数料", "=送料*0.01"); pivotTable.add( "手数料", "手数料", GC.Spread.Pivot.PivotTableFieldType.valueField ); // 空白データ pivotTable.options.missingCaption = 0; // ツールチップ表示 pivotTable.options.showToolTip = true; // グループ var groupInfo2 = { originFieldName: "数量", numberGroup: { by: 10 } }; pivotTable.group(groupInfo2); pivotTable.resumeLayout(); pivotTable.autoFitColumn(); } /* DataSourceシート */ function initDataSourceSheet(spread) { var sheet = spread.getSheet(5); // シート名 sheet.name("DataSource"); // グリッド線 sheet.options.gridline.showHorizontalGridline = true; sheet.options.gridline.showVerticalGridline = true; // ヘッダー var viewport = spreadNS.SheetArea.viewport; sheet.setValue(0, 0, "受注日付", viewport); sheet.setValue(0, 1, "受注No.", viewport); sheet.setValue(0, 2, "製品名", viewport); sheet.setValue(0, 3, "仕入先", viewport); sheet.setValue(0, 4, "箱数", viewport); sheet.setValue(0, 5, "入数", viewport); sheet.setValue(0, 6, "数量", viewport); sheet.setValue(0, 7, "単価", viewport); sheet.setValue(0, 8, "金額", viewport); sheet.setValue(0, 9, "重量", viewport); sheet.setValue(0, 10, "送料", viewport); sheet.setValue(0, 11, "担当者", viewport); sheet.setValue(0, 12, "出荷状態", viewport); sheet.setValue(0, 13, "評価", viewport); sheet.setValue(0, 14, "出荷日", viewport); // DataSourceを設定 updateDataSource(spread); } // ---------------------------------- // 受注情報シート_内部メソッド // ---------------------------------- // シートのスタイルを設定 function setSheetStyle(sheet) { // グリッド線 sheet.options.gridline.showHorizontalGridline = true; // 水平 sheet.options.gridline.showVerticalGridline = false; // 垂直 // 列幅を設定 sheet.getRange("A:C").width(90); sheet.setColumnWidth(3, 120, GC.Spread.Sheets.SheetArea.viewport); sheet.getRange("E:J").width(60); sheet.getRange("K:N").width(90); sheet.setColumnWidth(14, 120, GC.Spread.Sheets.SheetArea.viewport); // スタイル sheet .getRange("A1:D100") .setBorder(new spreadNS.LineBorder("black", spreadNS.LineStyle.dashDot), { all: true, }); sheet .getRange("E1:O100") .setBorder(new spreadNS.LineBorder("black", spreadNS.LineStyle.hair), { all: true, }); // 選択領域の色 sheet.options.selectionBorderColor = "gold"; sheet.options.selectionBackColor = "rgba(100,255,51, 0.4)"; // 行と列の固定 sheet.frozenColumnCount(4); } // カスタマイズヘッダを設定 function setCustomHeader(sheet) { var rowHeader = spreadNS.SheetArea.rowHeader; var colHeader = spreadNS.SheetArea.colHeader; sheet.suspendPaint(); // 複数の列ヘッダを設定 sheet.setRowCount(2, spreadNS.SheetArea.colHeader); // 列ヘッダを2行に設定 // カスタマイズヘッダ sheet.addSpan(0, 0, 2, 1, colHeader); sheet.addSpan(0, 1, 2, 1, colHeader); sheet.addSpan(0, 2, 2, 1, colHeader); sheet.addSpan(0, 3, 2, 1, colHeader); sheet.addSpan(0, 11, 2, 1, colHeader); sheet.addSpan(0, 12, 2, 1, colHeader); sheet.addSpan(0, 13, 2, 1, colHeader); sheet.addSpan(0, 14, 2, 1, colHeader); sheet.addSpan(0, 4, 1, 7, colHeader); sheet.setValue(0, 0, "受注日付", colHeader); sheet.setValue(0, 1, "受注No.", colHeader); sheet.setValue(0, 2, "製品名", colHeader); sheet.setValue(0, 3, "仕入先", colHeader); sheet.setValue(0, 4, "受注明細", colHeader); sheet.setValue(0, 11, "担当者", colHeader); sheet.setValue(0, 12, "出荷状態", colHeader); sheet.setValue(0, 13, "評価", colHeader); sheet.setValue(0, 14, "出荷日", colHeader); sheet.setValue(1, 4, "箱数", colHeader); sheet.setValue(1, 5, "入数", colHeader); sheet.setValue(1, 6, "数量", colHeader); sheet.setValue(1, 7, "単価", colHeader); sheet.setValue(1, 8, "金額", colHeader); sheet.setValue(1, 9, "重量", colHeader); sheet.setValue(1, 10, "送料", colHeader); // グループ化 sheet.rowOutlines.group(1, 23); sheet.rowOutlines.group(25, 22); sheet.rowOutlines.group(48, 25); sheet.rowOutlines.group(74, 25); sheet.rowOutlines.group(1, 99); sheet.columnOutlines.group(4, 7); sheet.columnOutlines.direction( spreadNS.Outlines.OutlineDirection.backward // 集計列のボタンを左に設定 ); // 列ヘッダのスタイル var style = new spreadNS.Style(); style.font = "bold 18px Arial"; style.foreColor = "black"; style.backColor = "#87c1ff"; style.hAlign = spreadNS.HorizontalAlign.center; style.vAlign = spreadNS.VerticalAlign.center; sheet.setRowHeight(0, 30, spreadNS.SheetArea.colHeader); sheet.setRowHeight(1, 30, spreadNS.SheetArea.colHeader); for (var i = 0; i < 15; i++) { sheet.setStyle(0, i, style, spreadNS.SheetArea.colHeader); } var style2 = new spreadNS.Style(); style2.font = "bold 15px Arial"; style2.backColor = "#e3eefa"; for (var i = 0; i < 14; i++) { sheet.setStyle(1, i, style2, spreadNS.SheetArea.colHeader); } sheet.resumePaint(); } // セル型を設定 function setCellData(sheet) { var range = new spreadNS.Range(0, 0, 100, 3); // タブ色 sheet.options.sheetTabColor = "gold"; // 数式設定 for (var i = 0; i < sheet.getRowCount(); i++) { var r = i + 1; // 金額 sheet.setFormula(i, 8, "=G" + r + "*H" + r); // 送料 sheet.setFormula(i, 10, "=IF(J" + r + "<30,0,300)"); // 出荷日 sheet.setFormula(i, 14, "=IF(M" + r + ',TODAY(),"")'); } // 自動マージ sheet.autoMerge(range, spreadNS.AutoMerge.AutoMergeDirection.none); sheet.autoMerge( range, spreadNS.AutoMerge.AutoMergeDirection.column, 0, spreadNS.SheetArea.viewport, 1 ); // ラジオボタン setRadioCell(sheet); // コンボボックス setComboCell(sheet); // チェックボックス setCheckBoxCell(sheet); // スライダー setSliderCell(sheet); // 日付 setDateCell(sheet); } // ホバースタイルを設定 function setHoverState(sheet) { sheet.suspendPaint(); var cfs = sheet.conditionalFormats; var style = new spreadNS.Style("rgb(164, 236, 252)"); var rowRange = new spreadNS.Range(-1, -1, -1, -1); cfs.addRowStateRule(spreadNS.RowColumnStates.hover, style, [rowRange]); sheet.resumePaint(); } // アクティブスタイルを設定 function setActiveState(sheet) { sheet.suspendPaint(); var cfs = sheet.conditionalFormats; var style = new spreadNS.Style("rgb(227, 215, 250)"); var rowRange = new spreadNS.Range(-1, -1, -1, -1); cfs.addRowStateRule(spreadNS.RowColumnStates.active, style, [rowRange]); sheet.resumePaint(); } // ダーティデータスタイルを設定 function setDirtyState(sheet) { var cfs = sheet.conditionalFormats; var style = new GC.Spread.Sheets.Style(); style.foreColor = "navy"; style.backColor = "#e4d2d8"; var rowRange = new GC.Spread.Sheets.Range(-1, -1, -1, -1); cfs.addRowStateRule(GC.Spread.Sheets.RowColumnStates.dirty, style, [ rowRange, ]); } // データ検証を設定 function setInvalidState(spread) { var sheet = spread.getSheet(0); sheet.suspendPaint(); spread.options.highlightInvalidData = true; // 強調表示 var cfs = sheet.conditionalFormats; var style = new GC.Spread.Sheets.Style("rgb(247, 101, 101)"); var columnRange = new GC.Spread.Sheets.Range(0, -1, sheet.getRowCount(), -1); var dv = GC.Spread.Sheets.DataValidation.createNumberValidator( GC.Spread.Sheets.ConditionalFormatting.ComparisonOperators .lessThanOrEqualsTo, "90", "", false ); dv.showInputMessage(true); dv.inputMessage("90kg以上の荷物は受け付けません。"); sheet.setDataValidator(columnRange.row, 9, columnRange.rowCount, 1, dv); cfs.addRowStateRule(GC.Spread.Sheets.RowColumnStates.invalid, style, [ columnRange, ]); sheet.resumePaint(); } // 条件付き書式を設定 function setConditionalRules(sheet) { // 評価(アイコン) let iconSetRule = sheet.conditionalFormats.addIconSetRule( spreadNS.ConditionalFormatting.IconSetType.fiveArrowsColored, // 色付き矢印 [new spreadNS.Range(0, 13, sheet.getRowCount(), 1)] ); iconSetRule.reverseIconOrder(false); // アイコンの順序を反転しない iconSetRule.showIconOnly(false); // アイコンと数値を表示 sheet .getRange(0, 13, sheet.getRowCount(), 1) .vAlign(GC.Spread.Sheets.VerticalAlign.center); sheet .getRange(0, 13, sheet.getRowCount(), 1) .hAlign(GC.Spread.Sheets.HorizontalAlign.center); // 金額(スケール値) var dataBarRule = sheet.conditionalFormats.addDataBarRule( spreadNS.ConditionalFormatting.ScaleValueType.lowestValue, null, spreadNS.ConditionalFormatting.ScaleValueType.highestValue, null, "#f39800", [new spreadNS.Range(0, 8, sheet.getRowCount(), 1)] ); dataBarRule.gradient(true); // グラデーション表示するか dataBarRule.showBorder(false); // ボーダー表示するか dataBarRule.showBarOnly(false); // データバーをテキストなしで表示するか } // ラジオボタン function setRadioCell(sheet) { for (var i = 0; i < 100; i++) { var radio = new spreadNS.CellTypes.RadioButtonList(); radio.direction(spreadNS.CellTypes.Direction.vertical); radio.textAlign(spreadNS.CellTypes.TextAlign.right); radio.isFlowLayout(false); radio.maxColumnCount(2); radio.boxSize(10); radio.items([ { text: "0", value: 0 }, { text: "300", value: 300 }, ]); sheet.setCellType(i, 10, radio, spreadNS.SheetArea.viewport); sheet .getCell(i, 10) .hAlign(spreadNS.HorizontalAlign.center) .vAlign(spreadNS.VerticalAlign.center); } } // コンボボックス function setComboCell(sheet) { for (var i = 0; i < 100; i++) { var combo = new spreadNS.CellTypes.ComboBox(); combo .items([ { text: "山下", value: "0" }, { text: "佐藤", value: "1" }, { text: "田中", value: "2" }, ]) .editorValueType(spreadNS.CellTypes.EditorValueType.text); combo.itemHeight(24); combo.editable(true); sheet.setCellType(i, 11, combo, spreadNS.SheetArea.viewport); } } // チェックボックス function setCheckBoxCell(sheet) { for (var i = 0; i < 100; i++) { var cell = new spreadNS.CellTypes.CheckBox(); cell.textTrue("発送済"); sheet.setCellType(i, 12, cell, spreadNS.SheetArea.viewport); sheet .getCell(i, 12) .hAlign(spreadNS.HorizontalAlign.center) .vAlign(spreadNS.VerticalAlign.center); } } // スライダー function setSliderCell(sheet) { var style = new spreadNS.Style(); style.cellButtons = [ { imageType: spreadNS.ButtonImageType.dropdown, command: "openSlider", useButtonStyle: true, }, ]; style.dropDowns = [ { type: spreadNS.DropDownType.slider, option: { marks: [0, 5, 10], min: 0, max: 10, step: 1, direction: spreadNS.LayoutDirection.horizontal, }, }, ]; for (var i = 0; i < 100; i++) { sheet.getCell(i, 13).setStyle(style); } } // 日付 function setDateCell(sheet) { for (var i = 0; i < 100; i++) { var style = new spreadNS.Style(); style.cellButtons = [ { imageType: spreadNS.ButtonImageType.dropdown, command: "openDateTimePicker", useButtonStyle: false, }, ]; style.dropDowns = [ { type: spreadNS.DropDownType.dateTimePicker, option: { showTime: false, }, }, ]; sheet.getCell(i, 14).setStyle(style); sheet.getCell(i, 14).formatter("[$-411]ggg ee/mm/dd"); // 和暦日付 } } // ---------------------------------- // 売上情報シート_内部メソッド // ---------------------------------- // テーブルを設定 function setToTable(sheet) { var chkTable = sheet.tables.findByName("SalesDataTable"); if (!chkTable) { var table = sheet.tables.add( "SalesDataTable", 0, 0, 101, 8, spreadNS.Tables.TableThemes.medium14 ); table.autoGenerateColumns(true); // カラム名自動生成 // フッター設定 table.showFooter(true, false); table.useFooterDropDownList(true); // フィルタ設定 var rowFilter = table.rowFilter(); var condition = new spreadNS.ConditionalFormatting.Condition( spreadNS.ConditionalFormatting.ConditionType.textCondition, { compareType: spreadNS.ConditionalFormatting.TextCompareType.notEqualsTo, expected: "", } ); rowFilter.addFilterItem(7, condition); rowFilter.filter(); // サイズ変更のハンドル table.showResizeHandle(true); // 列幅 sheet.getRange("A:B").width(90); sheet.getRange("C:C").width(120); sheet.getRange("D:F").width(70); sheet.getRange("G:I").width(80); sheet.getRange("J:J").width(100); // 自動マージ var range = new GC.Spread.Sheets.Range(0, 0, 100, 2); sheet.autoMerge( range, GC.Spread.Sheets.AutoMerge.AutoMergeDirection.column, 0, GC.Spread.Sheets.SheetArea.viewport, 2 ); } } // テーブルスライサー設定 function setSlicer(sheet) { // シートの列数を増やす sheet.setColumnCount(15, GC.Spread.Sheets.SheetArea.viewport); var chkTable = sheet.tables.findByName("SalesDataTable"); if (chkTable) { // 製品名 var slicer1 = sheet.slicers.add( "ProductSlicer", "SalesDataTable", "製品名" ); slicer1.position(new spreadNS.Point(680, -1)); // 仕入先 var slicer2 = sheet.slicers.add( "CustomerSlicer", "SalesDataTable", "仕入先" ); slicer2.position(new spreadNS.Point(880, -1)); // 担当者 var slicer3 = sheet.slicers.add( "ChargePersonSlicer", "SalesDataTable", "担当者" ); slicer3.position(new spreadNS.Point(680, 280)); // スライサーのスタイル slicer1.style(spreadNS.Slicers.SlicerStyles.dark4()); slicer2.style(spreadNS.Slicers.SlicerStyles.dark6()); slicer3.style(spreadNS.Slicers.SlicerStyles.dark3()); } } // ---------------------------------- // 月集計シート_内部メソッド // ---------------------------------- // チャートを追加 function setChart(sheet) { // チャート1:複合チャート var chart1 = sheet.charts.add( "売上", spreadNS.Charts.ChartType.columnClustered, // 集合縦棒 0, 220, 640, 400 ); chart1.series().add({ chartType: spreadNS.Charts.ChartType.columnClustered, // 集合縦棒 axisGroup: spreadNS.Charts.AxisGroup.primary, // 主軸グループ name: "月集計!$A$2", xValues: "月集計!$B$1:$E$1", yValues: "月集計!$B$2:$E$2", }); chart1.series().add({ chartType: spreadNS.Charts.ChartType.columnClustered, // 集合縦棒 axisGroup: spreadNS.Charts.AxisGroup.primary, // 主軸グループ name: "月集計!$A$3", xValues: "月集計!$B$1:$E$1", yValues: "月集計!$B$3:$E$3", }); chart1.series().add({ chartType: spreadNS.Charts.ChartType.columnClustered, // 集合縦棒 axisGroup: spreadNS.Charts.AxisGroup.primary, // 主軸グループ name: "月集計!$A$4", xValues: "月集計!$B$1:$E$1", yValues: "月集計!$B$4:$E$4", }); chart1.series().add({ chartType: spreadNS.Charts.ChartType.columnClustered, // 集合縦棒 axisGroup: spreadNS.Charts.AxisGroup.primary, // 主軸グループ name: "月集計!$A$5", xValues: "月集計!$B$1:$E$1", yValues: "月集計!$B$5:$E$5", }); chart1.series().add({ chartType: spreadNS.Charts.ChartType.lineMarkers, // マーカー付き折れ線 axisGroup: spreadNS.Charts.AxisGroup.secondary, // 補助軸グループ name: "月集計!$A$6", xValues: "月集計!$B$1:$E$1", yValues: "月集計!$B$6:$E$6", }); // 折れ線データマーカー var ser1 = chart1.series().get(4); ser1.symbol = { fill: "#f8b500", fillColorTransparency: 0.3, size: 20, shape: GC.Spread.Sheets.Charts.SymbolShape.triangle, border: { color: "blue", width: 1, lineType: GC.Spread.Sheets.Charts.LineType.solid, colorTransparency: 0.5, }, }; chart1.series().set(4, ser1); // チャートタイトル var title = chart1.title(); title.text = "売上集計"; title.fontSize = 28; title.color = "darkorange"; chart1.title(title); // 軸 var axes = chart1.axes(); // チャートの第1カテゴリ軸 axes.primaryValue.title.fontSize = 16; axes.primaryValue.style.color = "plum"; axes.primaryValue.title.color = "plum"; axes.primaryValue.title.text = "売上金額(千円)"; axes.primaryValue.title.fontSize = 14; axes.primaryValue.displayUnit = { // 軸の表示単位に組み込み型に1000を設定 unit: spreadNS.Charts.DisplayUnit.thousands, visible: true, }; // チャートの第2カテゴリ軸 axes.secondaryCategory.title.fontSize = 16; axes.secondaryValue.style.color = "blue"; axes.secondaryValue.title.color = "blue"; axes.secondaryValue.title.text = "合計売上金額(円)"; chart1.axes(axes); // データポイント(ビール、8月) var seriesStyle = chart1.series().get(2); seriesStyle.dataPoints[3] = { backColor: "#2ca9e1", backColorTransparency: 0.4, border: { color: "orange", lineType: 4, transparency: 0.2, width: 4, }, }; chart1.series().set(2, seriesStyle); // 凡例 var legend = chart1.legend(); legend.position = spreadNS.Charts.LegendPosition.bottom; legend.backColor = "lightpink"; legend.backColorTransparency = 0.8; legend.fontFamily = "Arial"; legend.fontSize = 11; legend.color = "green"; legend.borderStyle.color = "red"; legend.borderStyle.transparency = 0.3; legend.borderStyle.width = 1.5; legend.showLegendWithoutOverlapping = true; // 凡例がチャート領域と重ならないように表示 chart1.legend(legend); // データラベル var dataLabels = chart1.dataLabels(); dataLabels.showValue = true; dataLabels.showSeriesName = false; dataLabels.showCategoryName = false; dataLabels.fontSize = 9; var dataLabelPosition = spreadNS.Charts.DataLabelPosition; // データラベルが配置される位置 dataLabels.position = dataLabelPosition.outsideEnd; // 上部 chart1.dataLabels(dataLabels); var series0 = chart1.series().get(0); series0.dataLabels = { showSeriesName: true, showCategoryName: true, separator: ",", position: spreadNS.Charts.DataLabelPosition.above, color: "red", backColor: "lightblue", borderColor: "orange", borderWidth: 0.5, }; chart1.series().set(0, series0); // ホバースタイル var hoverStyle = chart1.hoverStyle(); if (!hoverStyle) { hoverStyle = {}; } hoverStyle.color = "green"; hoverStyle.transparency = 0.8; if (!hoverStyle.borderStyle) { hoverStyle.borderStyle = {}; } hoverStyle.borderStyle.transparency = 0.1; hoverStyle.borderStyle.color = "#ff1493"; hoverStyle.borderStyle.width = 1; hoverStyle.borderStyle.dashStyle = spreadNS.Charts.LineType.dashDot; // シンボル if (!hoverStyle.symbolStyle) { hoverStyle.symbolStyle = {}; } hoverStyle.symbolStyle.color = "yellow"; hoverStyle.symbolStyle.transparency = 0.1; if (!hoverStyle.symbolStyle.borderStyle) { hoverStyle.symbolStyle.borderStyle = {}; } hoverStyle.symbolStyle.borderStyle.transparency = 0.1; hoverStyle.symbolStyle.borderStyle.color = "rgb(0, 0, 255)"; hoverStyle.symbolStyle.borderStyle.width = 9; hoverStyle.symbolStyle.borderStyle.dashStyle = spreadNS.Charts.LineType.lgDash; chart1.hoverStyle(hoverStyle); // アニメーション chart1.useAnimation(true); // チャート2:円チャート var chart2 = sheet.charts.add( "doughnut", spreadNS.Charts.ChartType.doughnut, // ドーナツ 670, 220, 640, 400, "A1:E5" ); var series2 = chart2.series().get(); // データポイント for (var i = 0; i < series2.length; i++) { var seriesItem = series2[i]; seriesItem.dataPoints = { 0: { backColor: "rgb(112, 173, 71)", }, 1: { backColor: "rgb(255,20,128)", }, 2: { backColor: "rgb(68, 114, 196)", }, 3: { backColor: "rgb(255, 192, 0)", }, }; seriesItem.border.width = 4; seriesItem.doughnutHoleSize = 0.3; chart2.series().set(i, seriesItem); } // データラベル var dataLabels2 = chart2.dataLabels(); dataLabels2.showValue = false; dataLabels2.showSeriesName = true; dataLabels2.showCategoryName = false; dataLabels2.showPercentage = true; var dataLabelPosition = spreadNS.Charts.DataLabelPosition; dataLabels2.position = dataLabelPosition.bestFit; chart2.dataLabels(dataLabels2); // チャートエリア var chartArea = chart2.chartArea(); chartArea.backColor = { type: spreadNS.Charts.PatternType.dottedPercent20, foregroundColor: "rgb(184, 238, 242)", backgroundColor: "background 1 0", }; chartArea.backColorTransparency = 0.6; chartArea.color = "navy"; chartArea.transparency = 0.3; chartArea.border.color = "navy"; chartArea.border.transparency = 0.3; chartArea.border.width = 1.5; chartArea.border.dashStyle = spreadNS.Charts.LineType.dash; chart2.chartArea(chartArea); // チャートタイトル var title = chart2.title(); title.text = "製品シェア"; title.fontSize = 28; chart2.title(title); // 凡例 var legend2 = chart2.legend(); legend2.position = spreadNS.Charts.LegendPosition.bottom; legend2.fontFamily = "Arial"; legend2.fontSize = 14; legend2.showLegendWithoutOverlapping = true; chart2.legend(legend2); // アニメーション chart2.useAnimation(true); // チャート3:100%積み上げ横棒 var chart3 = sheet.charts.add( "barStacked100", GC.Spread.Sheets.Charts.ChartType.barStacked100, 0, 650, 640, 320, "A1:E5" ); // データラベル var dataLabels3 = chart3.dataLabels(); dataLabels3.showValue = true; dataLabels3.showSeriesName = true; dataLabels3.showCategoryName = false; dataLabels3.showPercentage = false; var dataLabelPosition = GC.Spread.Sheets.Charts.DataLabelPosition; dataLabels3.position = dataLabelPosition.bestFit; chart3.dataLabels(dataLabels3); // チャートエリア var chartArea3 = chart3.chartArea(); chartArea3.backColor = { type: GC.Spread.Sheets.Charts.PatternType.lightVertical, foregroundColor: "rgb(184, 238, 242)", backgroundColor: "background 1 1", }; chartArea3.backColorTransparency = 0.6; chartArea3.color = "#942343"; chartArea3.transparency = 0.3; chartArea3.border.color = "#004d25"; chartArea3.border.transparency = 0.3; chartArea3.border.width = 1.5; chartArea3.border.dashStyle = GC.Spread.Sheets.Charts.LineType.lgDashDot; chart3.chartArea(chartArea3); // タイトル var title3 = chart3.title(); title3.text = "月集計"; title3.fontSize = 24; chart3.title(title3); // 凡例 var legend3 = chart3.legend(); legend3.position = GC.Spread.Sheets.Charts.LegendPosition.bottom; legend3.backColor = "lightpink"; legend3.backColorTransparency = 0.8; legend3.fontFamily = "Arial"; legend3.fontSize = 11; legend3.color = "green"; legend3.borderStyle.color = "red"; legend3.borderStyle.transparency = 0.3; legend3.borderStyle.width = 1.5; legend3.showLegendWithoutOverlapping = true; chart3.legend(legend3); // アニメーション chart3.useAnimation(true); } // スパークラインを追加 function setSparkLine(sheet) { var setting = new spreadNS.Sparklines.SparklineSetting(); setting.options.showMarkers = true; setting.options.lineWeight = 1; setting.options.displayXAxis = true; setting.options.showFirst = true; setting.options.showLast = true; setting.options.showLow = true; setting.options.showHigh = true; setting.options.showNegative = true; setting.options.displayEmptyCellsAs = spreadNS.Sparklines.EmptyValueStyle.Zero; setting.options.markersColor = "Magenta"; setting.options.axisColor = "Cyan"; // 折れ線スパークライン sheet.setValue(0, 5, "月の推移", spreadNS.SheetArea.viewport); for (let r = 1; r < 6; r++) { var data = new spreadNS.Range(r, 1, 1, 4); sheet.setSparkline( r, 5, data, spreadNS.Sparklines.DataOrientation.horizontal, spreadNS.Sparklines.SparklineType.line, setting ); } // 縦棒スパークライン sheet.setValue(0, 6, "月の推移(2)", spreadNS.SheetArea.viewport); for (let r = 1; r < 6; r++) { var data = new spreadNS.Range(r, 1, 1, 4); sheet.setSparkline( r, 6, data, spreadNS.Sparklines.DataOrientation.horizontal, spreadNS.Sparklines.SparklineType.column, setting ); } } // ---------------------------------- // 担当者集計シート_内部メソッド // ---------------------------------- // コメントを設定 function setComment(sheet) { var comment = new spreadNS.Comments.Comment(); comment.text( "赤線:実績, 青線:予測, 黒棒:目標値, 灰色:不十分, 浅灰色:良好" ); comment.backColor("yellow"); comment.foreColor("green"); comment.fontStyle("Bold"); comment.displayMode(spreadNS.Comments.DisplayMode.hoverShown); // ホバー時に表示 sheet.getCell(0, 7).comment(comment); } // ---------------------------------- // 請求情報シート_内部メソッド // ---------------------------------- // ピボットビューマネージャを設定 function setViewManager(pivotTable) { // ビュー1:空白 var emptyPT = "空白"; pivotTable.views.save(emptyPT); pivotTable.views.apply(emptyPT); // ビュー2:単価レポート var view2 = "単価レポート"; pivotTable.add( "製品名", "製品名", GC.Spread.Pivot.PivotTableFieldType.rowField // フィールド領域:行 ); pivotTable.add( "仕入先", "仕入先", GC.Spread.Pivot.PivotTableFieldType.rowField // フィールド領域:行 ); pivotTable.add( "単価", "単価", GC.Spread.Pivot.PivotTableFieldType.valueField // フィールド領域:値 ); pivotTable.add( "評価", "平均/評価", GC.Spread.Pivot.PivotTableFieldType.valueField, // フィールド領域:値 GC.Pivot.SubtotalType.average ); pivotTable.add( "受注日付", "受注日付", GC.Spread.Pivot.PivotTableFieldType.columnField // フィールド領域:列 ); pivotTable.add( "数量", "数量", GC.Spread.Pivot.PivotTableFieldType.filterField // フィールド領域:フィルタ ); // レイアウト pivotTable.layoutType(GC.Spread.Pivot.PivotTableLayoutType.outline); // アウトライン // スタイル var style1 = new spreadNS.Style(); style1.formatter = "#,##0.0"; pivotTable.setStyle({ dataOnly: true }, style1); pivotTable.autoFitColumn(); // ツールチップ pivotTable.options.showToolTip = true; // 折り畳み設定 pivotTable.collapse("仕入先", "よろず商店", false); pivotTable.collapse("仕入先", "喫茶なんごく", false); pivotTable.collapse("仕入先", "小町屋台", false); pivotTable.collapse("仕入先", "居酒屋ななべえ", false); pivotTable.collapse("仕入先", "雪花株式会社", false); // ビュー適用 pivotTable.views.save(view2); pivotTable.views.apply(emptyPT); // ビュー3:出荷レポート var view3 = "出荷レポート"; pivotTable.add( "仕入先", "仕入先", GC.Spread.Pivot.PivotTableFieldType.rowField // フィールド領域:行 ); pivotTable.add( "製品名", "製品名", GC.Spread.Pivot.PivotTableFieldType.rowField // フィールド領域:行 ); pivotTable.add( "数量", "数量", GC.Spread.Pivot.PivotTableFieldType.columnField // フィールド領域:列 ); pivotTable.add( "重量", "重量", GC.Spread.Pivot.PivotTableFieldType.valueField, // フィールド領域:値 GC.Pivot.SubtotalType.sum ); pivotTable.add( "出荷状態", "出荷状態", GC.Spread.Pivot.PivotTableFieldType.filterField // フィールド領域:フィルタ ); pivotTable.add( "出荷日", "出荷日", GC.Spread.Pivot.PivotTableFieldType.filterField // フィールド領域:フィルタ ); // レイアウト pivotTable.layoutType(GC.Spread.Pivot.PivotTableLayoutType.outline); // アウトライン // スタイル pivotTable.setStyle({ dataOnly: true }, style1); pivotTable.autoFitColumn(); // ツールチップ pivotTable.options.showToolTip = true; // 折り畳み設定 pivotTable.collapse("仕入先", "よろず商店", false); pivotTable.collapse("仕入先", "喫茶なんごく", false); pivotTable.collapse("仕入先", "小町屋台", false); pivotTable.collapse("仕入先", "居酒屋ななべえ", false); pivotTable.collapse("仕入先", "雪花株式会社", false); // ビュー適用 pivotTable.views.save(view3); pivotTable.views.apply(emptyPT); // ビュー4:請求レポート var view4 = "請求レポート"; pivotTable.add( "仕入先", "仕入先", GC.Spread.Pivot.PivotTableFieldType.rowField // フィールド領域:行 ); pivotTable.add( "受注日付", "受注日付", GC.Spread.Pivot.PivotTableFieldType.rowField // フィールド領域:行 ); pivotTable.add( "製品名", "製品名", GC.Spread.Pivot.PivotTableFieldType.columnField // フィールド領域:列 ); pivotTable.add( "金額", "総金額", GC.Spread.Pivot.PivotTableFieldType.valueField, // フィールド領域:値 GC.Pivot.SubtotalType.sum ); pivotTable.add( "送料", "総送料", GC.Spread.Pivot.PivotTableFieldType.valueField, // フィールド領域:値 GC.Pivot.SubtotalType.sum ); pivotTable.add( "担当者", "担当者", GC.Spread.Pivot.PivotTableFieldType.filterField // フィールド領域:フィルタ ); pivotTable.add( "手数料", "手数料", GC.Spread.Pivot.PivotTableFieldType.valueField // フィールド領域:値 ); // レイアウト pivotTable.layoutType(GC.Spread.Pivot.PivotTableLayoutType.compact); // コンパクト式 // ツールチップ pivotTable.options.showToolTip = true; // スタイル pivotTable.setStyle({ dataOnly: true }, style1); pivotTable.autoFitColumn(); // 折り畳み pivotTable.collapse("仕入先", "居酒屋ななべえ", true); pivotTable.collapse("仕入先", "雪花株式会社", true); // ビュー適用 pivotTable.views.save(view4); pivotTable.views.apply(view4); return pivotTable; } // DataSourceを更新 function updateDataSource(spread) { // 受注情報よりデータをコピーペースト var sheet1 = spread.getSheet(0); var sheet = spread.getSheet(5); var fromRange = [new GC.Spread.Sheets.Range(0, 0, sheet1.getRowCount(), 15)]; var pastedRanges = [ new GC.Spread.Sheets.Range(1, 0, sheet1.getRowCount(), 15), ]; spread.commandManager().execute({ cmd: "clipboardPaste", sheetName: "DataSource", fromSheet: sheet1, fromRanges: fromRange, pastedRanges: pastedRanges, isCutting: false, clipboardText: "", pasteOption: spreadNS.ClipboardPasteOptions.values, }); // 幅を自動調整 for (var i = 0; i < sheet.getColumnCount(spreadNS.SheetArea.viewport); i++) { sheet.autoFitColumn(i); } }
3<!doctype html> <html style="height:100%;font-size:14px;"> <head> <meta name="spreadjs culture" content="ja-jp" /> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css"/> <script src="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets-shapes/dist/gc.spread.sheets.shapes.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets-charts/dist/gc.spread.sheets.charts.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets-slicers/dist/gc.spread.sheets.slicers.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets-pivot-addon/dist/gc.spread.pivot.pivottables.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets-languagepackages/dist/gc.spread.calcengine.languagepackages.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets-resources-ja/dist/gc.spread.sheets.resources.ja.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/spread/source/data/sales-app-data.js" type="text/javascript"></script> <script src="$DEMOROOT$/spread/source/js/license.js" type="text/javascript"></script> <script src="app.js" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body> <div class="sample-tutorial"> <div id="ss" style="width:100%;height:100%"></div> </div> </body> </html>
.sample-tutorial { position: relative; height: 100%; overflow: hidden; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; } .cmdReactionGood { background-image: url("$DEMOROOT$/spread/source/images/iine.png"); background-size: 35px 35px; } .gc-spread-pivot-toolTip { position: fixed !important; }