Ver código fonte

下载excel适配到其他页面

MaiXinRong 5 anos atrás
pai
commit
3925ab6b58

+ 2 - 2
app/const/spread.js

@@ -378,8 +378,8 @@ const stageGather = {
             {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'end_qc_tp', hAlign: 2, width: 60, type: 'Number'},
             {title: '截止本期完成计量|数量', colSpan: '3|1', rowSpan: '1|1', field: 'end_gather_qty', hAlign: 2, width: 60, type: 'Number'},
             {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'end_gather_tp', hAlign: 2, width: 60, type: 'Number'},
-            {title: '|完成率(%)', colSpan: '1', rowSpan: '|1', field: 'end_gather_percent', hAlign: 2, width: 80, readOnly: true, type: 'Number'},
-            {title: '台账+变更令|数量', colSpan: '3|1', rowSpan: '1|1', field: 'end_final_qty', hAlign: 2, width: 60, type: 'Number'},
+            {title: '|完成率(%)', colSpan: '|1', rowSpan: '|1', field: 'end_gather_percent', hAlign: 2, width: 80, readOnly: true, type: 'Number'},
+            {title: '台账+变更令|数量', colSpan: '2|1', rowSpan: '1|1', field: 'end_final_qty', hAlign: 2, width: 60, type: 'Number'},
             {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'end_final_tp', hAlign: 2, width: 60, type: 'Number'},
         ],
         emptyRows: 0,

+ 51 - 0
app/public/js/ledger_gather.js

@@ -222,4 +222,55 @@ $(document).ready(() => {
             leafXmjSpread.refresh();
         }
     });
+    $('#exportExcel').click(function () {
+        const data = [];
+        const setting = {
+            cols: [
+                {title: '清单编号', colSpan: '1', rowSpan: '2', field: 'b_code', hAlign: 0, width: 70, formatter: '@'},
+                {title: '名称', colSpan: '1', rowSpan: '2', field: 'name', hAlign: 0, width: 300, formatter: '@'},
+                {title: '单位', colSpan: '1', rowSpan: '2', field: 'unit', hAlign: 1, width: 60, formatter: '@'},
+                {title: '单价', colSpan: '1', rowSpan: '2', field: 'unit_price', hAlign: 2, width: 80, type: 'Number'},
+                {title: '项目节编号', colSpan: '1', rowSpan: '2', field: 'code', hAlign: 0, width: 100, formatter: '@'},
+                {title: '签约清单|数量', colSpan: '2|1', rowSpan: '1|1', field: 'deal_bills_qty', hAlign: 2, width: 80, type: 'Number'},
+                {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'deal_bills_tp', hAlign: 2, width: 80, type: 'Number'},
+                {title: '台账|数量', colSpan: '2|1', rowSpan: '1|1', field: 'quantity', hAlign: 2, width: 80, type: 'Number'},
+                {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'total_price', hAlign: 2, width: 80, type: 'Number'},
+                {title: '签约-台账|数量', colSpan: '2|1', rowSpan: '1|1', field: 'compare_qty', hAlign: 2, width: 80, type: 'Number'},
+                {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'compare_tp', hAlign: 2, width: 80, type: 'Number'},
+                {title: '单位工程', colSpan: '1', rowSpan: '2', field: 'dwgc', hAlign: 0, width: 80, formatter: '@'},
+                {title: '分部工程', colSpan: '1', rowSpan: '2', field: 'fbgc', hAlign: 0, width: 80, formatter: '@'},
+                {title: '分项工程', colSpan: '1', rowSpan: '2', field: 'fxgc', hAlign: 0, width: 80, formatter: '@'},
+                {title: '细目', colSpan: '1', rowSpan: '2', field: 'jldy', hAlign: 0, width: 80, formatter: '@'},
+                {title: '计量单元', colSpan: '1', rowSpan: '2', field: 'bwmx', hAlign: 0, width: 80, formatter: '@'},
+                {title: '图册号', colSpan: '1', rowSpan: '2', field: 'drawing_code', hAlign: 0, width: 80, formatter: '@'},
+            ],
+            headRows: 2,
+            headRowHeight: [25, 25],
+            defaultRowHeight: 21,
+            headerFont: 'bold 10px 微软雅黑',
+            font: '10px 微软雅黑'
+        };
+        if (!gclSheet.zh_data || gclSheet.zh_data.length === 0) return;
+        for (const gcl of gclSheet.zh_data) {
+            data.push({
+                b_code: gcl.b_code, name: gcl.name, unit: gcl.unit,
+                unit_price: gcl.unit_price,
+                deal_bills_qty: gcl.deal_bills_qty, deal_bills_tp: gcl.deal_bills_tp,
+                quantity: gcl.quantity, total_price: gcl.total_price,
+                compare_qty: gcl.compare_qty, compare_tp: gcl.compare_tp,
+            });
+            if (gcl.leafXmjs && gcl.leafXmjs.length > 0) {
+                for (const xmj of gcl.leafXmjs) {
+                    data.push({
+                        code: xmj.code,
+                        quantity: xmj.quantity,
+                        dwgc: xmj.dwgc, fbgc: xmj.fbgc, fxgc: xmj.fxgc,
+                        jldy: xmj.jldy, bwmx: xmj.bwmx, drawing_code: xmj.drawing_code,
+                    });
+                }
+            }
+        }
+
+        SpreadExcelObj.exportSimpleXlsxSheet(setting, data, $('h2')[0].innerHTML + "-清单汇总.xlsx");
+    });
 });

