Java脚本 - 导出和导入

时间:2018-06-07 14:56:05

标签: javascript visual-studio import export excel-addins

我正在为Excel-Add-In开发一个Java脚本Missing Part评估工具。为此,我首先在Microsoft Visual Studio 2015中开发了一个类Part.js:

export class Part {
    function Part(number) {

        if (this instanceof Part) {
            this.number = number;
        } else {
            return new Person(firstName)
        }

    }

}; 

module.exports = Part;

另外,我写了类MissingPartSummary .js

(function () {
    "use strict";

    import * as Part from 'Part';

    Office.initialize = function (reason) {
        $(document).ready(function () {
            //app.initialize();

            $('#create-difference-maps').click(createDifferenceMaps)
        });
    };

    function createDifferenceMaps() {
        Excel.run(function (context) {
            var part = new Part("N1022181");

            var dataSheet = context.workbook.worksheets.getActiveWorksheet();
            //dataSheet.getRange("A1:C3").values = 7;

            var rangeAddress = "F11 : J12";
            var range = dataSheet.getRange(rangeAddress);
            //range.load('cellCount');
            range.load('values');

            return context.sync().then(function () {
                //console.log("Number of cells: " + range.cellCount);
                console.log("Text: " + range.values);
            });

            context.sync();
        }).catch(function (error) {
            console.log("Error: " + error);
            if (error instanceof OfficeExtension.Error) {
                console.debug("Debug info:" + JSON.stringify(error.debugInfo));
            }
        });
    }

    })();

不幸的是,如果我尝试执行此代码,MS Visual Studio会说第4行存在语法错误。部件导入失败。为什么?文件Part.jsMissingPartSummary.js都位于同一文件夹../App/Home/

如果我尝试启动Visual Studio项目,则会收到Visual Studio的错误消息:

2 个答案:

答案 0 :(得分:1)

我已经解决了自己的问题。关于Javascript的观点有两种类型:“文本/ javascript”和“模块”。因为我在MissingPartSummary.html中定义了type =“ text / javascript”,所以导致导入错误。如果将类型更改为模块,则不会有错误。但是在其他地方也会有问题。因此,我决定使用text / javascript而不是模块。之后,我更改了Part.js。

var p = p || {};

p.Part = function (row) {
    this.bestellstatus = row[0];
    this.bezeichnung = row[1];
    this.teilenummer = row[2];
    this.teilenummer = this.teilenummer.concat(row[3]);
    this.teilenummer = this.teilenummer.concat(row[4]);
    this.teilenummer = this.teilenummer.concat(row[5]);
    this.teilenummer = this.teilenummer.concat(row[6]);
    this.prozesssteurer = row[19];
    this.bemerkung = row[22];
};

p.Part.prototype = (function () {

    var _isValid = function () {
        var valid = false;

        if (typeof this.bestellstatus == 'string') {
            valid = (this.bestellstatus != "Info");
        }

        if (typeof this.teilenummer == 'string') {
            valid = valid & (this.teilenummer != "");
        }

        return valid
    };


    return {
        isValid: _isValid
    }; 

}()); 

下一步,我写了

<script src="Part.js" type="text/javascript"> </script>

在MissingPartSummary.html中。通过这种方式,我可以通过以下方式在MissingPartSummary.js中使用Part.js。

var rangeAddressA = "D8 : Z30";
var rangeA = dataSheet.getRange(rangeAddressA);
rangeA.load(['values', 'text', 'rowCount', 'columnCount']);

return context.sync().then(function () {
    var text = rangeA.text;
    var numOrRows = rangeA.rowCount;

    for (var i = 1; i < numOfRows; i++) {
            var part = new p.Part(text[i]);
    }
 });

答案 1 :(得分:0)

由于您使用的是ES6模块(export class Partimport * as Part from 'Part';),因此您无需在Part.js中指定模块导出。所以你不应该需要最后一行module.exports = Part;

此外,在MissingPartSumary.js中,您需要在import语句中指定Part.js的相对路径。而不是import * as Part from 'Part';,它应该是import * as Part from './Part.js';