2012-06-12 7 views
0

Я пишу метод для возврата значения ячейки листа Excel при передаче имени файла, имени листа и адреса ячейки.Рекурсивно вызвать метод для получения значений листа Excel.

public static string GetCellValue(string fileName, string sheetName, string addressName) 
     { 
      string value = null; 


      using (SpreadsheetDocument document = SpreadsheetDocument.Open(fileName, false)) 
      { 

       WorkbookPart wbPart = document.WorkbookPart; 


        Where(s => s.Name == sheetName).FirstOrDefault(); 


       if (theSheet == null) 
       { 
        throw new ArgumentException("sheetName"); 
       } 


       WorksheetPart wsPart = 
        (WorksheetPart)(wbPart.GetPartById(theSheet.Id)); 


       Cell theCell = wsPart.Worksheet.Descendants<Cell>(). 
        Where(c => c.CellReference == addressName).FirstOrDefault(); 


       if (theCell != null) 
       { 
        value = theCell.InnerText; 


        if (theCell.DataType != null) 
        { 
         switch (theCell.DataType.Value) 
         { 
          case CellValues.SharedString: 
. 
           var stringTable = 
            wbPart.GetPartsOfType<SharedStringTablePart>() 
            .FirstOrDefault(); 

           if (stringTable != null) 
           { 
            value = 
             stringTable.SharedStringTable 
             .ElementAt(int.Parse(value)).InnerText; 
           } 
           break; 

          case CellValues.Boolean: 
           switch (value) 
           { 
            case "0": 
             value = "FALSE"; 
             break; 
            default: 
             value = "TRUE"; 
             break; 
           } 
           break; 
         } 
        } 
       } 
      } 
      return value; 
     } 

вот как вызов вышеуказанного метода.

private void button1_Click(object sender, EventArgs e) 
     { 
      const string fileName = @"C:\Users\dkumarage\Desktop\Book1.xlsx"; 
      string value = GetCellValue(fileName, "Sheet1", "A1"); 
      textBox1.Text = value; 
     } 

таким образом, я могу получить только 1 ячейку. Как я могу вызвать этот метод рекурсивно, чтобы получить все значения ячеек. пожалуйста помогите. (здесь я не могу передать диапазон. Потому что я не знаю диапазон. Вместо этого я должен использовать в то время как (не конец строки))

спасибо

+1

Из вашего объяснения я не вижу преимущества использования рекурсии. Также где 'while' и что не так с его использованием? –

+0

Я просто хочу получить все значения из excel вместо одной строки. Я не знаю, как это сделать. – devan

ответ

1

Я не знаю, почему вы хотите его быть рекурсивным. В любом случае, это нерекурсивная версия того, что вы хотите сделать. Он использует взаимодействие Excel, и я не беспокоился об управлении исключениями (такие вещи, как файл не найден, или рабочий лист не существует и т. Д.), Но он должен дать вам отправную точку.

public static List<string> GetCellValue(string fileName, string sheetName, string addressName) 
    { 
     List<string> result = new List<String>; 
     object hmissing = System.Reflection.Missing.Value; 
     Application app = new ApplicationClass(); 
     Workbook aWb = app.Workbooks.Open(fileName, hmissing, hmissing, hmissing, hmissing, 
      hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, 
      hmissing); 
     Worksheet aWs = aWb.Worksheets[sheetName] as Worksheet; 
     object[,] values = aWs.UsedRange.get_Value(hmissing) as object[,]; 
     foreach (object anObj in values) 
      if (anObj != null) 
       result.Add(anObj.ToString()); 
     aWb.Close(false, hmissing, hmissing); 
     app.Quit();   
     return result; 
    } 
Смежные вопросы