2013-10-20 2 views
1

약간의 코드가 msdn.com에서 약간 변경되었습니다. Excel 스프레드 시트에서 모든 시트 이름의 문자열 배열을 가져 오려고합니다. foreach 문에 코드를 추가하여 루프 할 때마다 attr.Value를 배열에 배치 할 수 있습니까? 여기 C에서 'foreach'루프를 사용하여 문자열 배열 만들기

public static void GetSpreadsheetData(string fileName) 
{ 
    using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(fileName, false)) 
    { 
     string[] allTheSheets = new string[0]; 
     string[] allTheData = new string[0]; 
     S sheets = spreadsheetDocument.WorkbookPart.Workbook.Sheets; 

     foreach (E sheet in sheets) 
     { 
      foreach (A attr in sheet.GetAttributes()) 
      { 
       int i = 0; 
       string sheetName = attr.Value; 
       allTheSheets[i] = attr.Value.ToString(); 
       i++; 
       Console.WriteLine(allTheSheets[0]); 
       Console.ReadLine(); 
      } 
     } 
    } 
} 

내가지고있어 오류 메시지입니다 ". 인덱스 배열의 범위를 벗어난 것"

내가 혼란스럽게 생각하는 것 중 하나는 배열을 인스턴스화 할 때 그 인덱스에 [0]의 인덱스를 부여했기 때문에 범위 밖입니까?

+0

길이가 '0'인 배열 (allTheSheets)이 생성됩니다. List 사용을 고려 했습니까? –

+0

배열은 고정 크기입니다. 크기를 조정할 수 없습니다. 따라서 처음부터 올바르게 크기를 조정해야합니다. 크기를 모르는 경우'List '을 사용하십시오. –

+0

코드가 약간 이상합니다. 어떤 라인에서 예외가 발생하는지 알고 있습니까? 주의 깊게 살펴보면 항상 0 인 배열의 인덱스가 있으며 이로 인해 배열이 쓸모 없게됩니다. – Steve

답변

3

하나의 요소 만 포함 할 수있는 배열을 만들었으므로이 요소는 인덱스 0에 저장됩니다. 물론 내부 루프에 클래스 A 인스턴스가 두 개 이상있는 경우 배열에 요소가 더 필요합니다. 대신 배열을 사용

당신은 당신이 당신의 목록 allTheSheets의 모든는 A의 값을 가질 것,이 두 개의 루프의 끝에 List<string>

using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(fileName, false)) 
{ 
    List<string> allTheSheets = new List<string>(); 
    List<string> allTheData = new List<string>(); 
    S sheets = spreadsheetDocument.WorkbookPart.Workbook.Sheets; 


    foreach (E sheet in sheets) 
    { 
     foreach (A attr in sheet.GetAttributes()) 
     { 
      string sheetName = attr.Value; 
      allTheSheets.Add(attr.Value.ToString()); 
     } 
    } 

를 사용하도록 코드를 변경할 수 있고 당신이보고 다른 foreach 문을 사용할 수 있습니다 그 내용.

코드가 약간 이상해 보입니다. 문자열 요소를 저장하고 인쇄하는 데 사용되는 인덱스는 항상 0이므로 Index Out Of Bound이 없어야합니다.

+0

정말 고마워. 목록을 시도하고 잘 작동하는 것 같습니다! 도움에 감사드립니다. – will