2012-03-12 3 views
1

У меня возникли проблемы с чтением из электронной таблицы Excel на C#. У меня есть этот код, который я прочитал каждую клетку от А до X.Чтение данных из файлов Excel

System.Array myvalues; string[] strArray; 
Microsoft.Office.Interop.Excel.Range range = 
    worksheet.get_Range("A" + i.ToString(), "W" + i.ToString()); 

while(range.Count!=0) 
{ 
    i++; 
    //Console.WriteLine(i); 
    range = worksheet.get_Range("A" + i.ToString(), "W" + i.ToString()); 
    myvalues = (System.Array)range.Cells.Value; 
    strArray = ConvertToStringArray(myvalues); 
    name = clearstr(strArray[1]); 

    for (int j = 1 ; j <= Int32.Parse(number_add_file)*4 ; j++) 
    { 
     name = ""; 
     lang_add = ""; 
     price = ""; 
     description = ""; 
     Console.WriteLine("I got in!"); 

     Microsoft.Office.Interop.Excel.Range range_add = 
      worksheet.get_Range("X" + i.ToString(),Type.Missing); 

     System.Array values = (System.Array)range_add.Cells.Value; 
     string[] str = ConvertToStringArray(values); 
     name = str[0]; 
     lang_add = str[1]; 
     price = str[2]; 
     description = str[3]; 
     Console.WriteLine(name + " " 
      + lang_add + " " + price + " " + description); 

     addfile(); 
    } 

Мой вопрос: Как я мог читать дальше 4 * «количество» строк в Excel на основе значения «номер»?

Например:

  A B C D E F G H I J 
     a a a a a 1 a a a a 

значение ячейки F является 1, так что я хотел бы читать (GHIJ) Если значение ячейки F является 2, я хотел бы читать (GHIJKLMN)

  A B C D E F G H I J K L M N 
     a a a a a 2 a a a a a a a a 

значения ячейки F в 3:

 A B C D E F G H I J K L M N O P Q R 
     a a a a a 3 a a a a a a a a a a a a 
+0

Прорежьте отступы на образце кода, чтобы нам не пришлось прокручивать его, чтобы прочитать код. –

+0

LOL. Или мы могли бы просто отредактировать сообщение для него ... – code4life

+0

Является ли это по существу отличным от вопроса, который вы задали несколько часов назад, по адресу http://stackoverflow.com/questions/9668178/reading-data-from-an-excel-spreadsheet ? – 48klocs

ответ

2

Это для .NET 4.0:

using Excel = Microsoft.Office.Interop.Excel; 
Excel.Application xlApp = new Excel.Application(); 
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open("somefile.xls"); 
Excel.Worksheet xlWorksheet = xlWorkbook.Sheets[1]; // assume it is the first sheet 
Excel.Range xlRange = xlWorksheet.UsedRange; // get the entire used range 
int value = 0; 
if(Int32.TryParse(xlRange.Cells[1,6].Value2.ToString(), out value)) // get the F cell from the first row 
{ 
    int numberOfColumnsToRead = value * 4; 
    for(int col=7; col < (numberOfColumnsToRead + 7); col++) 
    { 
     Console.WriteLine(xlRange.Cells[1,col].Value2.ToString()); // do whatever with value 
    } 
} 

Это позволит открыть книгу и получить первый лист в книге. Затем мы получаем весь использованный диапазон и помещаем его в переменную диапазона. Оттуда мы пытаемся проанализировать int в столбце «F» (который является 6-м столбцом, на основе 1 основывается не на основе нуля) в первой строке. Если этот синтаксический анализ будет успешным, мы затем умножим это число на 4, чтобы узнать, сколько столбцов вам нужно (в вашем сообщении вы сказали строки, но ваши примеры были столбцами). Мы используем цикл for для начала в столбце G (столбец 7) и переходим к числу столбцов для чтения + 7 (для учета столбцов, которые мы пропустили). Вы были бы свободны делать то, что хотите, со значениями, но в этом примере я просто написал их на консоль.

+0

Ваш код бросает мне эту ошибку: не удается выполнить привязку времени выполнения по нулевой ссылке! – Vlasin

+0

@ Vlasin - Прошу прощения, я не проверял его, прежде чем написал. Я исправил код, и я только что проверил его сам, и теперь он должен работать для вас. – Jetti

0

это inot прямого ответа на ваш вопрос, но у НУ может легко обратиться к клеткам, как это:

int row1 = 1; 
int row2 = 5; 

sheet1.Cells[row1, row1+row2].Value=row1.ToString(); 
String Rng = Convert.ToString(sheet1.Cells[row1, row2-row1].Address()); 
+0

совсем не актуально ... – Vlasin

0
string testList = ""; 
      String str1 = ""; 
      string logPath = @"E:\LogForConsoleApp.txt"; 
      string filePath = @"E:\SaveSheetName.txt"; 
      string Path = @"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\MSTest"; 
      List<string> ltSheetName = new List<string>(); 
      List<string> ltMethodName = new List<string>(); 
      Process myProcess = new Process(); 
      Excel.Application appExl = new Excel.Application(); 
      Excel.Workbook workbook = null; 
      Excel.Worksheet NwSheet; 
      Excel.Range ShtRange; 
      appExl = new Excel.Application(); 
      workbook = appExl.Workbooks.Open("E:\\inputSheet3", Missing.Value, ReadOnly: false); 
      NwSheet = (Excel.Worksheet)workbook.Sheets.get_Item(1); 
      ShtRange = NwSheet.UsedRange; //gives the used cells in sheet 
      int rCnt = 0; 
      int cCnt = 0; 

      for (rCnt = 1; rCnt <= ShtRange.Rows.Count; rCnt++) 
      { 
       for (cCnt = 1; cCnt <= ShtRange.Columns.Count; cCnt++) 
       { 
        if (Convert.ToString(NwSheet.Cells[rCnt, cCnt].Value2) == "Y") 
        { 
         ltSheetName.Add(NwSheet.Cells[rCnt, cCnt - 1].Value2); 
         //ltMethodName.Add(" /test:" + NwSheet.Cells[rCnt, cCnt - 1].Value2); 
        } 
       } 
      } 
      workbook.Close(false, Missing.Value, Missing.Value); 
      appExl.Quit(); 

      for (int sht = 0; sht < ltSheetName.Count; sht++) 
      { 
       ltMethodName.Clear(); 
       appExl = new Excel.Application(); 
       workbook = appExl.Workbooks.Open(ltSheetName[sht].ToString(), Missing.Value, ReadOnly: false); 
       NwSheet = (Excel.Worksheet)workbook.Sheets.get_Item(1); 
       ShtRange = NwSheet.UsedRange; //gives the used cells in sheet 
       int rCnt1 = 0; 
       int cCnt1 = 0; 

       for (rCnt1 = 1; rCnt1 <= ShtRange.Rows.Count; rCnt1++) 
       { 
        for (cCnt1 = 1; cCnt1 <= ShtRange.Columns.Count; cCnt1++) 
        { 
         if (Convert.ToString(NwSheet.Cells[rCnt1, cCnt1].Value2) == "Y") 
         { 
          ltMethodName.Add(" /test:" + NwSheet.Cells[rCnt, cCnt - 1].Value2); 
         } 
        } 
       } 
       workbook.Close(false, Missing.Value, Missing.Value); 
       appExl.Quit(); 


       for (int i = 0; i < ltMethodName.Count; i++) 
       { 
        str1 = ltMethodName[i].ToString(); 
        testList += str1; 
       } 

       string foldername = "TestResult_" + DateTime.Today.ToString().Remove(DateTime.Today.ToString().LastIndexOf("/") + 5); 
       foldername = foldername.Replace("/", ""); 

       string direc = @"E:\" + foldername; 
       string fileName = ltSheetName[sht].ToString().Substring(ltSheetName[sht].ToString().LastIndexOf("\\") + 1) + "_InderdeepAutRes.trx"; 
       if (!Directory.Exists(direc)) 
        Directory.CreateDirectory(direc); 
       string testcase = ""; 

       if (!File.Exists(direc + "\\" + fileName)) 
        testcase = " /testcontainer:" + "E:\\Practice\\TestingSample\\TestingSample\\bin\\Debug\\TestingSample.dll" + testList + " /resultsfile:" + direc + "\\" + fileName; 
       else 
       { 
        Directory.Delete(direc, true); 
        Directory.CreateDirectory(direc); 
        testcase = " /testcontainer:" + "E:\\Practice\\TestingSample\\TestingSample\\bin\\Debug\\TestingSample.dll" + testList + " /resultsfile:" + direc + "\\" + fileName; 
       } 

       ProcessStartInfo myProcessStartInfo = new ProcessStartInfo(Path, testcase); 

       try 
       { 
        TextWriter tw = new StreamWriter(filePath, false); 
        tw.WriteLine(ltSheetName[sht].ToString()); 
        tw.Close(); 
        myProcess.StartInfo = myProcessStartInfo; 
        myProcessStartInfo.UseShellExecute = false; 
        myProcessStartInfo.RedirectStandardOutput = true; 
        myProcess.Start(); 
        string output = myProcess.StandardOutput.ReadToEnd(); 
        //myProcess.WaitForExit(); 
        Console.WriteLine(output); 

       } 
       catch (Exception ex) 
       { 
        TextWriter tw = new StreamWriter(logPath, true); 
        tw.WriteLine(ex.StackTrace); 
        tw.Close(); 
       } 
      } 
+0

код хороший. объясняя, почему это здорово! вы можете это сделать? –

Смежные вопросы