我正在为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.js
和MissingPartSummary.js
都位于同一文件夹../App/Home/
如果我尝试启动Visual Studio项目,则会收到Visual Studio的错误消息:
答案 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 Part
和import * 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';
。