2012-05-31 2 views
0

У меня есть приложение для форм Windows, в котором пользователь вводит свое имя (имя и фамилия) в поле со списком. У меня есть кнопка добавления, которая добавляет любое значение, которое они вносят в поле со списком, и перечисляет его ниже. То, что я пытаюсь сделать, это взять имена, перечисленные в поле со списком, и ввести их в excel в отдельных строках. У меня также есть 2 столбца в файле excel с «Имя» и «Фамилия», поэтому имя в поле со списком нужно разделить.C# записывать значения combobox для строк excel

вот мой код для моего первенствует:

if (!File.Exists(@"C:\gradsheet.xlsx")) 
     { 
      File.WriteAllBytes(@"C:\gradesheet.xlsx", Properties.Resources.gradesheet); 
     } 

     // if there is no title selected 
     if (String.IsNullOrEmpty(cboSelect.Text)) 
     { 
      MessageBox.Show("Please make sure a category is selected.", "No Subject Found Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 

      return; 
     } 


     object oOpt = System.Reflection.Missing.Value; 

     Excel.Application excelApp = new Excel.ApplicationClass(); 
     Excel.Workbook wBook; 


     string myPath = @"C:\gradesheet.xlsx"; 

     wBook = excelApp.Workbooks.Open(myPath, Missing.Value, Missing.Value, 

      Missing.Value, Missing.Value, 

      Missing.Value, Missing.Value, 

      Missing.Value, Missing.Value, 

      Missing.Value, Missing.Value, 

      Missing.Value, Missing.Value, 

      Missing.Value, Missing.Value); 

     Excel.Worksheet wSheet = (Excel.Worksheet)wBook.Worksheets[1]; 

     wBook.Worksheets.get_Item(1);//get worksheet number 
     wSheet.Name = cboSelect.Text;//define name 



     //put name in excel(THIS IS WHERE I NEED THE COMBOBOX ITEMS IN EXCEL) 
     excelApp.Cells[8, 1] = firstName; 
     excelApp.Cells[8, 2] = lastName; 


     //Subject Name to cell 
     excelApp.Cells[5, 1] = cboSelect.Text; 

     //these are some cleanup calls that I found in another example.. 
     excelApp.AlertBeforeOverwriting = false; 
     excelApp.DisplayAlerts = false; 
     excelApp.Save(); 
     excelApp.Quit(); 

     System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp); 


     GC.Collect(); 

     GC.WaitForPendingFinalizers(); 



     DialogResult result; 
     result = MessageBox.Show("Would you like to open the gradesheet?", "gradesheet", MessageBoxButtons.YesNo); 
     if (result == DialogResult.Yes) 
     { 
      string gradesheet = @"C:\gradesheet.xlsx"; 
      Process.Start(gradesheet); 
     } 


    } 

Вот мой код, который разделяет имя и фамилию, но я не уверен, как сделать это сделать это для каждого элемента в выпадающем списке:

string fullName = cboStudent.Text; 
     string firstName; 
     string lastName; 
     string[] parts = fullName.Split(new string[] { ", " },  StringSplitOptions.None); 
     if (parts.Length == 1) 
     { 
      parts = fullName.Split(' '); 
      if (parts.Length == 1) 
      { 
       lastName = fullName; 
       firstName = ""; 
      } 
      else 
      { 
       lastName = parts[1]; 
       firstName = parts[0]; 
      } 
     } 
     else 
     { 
      lastName = parts[0]; 
      firstName = parts[1]; 
     } 
+0

Не имеет значения, сколько сообщений существует о том, какая плохая идея заключается в использовании inter interop для управления офисными документами, всегда кто-то все еще это делает. – Brook

+0

@Brook Почему это, из любопытства? – Yatrix

+0

@Brook ... Плохая идея может быть, но удивительно проста в программировании. У меня есть свои недостатки, я свободно признаю, но у нее также есть свои высокие очки. Boundinashes6 ... В чем вопрос? Его непонятное (по крайней мере для меня) то, что вы пытаетесь сделать здесь. – Nevyn

ответ

0

Похоже, в вашем случае, если вы хотите каждый пункт в выпадающем списке вы так использовать свойство «Items» на выпадающий список ...

foreach (object name in cboStudent.Items) 
{ 
     ... 
} 

Если вы хотите, чтобы выбранный элемент был из списка элементов, вы можете использовать свойство «SelectedItem».

Или ...

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

for (int x = 0; x < comboBox1.Items.Count; x++) 
{ 
    object name = comboBox1.Items[x]; 

    // Split name here 

    excelApp.Cells[8+x, 1] = firstName; 
    excelApp.Cells[8+x, 2] = lastName; 

} 
+0

Правильно, мне нужны все элементы в поле со списком, но как я могу отправить их в свои собственные строки? Мне кажется, мне нужно что-то вроде excel.range или что-то в этом роде. – Boundinashes6

+0

@ gene S, но ваш второй цикл работает, но только добавляет выбранный элемент в каждую ячейку, а не каждый отдельно. – Boundinashes6

+0

ОК моя проблема теперь с разделенным кодом, который я использую во втором поле кода моего исходного вопроса.Он только захватывает имя выбранного в данный момент элемента в поле со списком и только ТОЛЬКО разделяет его. Мне нужно, чтобы он разбивал каждое имя в поле со списком. – Boundinashes6

1

ОК, я решил, что это код, спасибо за помощь, ребята!

//Student Names 
     for (int x = 0; x < cboStudent.Items.Count; x++) 
      { 
       string fullName = cboStudent.Items[x] as string; 
       string firstName; 
       string lastName; 
       string[] parts = fullName.Split(new string[] { ", " }, StringSplitOptions.None); 
       if (parts.Length == 1) 
       { 
        parts = fullName.Split(' '); 
        if (parts.Length == 1) 
        { 
         lastName = fullName; 
         firstName = ""; 
        } 
        else 
        { 
         lastName = parts[1]; 
         firstName = parts[0]; 
        } 
       } 
       else 
       { 
        lastName = parts[0]; 
        firstName = parts[1]; 
       } 
       excelApp.Cells[8 + x, 1] = firstName; 
       excelApp.Cells[8 + x, 2] = lastName; 
      } 
Смежные вопросы