존재해야하는 페이지 나누기 항목을 검색 할 때 잘못된 인덱스 COM 예외이 발생합니다.C에서 Excel Interop을 사용하는 '잘못된 인덱스'
Excel.Worksheet.HPageBreaks 목록에서 세 번째 이상의 항목에 액세스하려고 할 때마다 잘못된 인덱스 오류가 반환됩니다. 항목 1 또는 2 인 경우 항목을 검색하는 데 문제가 없으며 필요한 매개 변수를 제공합니다. (각 페이지에서 페이지 나누기 행을 검색하여 입력중인 데이터가 특정 지점에서 분리되지 않는지 확인하려고합니다.)
이 코드를 초기화하는 방법은 기존 코드에서 발생했습니다. 어쩌면 당신이 볼 수있는 몇 가지 매개 변수가 모순 될 수 있습니다. 내 출력은 MessageBoxes입니다.
가 여기에 기존 코드 :
Excel.Application xApp = new Excel.Application();
Excel.Workbook xWorkBook;
Excel.Worksheet xWorkSheet;
object missingVal = System.Reflection.Missing.Value;
xWorkBook = xApp.Workbooks.Add(missingVal);
xWorkSheet = xWorkBook.Worksheets.get_Item(1);
xWorkSheet.PageSetup.Orientation =
Microsoft.Office.Interop.Excel.XlPageOrientation.xlPortrait;
xWorkSheet.PageSetup.Zoom = false;
xWorkSheet.PageSetup.FitToPagesTall = 20;
xWorkSheet.PageSetup.FitToPagesWide = 1;
xApp.UseSystemSeparators = false;
xWorkSheet.Columns[1].ColumnWidth = 25;
xWorkSheet.Columns[2].ColumnWidth = 10;
for (int i = 3; i < 28; i++)
xWorkSheet.Columns[i].ColumnWidth = 1;
var range = xWorkSheet.get_Range("A1", "AB1");
range.Merge();
range.Font.Size = 16;
range.RowHeight = 21;
range.Font.Bold = true;
range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
range = xWorkSheet.get_Range("A2", "AB2");
range.Merge();
range.Font.Size = 10;
range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
MessageBox.Show(xWorkSheet.HPageBreaks.Count.ToString()); //This gives zero pagebreaks
xWorkSheet.Cells[500, 1] = " ";
MessageBox.Show(xWorkSheet.HPageBreaks.Count.ToString()); //This gives nine pagebreaks
MessageBox.Show(xWorkSheet.HPageBreaks.Item[1].Location.Row.ToString()); //This returns 51
MessageBox.Show(xWorkSheet.HPageBreaks.Item[2].Location.Row.ToString()); //This returns 102
MessageBox.Show(xWorkSheet.HPageBreaks.Item[3].Location.Row.ToString()); //This is where it breaks with the error
코드의 하단에서, 나는 거기에 9 개 항목은 xWorkSheet.HPageBreaks.Count.ToString()
를 사용 pagebreaks에 총한다는 항목을 확인하기 전에 확인. 그냥이 중요한 경우 항목 확실하지 않음 2. 과거의 모든 항목을 검색 할 수하지 않는 것,하지만 난
xWorkSheet.HPageBreaks.Item[3]
xWorkSheet.HPageBreaks[3]
및
xWorkSheet.HPageBreaks[xWorkSheet.HPageBreaks.Count] //Success at 1 or 2 PBs only
로 전환 시도
행 500 이외의 엑셀 시트에서 공백 문자에 대해 다른 게재 위치를 시도했습니다.
아이디어가 절대적으로 없으며 해결책을 찾지 못한 채 2010 년에 게시 된 관련성없는 해결책을 찾지 못했습니다. 이것은 내 첫 번째 질문이기 때문에 아무것도 놓친 경우 알려 주시기 바랍니다. :)
내가 놓칠 수있는 아이디어 나 해결책이 있습니까?
감사합니다.
편집 : 불행히도, 나는 또한 this post처럼 foreach 루프를 사용하여 foreach 루프를 가리키는 잘못된 인덱스 오류를 다시 반환합니다. 수하여
xApp.ActiveWindow.View = XlWindowView.xlPageBreakPreview;
xWorkSheet.DisplayPageBreaks = true;
xWorkSheet.DisplayAutomaticPageBreaks = true;
이 객체 내에서 가시가되기 위해 페이지 나누기의 모든 값을 허용해야하고, : 나는
코드를 디버깅하고'xWorksheet.HPageBreaks.Count'의 값을 확인하면 되돌릴 정수는 무엇입니까? '잘못된 색인'오류는 대개 축 어적입니다 - 현재 생각하는 것보다 높은 숫자를 참조하려고합니다. – gravity
게시물에서 언급했듯이, 내가 게시 한 코드의 맨 아래에 이미 그렇게했습니다. 값 9를 반환하므로 '유효해야'하는 숫자를 참조하고 있지만 어떤 이유로는 없습니다. 그렇기 때문에 'xWorksheet.HPageBreaks.Count'가 9를 반환하더라도 항목 1과 2가 제대로 반환되지만 3은 반환하지 않는 것이 이상하다고 생각하는 이유입니다. – Halsifer
명확하게 말하면 9 개의 항목이 있고 명시적인'.Count' 9, 그 자체를 돌려 줬다. 그 문언을 명시 적으로 [편집]해야합니다. 나는 내일 이것을 좀더 자세하게 볼 것이다. – gravity