2017-11-16 1 views
1

시트에서 사용 된 range 내 또는 아래에 일부 행을 삽입하려고합니다.Excel API cell.insert를 실행하는 데 매우 오랜 시간이 걸릴 때

여기 내 코드는 하드 코딩 된 배열을 보여 주지만 실제로 데이터는 서버 응용 프로그램에서 가져온 것입니다. 서버 응답을 검사 한 후 삽입 순서를 결정합니다.

Excel.run(function (ctx) { 
    var rowIdsArray = [1, 2, 3, 4, 5, 6, 7, 8, 9]; //data that might have come from server 
    var sht = ctx.workbook.worksheets.getItem("Sheet1"); 
    for (var i = 50; i > 3; i--) { 
     //I might want these rows to be inserted before rows 
     //3 to 50. So 9 rows inserted 48 times 
     for (var counter1 = 0; counter1 < rowIdsArray.length; counter1++) { 
      var cell = sht.getUsedRange().getRow(parseInt(i)).getOffsetRange(1, 0); 
      cell.insert(); 
     } 
    } 
    return ctx.sync().then(function() { 
     console.log("rows inserted"); 
    }); 
}).catch(function (e) { 
    console.log("Error Message is -> " + e.message); 
}); 

내가 삽입 할 id과 행의 배열로 rowIdsArray이 : 내 코드는 다소 아래처럼 작동합니다. 루프 반복은 어느 인덱스에서 (이 배열은 난수가 내 프로젝트에 있음) 시트에이 행을 추가하려고하는지 설명합니다.

그래서 기본적으로 시트에 행 번호를 삽입합니다 (400-450 행). 그러나 너무 많은 시간이 걸립니다. 나는 Excel을 행을 삽입 매우 천천히, 하나씩 볼 수 있습니다.

office.js API는 매우 짧은 시간 내에 동일한 작업을 수행 할 수있는 다른 방법을 제공합니까?

답변

0

한 번에 모든 값을 설정할 수 있습니다 : 나는이없는

Excel.run(function (ctx) { 
    var sheetName = "Sheet1"; 
    var rangeAddress = "A3"; 
    //values is: 
    // [1, 2, 3, 4, 5, 6, 7, 8, 9] 
    // [2, 3, 4, 5, 6, 7, 8, 9, 10] 
    //... 
    // [50, 51, 52, 53, 54, 55, 56, 57, 58] 
    var values = (function(values){ 
    var i = -1; 
    var rows = rows; 
    ret = []; 
    while(++i<rows){ 
     ret.push(
     values.map(
      function(value){ 
      return value+i; 
      } 
     ) 
    ); 
    } 
    })([1,2,3,4,5,6,7,8,9]); 
    var range = ctx.workbook 
    .worksheets.getItem(sheetName) 
    .getRange(rangeAddress) 
    .getRowsBelow(rows) 
    .getColumnsAfter(9); 
    range.insert("Down"); 
    range.values = values; 
    range.load('text'); 
    return ctx.sync().then(function() { 
    console.log(range.text); 
    }); 
}).catch(function(error) { 
    console.log("Error: " + error); 
    if (error instanceof OfficeExtension.Error) { 
    console.log("Debug info: " + JSON.stringify(error.debugInfo)); 
    } 
}); 

그것을 테스트 할 수 있도록 엑셀하지만 그것을해야한다.

+0

답장을 보내 주셔서 감사합니다.하지만 제가하고 싶은 일과 관련이 없습니다. U 주어진 범위에 대한 값을 설정할 수있는 솔루션을 제공하지만 주어진 범위에 행을 삽입하려고합니다. 귀하의 코드에 삽입 옵션이 표시되지 않습니다. 더 자세히 설명해 주실 수 있습니까? –

+0

@PavanDivekar 범위를 삽입하기위한 대답을 업데이트 한 다음 값을 설정합니다 (엑셀이없고 MS 설명서로 제한되어 있기 때문에 작동하는지 확실하지 않음) : https://dev.office.com/reference/add-ins/excel/range # insertshift-string – HMR

+0

당신은 맞습니다. 그러나 이미 가지고있는 기존 범위에 행을 삽입하려고합니다. 이것은 내가 제공 한 코드를 사용하여 수행 할 수 없습니다. –

관련 문제