+ 16 - 0
app/public/js/measure_compare.js

@@ -244,4 +244,20 @@ $(document).ready(() => {
             }
         });
     })('a[name=showLevel]', billsSheet);
+
+    $('#exportExcel').click(function () {
+        const data = [];
+        if (!billsSheet.zh_tree) return;
+        for (const node of billsSheet.zh_tree.nodes) {
+            data.push(node);
+            const posRange = cPos.getLedgerPos(node.id);
+            if (posRange && posRange.length > 0) {
+                for (const pr of posRange) {
+                    data.push(pr);
+                }
+            }
+        }
+
+        SpreadExcelObj.exportSimpleXlsxSheet(billsSpreadSetting, data, $('h2')[0].innerHTML + "-多期比较.xlsx");
+    });
 });

+ 15 - 11
app/public/js/se_bonus.js

@@ -54,17 +54,17 @@ $(document).ready(() => {
             },
             {title: '编号', colSpan: '1', rowSpan: '1', field: 'code', hAlign: 0, width: 150, formatter: '@', readOnly: isPre, },
             {title: '发文单位', colSpan: '1', rowSpan: '1', field: 'doc_co', hAlign: 0, width: 150, formatter: '@', readOnly: isPre},
-            // {
-            //     title: '依据材料证明', colSpan: '1', rowSpan: '1', field: 'proof_file', hAlign: 1, width: 80, formatter: '@',
-            //     readOnly: true, cellType: 'imageBtn', normalImg: '#rela-file-icon', hoverImg: '#rela-file-hover',
-            //     getValue: function (data) {
-            //         return data.proof_file ? data.proof_file.length : 0;
-            //     },
-            //     showImage: function (data) {
-            //         return data !== undefined && data !== null;
-            //     },
-            // },
-            {title: '依据材料证明', colSpan: '1', rowSpan: '1', field: 'proof', hAlign: 0, width: 150, formatter: '@', readOnly: isPre},
+            {
+                title: '依据材料证明', colSpan: '1', rowSpan: '1', field: 'proof_file', hAlign: 1, width: 80, formatter: '@',
+                readOnly: true, cellType: 'imageBtn', normalImg: '#rela-file-icon', hoverImg: '#rela-file-hover',
+                getValue: function (data) {
+                    return data.proof_file ? data.proof_file.length : 0;
+                },
+                showImage: function (data) {
+                    return data !== undefined && data !== null;
+                },
+            },
+            // {title: '依据材料证明', colSpan: '1', rowSpan: '1', field: 'proof', hAlign: 0, width: 150, formatter: '@', readOnly: isPre},
             {
                 title: '计量期', colSpan: '1', rowSpan: '1', field: 'sorder', hAlign: 1, width: 100, formatter: '@',
                 getValue: function (data) {
@@ -498,4 +498,8 @@ $(document).ready(() => {
             },
         });
     }
+
+    $('#exportExcel').click(function () {
+        SpreadExcelObj.exportSimpleXlsxSheet(spreadSetting, bonusObj.data, $('h2')[0].innerHTML + "-奖罚金.xlsx");
+    });
 });

+ 4 - 0
app/public/js/se_jgcl.js

@@ -460,4 +460,8 @@ $(document).ready(() => {
             },
         })
     }
