문제

저는 Visual Studio Tools for Office(2008)를 사용하여 Excel 2007 추가 기능을 개발하고 있습니다.시작 시 데이터 테이블에 바인딩되는 여러 ListObject가 포함된 시트 하나가 있습니다.바인딩되면 크기가 올바르게 자동 조정됩니다.

문제는 다시 바인딩될 때 발생합니다.데이터베이스로 돌아가서 사용자가 입력한 일부 기준에 따라 다른 정보를 검색하는 사용자 정의 버튼이 리본 막대에 있습니다.이 새로운 데이터가 다시 돌아와 ListObject에 다시 바인딩됩니다. 그러나 이번에는 크기가 조정되지 않고 예외가 발생합니다.

ListObject는 데이터에 맞게 크기를 조정할 수 없기 때문에 구속력이 없습니다.ListObject는 새로운 행을 추가하지 못했습니다.이는 목록 개체 아래에서 객체를 움직일 수 없기 때문에 발생할 수 있습니다.

내부 예외:"Range 클래스의 삽입 방법이 실패했습니다"
이유:Microsoft.Office.Tools.Excel.FailureReason.CouldNotResizeListObject

Google이나 MSDN에서 이 오류에 대해 매우 의미 있는 내용을 찾을 수 없었습니다.나는 이것을 한동안 알아내려고 노력했지만 아무 소용이 없었습니다.

기본 코드 구조:

//at startup
DataTable tbl = //get from database
listObj1.SetDataBinding(tbl);
DataTable tbl2 = //get from database
listObj2.SetDataBinding(tbl2);  

//in buttonClick event handler
DataTable tbl = //get different info from database
//have tried with and without unbinding old source
listObj1.SetDataBinding(tbl);              <-- exception here
DataTable tbl2 = //get different info from database
listObj2.SetDataBinding(tbl2);

이 예외는 ListObject가 커질 때뿐만 아니라 축소되는 경우에도 발생합니다.

도움이 되었습니까?

해결책

다른 사람이 이 문제를 겪고 있다면 이 예외의 원인을 찾았습니다.ListObject는 시트의 다른 개체에 영향을 주지 않는 한 바인딩 시 자동으로 크기가 조정됩니다.ListObject는 자신이 둘러싸는 Range에만 영향을 미칠 수 있다는 점을 명심하세요.

내 경우에는 다른 목록 개체 위에 있는 목록 개체의 열 수가 그 아래에 있는 개체보다 적었습니다.상단 ListObject에 2개의 열이 있고 하단 ListObject에 3개의 열이 있다고 가정해 보겠습니다.최상위 ListObject가 행 수를 변경하면 세 번째 열이 기본 Range에 없기 때문에 변경할 수 없습니다.즉, 세 번째 열의 셀을 이동할 수 없으므로 두 번째 ListObject를 제대로 이동할 수 없어 위의 예외가 발생합니다.

더 작은 것 위에 더 넓은 것을 배치하기 위해 ListObject의 위치를 ​​변경하면 제대로 작동합니다.위의 논리에 따르면 이제 더 넓은 ListObject가 두 번째 ListObject의 모든 열을 이동할 수 있고 더 작은 ListObject 아래에 아무것도 없기 때문에 필요한 셀도 이동할 수 있음을 의미합니다.초기 바인딩에서 문제가 발생하지 않았던 이유는 두 ListObject가 모두 단일 셀이었기 때문입니다.

내 경우에는 이것이 최적이 아니기 때문에 가능하다면 빈 열을 사용하거나 보이지 않는 열을 가지고 놀려고 할 것입니다. 그러나 적어도 원인은 이제 분명합니다.

다른 팁

여러 목록 개체를 새로 고치는 데 비슷한 문제가 있습니다.각 listObject.DataSource = null을 설정한 다음 맨 아래 listobject에서 시작하여 위에서 아래가 아닌 위로 작업하는 방식으로 리바인딩합니다.

더 많은 정보를 제공하는지 확인하기 위한 아이디어입니다.예외 줄 앞에 있는 목록 개체의 크기를 조정하여 예외가 발생하는지 확인하세요.그렇지 않은 경우 범위 개체의 크기를 DataTable의 새 크기로 조정해 보세요.

ListObject가 줄어들고 커질 때 이런 일이 발생한다고 말씀하셨습니다.ListObject가 동일한 크기로 유지되는 경우에도 발생합니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top