0

ユーザーが自分の名前 (名と姓) をコンボボックスに入力する Windows フォームアプリケーションがあります。入力した値をコンボボックスに追加して下にリストする追加ボタンがあります。私がやろうとしているのは、コンボボックスにリストされている名前を取得し、それらを別々の行でExcelに入力することです. また、Excel ファイルには「名」と「姓」の 2 つの列があるため、コンボ ボックスの名前を分割する必要があります。

ここに私の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];
        }
4

2 に答える 2

1

OK、ここでコードを解決しました。助けてくれてありがとう!

//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;
            }
于 2012-05-31T22:03:09.923 に答える
0

あなたの場合、コンボボックス内のすべてのアイテムが必要なように聞こえるので、コンボボックスの「Items」プロパティを使用します...

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

アイテムのリストから選択したアイテムのみが必要な場合は、「SelectedItem」プロパティを使用できます。

または...

ブック内の異なるセルに各アイテムを追加したい場合があるので、forループを使用して、セルにも使用する整数を使用できます...

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; 

}
于 2012-05-31T20:41:20.707 に答える