0

我打开一个电子表格,我可以在控制台中看到:

_clipBoardOptions: "All"

在 activeSheet 对象中。

但每当我尝试从 excel 粘贴格式时,它只会传递值。有什么想法我错了吗?

基本上默认是“全部”,但没有格式传递给SpreadJS 这是我的初始化

$("#ss").wijspread({sheetCount:1}); // create wijspread control
    var spread = $("#ss").wijspread("spread"); // get instance of wijspread control
    var sheet = spread.getActiveSheet();

同样当我尝试在初始化后手动添加方法时:

sheet.clipBoardOptions($.wijmo.wijspread.ClipboardPasteOptions[0])

我尝试寻找解决方案,但提供的信息不多,而且 api 有点糟糕!

在此先感谢您的任何帮助者!

4

1 回答 1

1

SpreadJS 不支持从 Excel 粘贴格式。我们正在研究如何在未来的版本中实现对此的支持。

目前,SpreadJS 只能使用 ExcelIO Web 服务导入整个 Excel 工作簿。

要将单元格范围的内容复制到 SpreadJS,我现在最好的建议是使用 ExcelIO 将该工作簿导入隐藏的 SpreadJS 实例,然后使用 ClipboardPasteUndoAction 将范围从隐藏的 SpreadJS 复制并粘贴到可见的。

