У меня проблема с columnWidth, который на самом деле не устанавливается и не отображается в Excel 2016. Ниже находится моя функция Excel.run:
_columns = columns;
var headers = [];
var numCols = _columns.length;
var letter = columnToLetter(numCols); //for perspective, this becomes "P"
for (var i = 0; i < numCols; i++) {
var header = [];
header.push(_columns[i].header);
headers.push(header); //basically an array of arrays, where each entry is ["some string"]
}
var ranges = [];
Office.context.document.bindings.addFromNamedItemAsync(['Sheet1!A', letter].join(':'), 'table', { id: 'table' });
Excel.run(function (context) {
var sheet = context.workbook.worksheets.getItem("Sheet1");
for (var i = 0; i < numCols; i++) {
var range = sheet.getCell(0, i);
range.load(['values', 'text', 'format/columnWidth']);
ranges.push(range);
}
return context.sync().then(function () {
for (var i = 0; i < numCols; i++) {
ranges[i].values = [headers[i]]; //now each range, which is essentially one cell, has one value in values. values = [["some string"]]
headerFormatFn(ranges[i]);
context.sync();
}
})
.catch(function (err) { console.error(err); })
});
и фактическое форматирование происходит в headerFormatFn (range [i]):
function headerFormatFn(cell) {
cell.format.font.bold = true;
cell.format.borders.getItem(1).style = 'Continuous';
cell.format.columnWidth = 80;
}
Я проверил поддержку ExcelApi в своем Excel 2016 и знаю, что autofitColumns () не поддерживается, поэтому я понимаю, почему эта функция не работает. Для этого мне нужно обновить Excel 2016. Однако columnWidth - это свойство, которое поддерживается в ExcelApi 1.1, и поэтому оно поддерживается в моей версии Excel 2016.
Это странно, потому что format.font.bold
и format.borders
прекрасно работают. Похоже, что просто установка columnWidth не работает. См. Ниже вид полученного рабочего листа:
Я не могу сказать, имеет ли это какое-то отношение к context
, или, может быть, мы неправильно настраиваем нашу надстройку Excel. Любая помощь будет принята с благодарностью, и если потребуется дополнительная информация, дайте мне знать.
------- ОБНОВЛЕНИЕ 1 -------
В ответ на ответ @Michael я внес следующие изменения:
Я изменил свой Excel.run на:
Excel.run(function (context) {
var sheet = context.workbook.worksheets.getItem("Sheet1");
for (var i = 0; i < numCols; i++) {
var range = sheet.getCell(0, i);
range.load(['values', 'text', 'format/*']);
ranges.push(range);
}
for (var i = 0; i < numCols; i++) {
ranges[i].values = [headers[i]];
headerFormatFn(ranges[i]);
}
return context.sync()
.catch(function (err) { console.error(err); })
});
и сейчас я использую border.getItemAt(0).style = 'Continuous'
:
try {
console.log("1");
cell.format.font.bold = true;
console.log("2");
cell.format.borders.getItemAt(0).style = 'Continuous';
console.log("3");
cell.format.columnWidth = 80;
}
catch(error)
{
console.log(error);
}
Журналы 1, 2 и 3 показывают, что цикл завершается, а затем выдает OfficeExtensionError
InvalidArgument
после цикла при вызове context.sync ().