0

我正在使用 spreadjs 和 ExcelIO 来显示一个包含 100 多张工作表的大型 Excel 文件。我必须在我的 excel 视图 UI 上显示所有这些工作表。我可以展示它,但这需要 3 分钟以上的时间才能在 UI 上加载所有工作表。我有一个限制,要在一分钟内加载至少几张纸,剩下的纸我可以在换纸事件中加载/绘制。如何仅使用 spreadjs 来实现这一点?

这是我当前用来加载的源代码。

excelIo.open(blob, function (json) {
    spread.suspendPaint();
    var workbookObj = json;
    spread.fromJSON(workbookObj);
    spread.resumePaint();
}
4

1 回答 1

0

我在 GrapeCity 工作,是他们支持 SpreadJS 的技术参与工程师之一。要执行您所描述的操作,您必须在加载工作簿后加载工作表,下面是显示如何执行此操作的示例。

<!DOCTYPE html>
<html>
<head>

    <meta charset="utf-8" />
    <title></title>

    <link href="http://cdn.grapecity.com/spreadjs/hosted/css/gc.spread.sheets.excel2013white.12.0.7.css" rel="stylesheet" type="text/css" />

    <script type="text/javascript" src="http://cdn.grapecity.com/spreadjs/hosted/scripts/gc.spread.sheets.all.12.0.7.min.js"></script>
    <script type="text/javascript" src="http://cdn.grapecity.com/spreadjs/hosted/scripts/interop/gc.spread.excelio.12.0.7.min.js"></script>

    <script type="text/javascript">

        var spread = null;
        window.onload = function() {
            spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
        }

        var excelIO = new GC.Spread.Excel.IO();
        var s = null;
        var sheets = null;

        function loadFile () {                
            s = new Date().getTime();
            var excelFile = document.getElementById("fileDemo").files[0];
            if (!excelFile) {
                console.log('please pick a file ......');
                return;
            }
            console.log('loading workbook ... ' + excelFile.name);                    

            excelIO.open(excelFile, function (json) {
                spread.suspendPaint();
                sheets = json.sheets;
                json.sheets = {};
                for (var sheetName in sheets) {
                    if (sheets.hasOwnProperty(sheetName)) {
                        var sheetJSON = sheets[sheetName];
                        json.sheets[sheetName] = {name: sheetName, columnCount: sheetJSON.columnCount, rowCount: sheetJSON.rowCount};
                    }
                }

                spread.fromJSON(json, {doNotRecalculateAfterLoad:true});
                spread.resumePaint();
            });            
        }

        function loadSheet() {
            var sheet = spread.getActiveSheet();
            loadSheetFromJSON(sheet.name());
        }

        function loadSheetFromJSON(sheetName) {            
            var sheet = spread.sheets.find(function(s){ return s.name() === sheetName});
            if (sheet) {
                spread.suspendPaint();
                sheet.fromJSON(sheets[sheet.name()]);
                spread.resumePaint();
            }
        }
    </script>
</head>
<body>
    <div id="ss" style="width:100%;height:600px;border:1px solid grey"></div>

    <div id="msg" style="width:100%;height:100px; margin-top: 10px; margin-bottom: 10px; border:1px solid gray"></div>


    <input type="file" name="files[]" id="fileDemo" accept=".xlsx,.xlsm" />
    <input type="button" id="button1" value="Import Excel" onclick="loadFile()" />
    <input type="button" id="btnCalc" value="Load Sheet" onclick="loadSheet()" />
</body>
</html>

如果您有任何其他问题,请随时在 GrapeCity 的网站上与 SpreadJS 的支持团队联系

最好的,麦肯齐

于 2019-11-25T21:45:11.300 回答