下面是一个代码示例,展示了如何使用 ExcelIO Web 服务导入 Excel 文件:

    <!DOCTYPE html>
    <html>
    <head>
        <title>Excel IO Sample</title>
    <link type="text/css" href="./css/cobalt/jquery-wijmo.css" rel="stylesheet" />
     <link type="text/css" href="./css/gcspread.sheets.8.40.20151.0.css" rel="stylesheet" /> 
        <script type="text/javascript" src="./external/jquery-1.9.1.js"></script>            
        <script type="text/javascript" src="./scripts/gcspread.sheets.all.8.40.20151.0.min.js"></script>

        <script type="text/javascript">
            $(function () {
                //Initialize SpreadJS
                new GcSpread.Sheets.Spread($("#ss").get(0), {sheetCount: 2});

                //For Excel Import
                $("#btn_Import").click(function () {
                    // SpreadJS Excel IO import service api.
                    var serverUrl = $("#serviceHost").val() + "/xsapi/import";
                    // Generate import api options
                    var formData = new FormData();
                    //Choose a file to import
                    var $importingFile = $("#loadExcel");
                    var theFile = $importingFile[0].files[0];
                    var accept = "application/json";
                    formData.append("file", theFile);
                    formData.append("ExcelOpenFlags", "NoFlagsSet");
                    formData.append("TextFileOpenFlags", "None");
                    formData.append("Password", "");
                    $.ajax({
                        //Server script to process data
                        url: serverUrl,
                        type: 'POST',
                        //Ajax events
                        success: function completeHandler(data, textStatus, jqXHR) {
                            var spread = $("#ss").data("spread");
                            spread.fromJSON(JSON.parse(jqXHR.responseText).spread);
                        },
                        error: function errorHandler(jqXHR, textStatus, errorThrown) {
                            alert(errorThrown);
                        },
                        // Form data
                        data: formData,
                        //Options to tell jQuery not to process data or worry about content-type.
                        cache: false,
                        contentType: false,
                        processData: false,
                        //Options to tell server return data with specified type
                        headers: {
                            "Accept": accept
                        }
                    });
                });

                //For Excel Export with Form Post.
                $("#btn_Export").click(function () {
                    var spread = $("#ss").data("spread");
                    // SpreadJS Excel IO import service api.
                    var serverUrl = $("#serviceHost").val() + "/xsapi/export";
                    // Generate import api options
                    var optContentType = "application/json";
                    // Post the json from spreadjs.
                    var dataObj = {
                        "spread": spread.toJSON(),
                        "exportFileType": "xlsx",
                        "excel": {
                            "saveFlags": "NoFlagsSet",
                            "password": ""
                        },
                    };
                    var content = JSON.stringify(dataObj);
                    var formInnerHtml = '<input type="hidden" name="type" value="' + htmlSpecialCharsEntityEncode(optContentType) + '" />';
                    formInnerHtml += '<input type="hidden" name="data" value="' + htmlSpecialCharsEntityEncode(content) + '" />';
                    var $iframe = $("<iframe style='display: none' src='about:blank'></iframe>").appendTo("body");
                    $iframe.ready(function () {
                        var formDoc = getiframeDocument($iframe);
                        formDoc.write("<html><head></head><body><form method='Post' action='" + serverUrl + "'>" + formInnerHtml + "</form>dummy windows for postback</body></html>");
                        var $form = $(formDoc).find('form');
                        $form.submit();
                    });
                });
            });

            //gets an iframes document in a cross browser compatible manner
            function getiframeDocument($iframe) {
                var iframeDoc = $iframe[0].contentWindow || $iframe[0].contentDocument;
                if (iframeDoc.document) {
                    iframeDoc = iframeDoc.document;
                }
                return iframeDoc;
            }

            var htmlSpecialCharsRegEx = /[<>&\r\n"']/gm;
            var htmlSpecialCharsPlaceHolders = {
                '<': 'lt;',
                '>': 'gt;',
                '&': 'amp;',
                '\r': "#13;",
                '\n': "#10;",
                '"': 'quot;',
                "'": 'apos;' /*single quotes just to be safe*/
            };
            function htmlSpecialCharsEntityEncode(str) {
                return str.replace(htmlSpecialCharsRegEx, function (match) {
                    return '&' + htmlSpecialCharsPlaceHolders[match];
                });
            }
        </script>
    </head>
    <body>
        <h2>SpreadJS Excel IO Sample</h2>
        <div style="margin-bottom: 10px">
            <label><b>Excel IO Service Host : </b></label>
            <input id="serviceHost" value="http://localhost/ExcelIO" style="width: 500px" />
        </div>
        <div id="ss" style="width: 660px; height: 500px; border: 1px solid gray; float: left">
        </div>
        <div style="width: 30%; height: 500px; margin-left: 15px; float: left">
            <fieldset style="margin-bottom: 15px; height: 45%">
                <legend><b>Excel IO Import Options</b></legend>
                <input type="file" id="loadExcel" accept=".xlsx, .xls, .csv, .txt" />
                <input id="btn_Import" type="button" value="Import" />
            </fieldset>
            <fieldset style="margin-bottom: 15px; height: 45%">
                <legend><b>Excel IO Export Options</b></legend>
                <input id="btn_Export" type="button" value="Export" />
            </fieldset>
        </div>
    </body>
    </html>

链接:http ://sphelp.grapecity.com/webhelp/SpreadJSWeb/webframe.html#exceliocode.html

下面是一个代码示例,展示了如何使用 ClipboardPasteUndoAction:

    $(document).ready(function () {
        //There are two buttons in html page with the id "cutPasteBtn" and "copyPasteBtn".

        var spread = new GcSpread.Sheets.Spread($("#ss").get(0),{sheetCount:3});
        var sheet = spread.getActiveSheet();
        sheet.setValue(0, 0, 1, GcSpread.Sheets.SheetArea.viewport);
        sheet.setValue(1, 0, 2, GcSpread.Sheets.SheetArea.viewport);
        sheet.setFormula(2, 0, "=A1+A2", GcSpread.Sheets.SheetArea.viewport);
        sheet.setValue(0, 1, 3, GcSpread.Sheets.SheetArea.viewport);
        sheet.setValue(1, 1, 4, GcSpread.Sheets.SheetArea.viewport);
        sheet.setFormula(2, 1, "=B1+B2", GcSpread.Sheets.SheetArea.viewport);
        var fromRange = new GcSpread.Sheets.Range(0, 0, 3, 2);
        var toRanges = [new GcSpread.Sheets.Range(4, 0, 3, 2)];

        $("#cutPasteBtn").click(function () {
            //Cut Paste Action
            var clipboardCutPasteAction = new GcSpread.Sheets.UndoRedo.ClipboardPasteUndoAction(sheet, sheet, sheet, { fromRange: fromRange, pastedRanges: toRanges, isCutting: true, clipboardText: "" }, GcSpread.Sheets.ClipboardPasteOptions.Values);
            clipboardCutPasteAction.execute(sheet);
        });


        $("#copyPasteBtn").click(function () {
            //Copy Paste Action
            var clipboardCopyPasteAction = new GcSpread.Sheets.UndoRedo.ClipboardPasteUndoAction(sheet, sheet, sheet, { fromRange: fromRange, pastedRanges: toRanges, isCutting: false, clipboardText: "" }, GcSpread.Sheets.ClipboardPasteOptions.Values);
            clipboardCopyPasteAction.execute(sheet);
        });
    });

链接:http ://sphelp.grapecity.com/webhelp/SpreadJSWeb/webframe.html#sccopy.html

问候,

葡萄城专家

于 2015-09-30T16:06:53.810 回答