+
+    $('#exportExcel').click(function () {
+        SpreadExcelObj.exportSimpleXlsxSheet(spreadSetting, jgclObj.data, $('h2')[0].innerHTML + "-甲供材料.xlsx");
+    });
 });

+ 4 - 0
app/public/js/se_other.js

@@ -460,4 +460,8 @@ $(document).ready(() => {
             },
         })
     }
+
+    $('#exportExcel').click(function () {
+        SpreadExcelObj.exportSimpleXlsxSheet(otherSpreadSetting, seOtherObj.data, $('h2')[0].innerHTML + "-其他.xlsx");
+    });
 });

+ 0 - 2
app/public/js/shares/export_excel.js

@@ -56,8 +56,6 @@ const SpreadExcelObj = (function() {
                 cell.text(title[i]).wordWrap(true).hAlign(1).vAlign(1).font(setting.headerFont);
                 if ((colSpan[i] !== '' && colSpan[i] !== '1') || (rowSpan[i] !== '' && rowSpan[i] !== '1')) {
                     sheet.addSpan(i, iCol, parseInt(rowSpan[i]), parseInt(colSpan[i]));
-                } else {
-                    sheet.addSpan(i, iCol, 1, 1);
                 }
             }
             sheet.setColumnWidth(iCol, col.width);

+ 17 - 0
app/public/js/stage_compare.js

@@ -84,6 +84,7 @@ $(document).ready(function () {
     };
     // 初始化台账
     const ledgerSpread = SpreadJsObj.createNewSpread($('#ledger-spread')[0]);
+    const ledgerSheet = ledgerSpread.getActiveSheet();
     sjsSettingObj.setFxTreeStyle(ledgerSpreadSetting, sjsSettingObj.FxTreeStyle.jz);
     SpreadJsObj.initSheet(ledgerSpread.getActiveSheet(), ledgerSpreadSetting);
     // 初始化部位
@@ -271,4 +272,20 @@ $(document).ready(function () {
             }
         });
     })('a[name=showLevel]', ledgerSpread.getActiveSheet());
+
+    $('#exportExcel').click(function () {
+        const data = [];
+        if (!ledgerSheet.zh_tree) return;
+        for (const node of ledgerSheet.zh_tree.nodes) {
+            data.push(node);
+            const posRange = scPos.getLedgerPos(node.id);
+            if (posRange && posRange.length > 0) {
+                for (const pr of posRange) {
+                    data.push(pr);
+                }
+            }
+        }
+
+        SpreadExcelObj.exportSimpleXlsxSheet(ledgerSpreadSetting, data, $('h2')[0].innerHTML + "-审核比较.xlsx");
+    });
 });

+ 76 - 1
app/public/js/stage_gather.js

@@ -53,11 +53,12 @@ $(document).ready(function () {
     autoFlashHeight();
     // 初始化工程量清单
     const gclSpread = SpreadJsObj.createNewSpread($('#gcl-spread')[0]);
+    const gclSheet = gclSpread.getActiveSheet();
     gclSpreadSetting.getColor = function (sheet, data, row, col, defaultColor) {
         return data 
             ? (data.overRange ? '#f8d7da' : data.differ ? '#FFE699' : defaultColor)
             : defaultColor;
-    }
+    };
     SpreadJsObj.initSheet(gclSpread.getActiveSheet(), gclSpreadSetting);
     // 初始化所属项目节
     const leafXmjSpread = SpreadJsObj.createNewSpread($('#leaf-xmj-spread')[0]);
@@ -211,4 +212,78 @@ $(document).ready(function () {
             leafXmjSpread.refresh();
         }
     });
