javascript - Office-skript som skriver sista elementet i arrayen till hela området
Jag försöker skriva de konverterade värdena från ett valt intervall till den intilliggande kolumnen med celler. Jag kan få värdena skrivna till cellerna, men det skriver bara ut värdet av det sista objektet i intervallet till alla celler. Jag har bifogat en skärmdump av vad resultatet blir, tillsammans med min kod.
Jag har gått igenom dokumentationen och försökt flera sätt att göra detta, men får hela tiden samma resultat och är därför förvirrad. Alla typer av hjälp skulle uppskattas mycket!
Här är den nuvarande utsignalen:
function main(workbook: ExcelScript.Workbook) {
// Get the currently highlighted range in the workbook.
let range = workbook.getSelectedRange();
let rangeAddress = range.getAddress();
// Get the that range's value
let cellInputs = range.getValues();
let timeInSecondsArr: Array<number>;
timeInSecondsArr = [];
// Get cell values and add to array
cellInputs.forEach((columnItem, columnIndex) => {
cellInputs[columnIndex].forEach((rowItem, rowIndex) => {
timeInSecondsArr.push(Number(rowItem));
});
});
// Initialize array to add converted values to.
let convertedValuesArr: Array<string>;
convertedValuesArr = [];
function convertValues() {
let result = "";
// convert the values.
for (let i = 0; i < timeInSecondsArr.length; i++) {
let timeInSeconds = timeInSecondsArr[i];
let rightCell = range.getOffsetRange(0, 1);
// Get the value for the ss in h:mm:ss
function getSeconds() {
let seconds = Math.floor(timeInSeconds % 60);
return seconds;
}
// Get the value for the mm in h:mm:ss
function getMinutes() {
let m = Math.floor(timeInSeconds / 60);
let minutes = m % 60;
return minutes;
}
// Get the value for h in h:mm:ss
function getHours() {
let h = Math.floor(timeInSeconds / 60);
let hours = Math.floor(h / 60);
return hours;
}
result = (`${getHours()}:${getMinutes()}:${getSeconds()}`);
convertedValuesArr.push(result);
}
return result;
}
convertValues();
let rightCells = range.getOffsetRange(0, 1);
for(let i = 0; i < convertedValuesArr.length; i++){
rightCells.setValue(convertedValuesArr[i]);
}
}
Svar #1
Felet verkar finnas i loopen mot slutet av din kod:
for(let i = 0; i < convertedValuesArr.length; i++){
rightCells.setValue(convertedValuesArr[i]);
}
Det som händer här är att du skriver varje element i arrayen till hela offset-intervallet på en gång. Så anledningen till att alla celler visar det sista elementet är att det är det sista elementet som skrivs till intervallet från arrayen. För att åtgärda detta måste du skriva till cellerna i offset-intervallet individuellt. Detta kan göras med getCell(). Så den uppdaterade kodraden skulle se ut så här:
rightCells.getCell(i,0).setValue(convertedValuesArr[i]);