+    $('#exportExcel').click(function () {
+        const data = [];
+        const setting = {
+            cols: [
+                {title: '清单编号', colSpan: '1', rowSpan: '2', field: 'b_code', hAlign: 0, width: 70, formatter: '@'},
+                {title: '名称', colSpan: '1', rowSpan: '2', field: 'name', hAlign: 0, width: 300, formatter: '@'},
+                {title: '单位', colSpan: '1', rowSpan: '2', field: 'unit', hAlign: 1, width: 60, formatter: '@'},
+                {title: '单价', colSpan: '1', rowSpan: '2', field: 'unit_price', hAlign: 2, width: 80, type: 'Number'},
+                {title: '项目节编号', colSpan: '1', rowSpan: '2', field: 'code', hAlign: 0, width: 100, formatter: '@'},
+                {title: '签约清单|数量', colSpan: '2|1', rowSpan: '1|1', field: 'deal_bills_qty', hAlign: 2, width: 80, type: 'Number'},
+                {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'deal_bills_tp', hAlign: 2, width: 80, type: 'Number'},
+                {title: '台账|数量', colSpan: '2|1', rowSpan: '1|1', field: 'quantity', hAlign: 2, width: 80, type: 'Number'},
+                {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'total_price', hAlign: 2, width: 80, type: 'Number'},
+                {title: '本期合同计量|数量', colSpan: '2|1', rowSpan: '1|1', field: 'contract_qty', hAlign: 2, width: 60, type: 'Number'},
+                {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'contract_tp', hAlign: 2, width: 60, type: 'Number'},
+                {title: '本期数量变更|数量', colSpan: '2|1', rowSpan: '1|1', field: 'qc_qty', hAlign: 2, width: 60, type: 'Number'},
+                {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'qc_tp', hAlign: 2, width: 60, type: 'Number'},
+                {title: '本期完成计量|数量', colSpan: '2|1', rowSpan: '1|1', field: 'gather_qty', hAlign: 2, width: 60, type: 'Number'},
+                {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'gather_tp', hAlign: 2, width: 60, type: 'Number'},
+                {title: '截止本期合同计量|数量', colSpan: '2|1', rowSpan: '1|1', field: 'end_contract_qty', hAlign: 2, width: 60, type: 'Number'},
+                {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'end_contract_tp', hAlign: 2, width: 60, type: 'Number'},
+                {title: '截止本期数量变更|数量', colSpan: '2|1', rowSpan: '1|1', field: 'end_qc_qty', hAlign: 2, width: 60, type: 'Number'},
+                {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'end_qc_tp', hAlign: 2, width: 60, type: 'Number'},
+                {title: '截止本期完成计量|数量', colSpan: '3|1', rowSpan: '1|1', field: 'end_gather_qty', hAlign: 2, width: 60, type: 'Number'},
+                {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'end_gather_tp', hAlign: 2, width: 60, type: 'Number'},
+                {title: '|完成率(%)', colSpan: '|1', rowSpan: '|1', field: 'end_gather_percent', hAlign: 2, width: 60, type: 'Number'},
+                {title: '台账+变更令|数量', colSpan: '2|1', rowSpan: '1|1', field: 'end_final_qty', hAlign: 2, width: 60, type: 'Number'},
+                {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'end_final_tp', hAlign: 2, width: 60, type: 'Number'},
+                {title: '单位工程', colSpan: '1', rowSpan: '2', field: 'dwgc', hAlign: 0, width: 80, formatter: '@'},
+                {title: '分部工程', colSpan: '1', rowSpan: '2', field: 'fbgc', hAlign: 0, width: 80, formatter: '@'},
+                {title: '分项工程', colSpan: '1', rowSpan: '2', field: 'fxgc', hAlign: 0, width: 80, formatter: '@'},
+                {title: '细目', colSpan: '1', rowSpan: '2', field: 'jldy', hAlign: 0, width: 80, formatter: '@'},
+                {title: '计量单元', colSpan: '1', rowSpan: '2', field: 'bwmx', hAlign: 0, width: 80, formatter: '@'},
+                {title: '图册号', colSpan: '1', rowSpan: '2', field: 'drawing_code', hAlign: 0, width: 80, formatter: '@'},
+            ],
+            headRows: 2,
+            headRowHeight: [25, 25],
+            defaultRowHeight: 21,
+            headerFont: 'bold 10px 微软雅黑',
+            font: '10px 微软雅黑'
+        };
+        if (!gclSheet.zh_data || gclSheet.zh_data.length === 0) return;
+        for (const gcl of gclSheet.zh_data) {
+            data.push({
+                b_code: gcl.b_code, name: gcl.name, unit: gcl.unit,
+                unit_price: gcl.unit_price,
+                deal_bills_qty: gcl.deal_bills_qty, deal_bills_tp: gcl.deal_bills_tp,
+                quantity: gcl.quantity, total_price: gcl.total_price,
+                contract_qty: gcl.contract_qty, contract_tp: gcl.contract_tp,
+                qc_qty: gcl.qc_qty, qc_tp: gcl.qc_tp,
+                gather_qty: gcl.gather_qty, gather_tp: gcl.gather_tp,
+                end_contract_qty: gcl.end_contract_qty, end_contract_tp: gcl.end_contract_tp,
+                end_qc_qty: gcl.end_qc_qty, end_qc_tp: gcl.end_qc_tp,
+                end_gather_qty: gcl.end_gather_qty, end_gather_tp: gcl.end_gather_tp,
+                end_gather_percent: gcl.end_gather_percent,
+                end_final_qty: gcl.end_final_qty, end_final_tp: gcl.end_final_tp,
+            });
+            if (gcl.leafXmjs && gcl.leafXmjs.length > 0) {
+                for (const xmj of gcl.leafXmjs) {
+                    data.push({
+                        code: xmj.code,
+                        quantity: xmj.quantity,
+                        contract_qty: xmj.contract_qty, qc_qty: xmj.qc_qty, gather_qty: xmj.gather_qty,
+                        end_contract_qty: xmj.end_contract_qty, end_qc_qty: xmj.end_qc_qty,
+                        end_gather_qty: xmj.end_gather_qty, end_gather_percent: xmj.end_gather_percent,
+                        dwgc: xmj.dwgc, fbgc: xmj.fbgc, fxgc: xmj.fxgc,
+                        jldy: xmj.jldy, bwmx: xmj.bwmx, drawing_code: xmj.drawing_code,
+                    });
+                }
+            }
+        }
+
+        SpreadExcelObj.exportSimpleXlsxSheet(setting, data, $('h2')[0].innerHTML + "-清单汇总.xlsx");
+    });
 });

+ 5 - 0
app/view/measure/compare.ejs

@@ -23,6 +23,11 @@
                 <div class="d-inline-block">
                     <button href="#cate-set" class="btn btn-sm btn-light text-primary" data-toggle="modal" data-target="#select-qi"><i class="fa fa-clone"></i> 选择比较期</button>
                 </div>
+                <% if (ctx.app.config.is_debug) { %>
+                <div class="d-inline-block ml-3">
+                    <a id="exportExcel" class="btn btn-primary btn-sm" href="javascript: void(0)">下载清单汇总Excel</a>
+                </div>
+                <% } %>
             </div>
             <div class="ml-auto"></div>
         </div>

+ 5 - 0
app/view/stage/compare.ejs

@@ -33,6 +33,11 @@
                     <button href="#cate-set" class="btn btn-sm btn-light text-primary" data-toggle="modal" data-target="#select-qi"><i class="fa fa-users"></i> 选择比较人</button>
                     <% } %>
                 </div>
+                <% if (ctx.app.config.is_debug) { %>
+                <div class="d-inline-block ml-3">
+                    <a id="exportExcel" class="btn btn-primary btn-sm" href="javascript: void(0)">下载清单汇总Excel</a>
+                </div>
+                <% } %>
             </div>
         </div>
     </div>

+ 5 - 0
app/view/stage/gather.ejs

@@ -45,6 +45,11 @@
                 <div class="d-inline-block">
                     <button href="#zjhj" class="btn btn-sm btn-light text-primary" data-toggle="modal" data-target="#zjhj">章节合计</button>
                 </div>
+                <% if (ctx.app.config.is_debug) { %>
+                <div class="d-inline-block ml-3">
+                    <a id="exportExcel" class="btn btn-primary btn-sm" href="javascript: void(0)">下载清单汇总Excel</a>
+                </div>
+                <% } %>
             </div>
         </div>
     </div>

+ 5 - 0
app/view/stage_extra/bonus.ejs

@@ -6,6 +6,11 @@
             <div>
                 奖罚金
             </div>
+            <% if (ctx.app.config.is_debug) { %>
+            <div class="d-inline-block ml-3">
+                <a id="exportExcel" class="btn btn-primary btn-sm" href="javascript: void(0)">下载奖罚金Excel</a>
+            </div>
+            <% } %>
             <div class="ml-auto"></div>
         </div>
     </div>

+ 5 - 0
app/view/stage_extra/jgcl.ejs

@@ -8,6 +8,11 @@
             </div>
             <!--<div id="sum" class="ml-3">
             </div>-->
+            <% if (ctx.app.config.is_debug) { %>
+            <div class="d-inline-block ml-3">
+                <a id="exportExcel" class="btn btn-primary btn-sm" href="javascript: void(0)">下载甲供材料Excel</a>
+            </div>
+            <% } %>
             <div class="ml-auto"></div>
         </div>
     </div>

+ 5 - 0
app/view/stage_extra/other.ejs

@@ -6,6 +6,11 @@
             <div>
                 其他
             </div>
+            <% if (ctx.app.config.is_debug) { %>
+            <div class="d-inline-block ml-3">
+                <a id="exportExcel" class="btn btn-primary btn-sm" href="javascript: void(0)">下载其他Excel</a>
+            </div>
+            <% } %>
             <div class="ml-auto"></div>
         </div>
     </div>

+ 21 - 0
config/web.js

@@ -188,7 +188,10 @@ const JsFiles = {
             gather: {
                 files: [
                     "/public/js/spreadjs/sheets/v11/gc.spread.sheets.all.11.2.2.min.js",
+                    "/public/js/spreadjs/sheets/v11/interop/gc.spread.excelio.11.2.2.min.js",
                     "/public/js/decimal.min.js",
+                    "/public/js/file-saver/FileSaver.js",
+                    "/public/js/shares/export_excel.js",
                 ],
                 mergeFiles: [
                     "/public/js/sub_menu.js",
@@ -354,7 +357,10 @@ const JsFiles = {
             gather: {
                 files: [
                     "/public/js/spreadjs/sheets/v11/gc.spread.sheets.all.11.2.2.min.js",
+                    "/public/js/spreadjs/sheets/v11/interop/gc.spread.excelio.11.2.2.min.js",
                     "/public/js/decimal.min.js",
+                    "/public/js/file-saver/FileSaver.js",
+                    "/public/js/shares/export_excel.js",
                 ],
                 mergeFiles: [
                     "/public/js/sub_menu.js",
@@ -371,7 +377,10 @@ const JsFiles = {
             compare: {
                 files: [
                     "/public/js/spreadjs/sheets/v11/gc.spread.sheets.all.11.2.2.min.js",
+                    "/public/js/spreadjs/sheets/v11/interop/gc.spread.excelio.11.2.2.min.js",
                     "/public/js/decimal.min.js",
+                    "/public/js/file-saver/FileSaver.js",
+                    "/public/js/shares/export_excel.js",
                 ],
                 mergeFiles: [
                     "/public/js/sub_menu.js",
@@ -390,7 +399,10 @@ const JsFiles = {
             jgcl: {
                 files: [
                     "/public/js/spreadjs/sheets/v11/gc.spread.sheets.all.11.2.2.min.js",
+                    "/public/js/spreadjs/sheets/v11/interop/gc.spread.excelio.11.2.2.min.js",
                     "/public/js/decimal.min.js",
+                    "/public/js/file-saver/FileSaver.js",
+                    "/public/js/shares/export_excel.js",
                 ],
                 mergeFiles: [
                     "/public/js/sub_menu.js",
@@ -403,9 +415,12 @@ const JsFiles = {
             bonus: {
                 files: [
                     "/public/js/spreadjs/sheets/v11/gc.spread.sheets.all.11.2.2.min.js",
+                    "/public/js/spreadjs/sheets/v11/interop/gc.spread.excelio.11.2.2.min.js",
                     "/public/js/decimal.min.js",
                     "/public/js/datepicker/datepicker.min.js",
                     "/public/js/datepicker/datepicker.zh.js",
+                    "/public/js/file-saver/FileSaver.js",
+                    "/public/js/shares/export_excel.js",
                 ],
                 mergeFiles: [
                     "/public/js/sub_menu.js",
@@ -418,9 +433,12 @@ const JsFiles = {
             other: {
                 files: [
                     "/public/js/spreadjs/sheets/v11/gc.spread.sheets.all.11.2.2.min.js",
+                    "/public/js/spreadjs/sheets/v11/interop/gc.spread.excelio.11.2.2.min.js",
                     "/public/js/decimal.min.js",
                     "/public/js/datepicker/datepicker.min.js",
                     "/public/js/datepicker/datepicker.zh.js",
+                    "/public/js/file-saver/FileSaver.js",
+                    "/public/js/shares/export_excel.js",
                 ],
                 mergeFiles: [
                     "/public/js/sub_menu.js",
@@ -437,7 +455,10 @@ const JsFiles = {
             compare: {
                 files: [
                     "/public/js/spreadjs/sheets/v11/gc.spread.sheets.all.11.2.2.min.js",
+                    "/public/js/spreadjs/sheets/v11/interop/gc.spread.excelio.11.2.2.min.js",
                     "/public/js/decimal.min.js",
+                    "/public/js/file-saver/FileSaver.js",
+                    "/public/js/shares/export_excel.js",
                 ],
                 mergeFiles: [
                     "/public/js/sub_menu.js",