使用C#获取Excel Option Box的值

时间:2015-08-06 20:52:18

标签: c# excel

我正在尝试使用c#打开现有的excel文件,读取现有选项按钮的值(true / false)并将值写入另一个单元格。

我可以正常打开文件,但我仍然坚持如何获取选项按钮的值。选项框是表单控件而不是activeX控件。

下面的代码一直工作到最后一行,然后生成一个COMexception。

Excel.Application xlApp = new Excel.Application();  //creates the application
xlApp.Visible = true;

string wbPath = @"C:\path.xlsx";
Excel.Workbook xlWb = xlApp.Workbooks.Open(wbPath,
    0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
    true, false, 0, true, false, false);
//opens the specific file

Excel.Sheets xlS = xlWb.Worksheets;
string currentSheet = "1";
Excel.Worksheet xlWS = (Excel.Worksheet)xlS.get_Item(currentSheet);

Excel.OptionButton opt1 = (Excel.OptionButton)xlWS.OptionButtons(1);

我对编程很新。任何帮助或资源将不胜感激。

3 个答案:

答案 0 :(得分:0)

办公程序的互操作编程的一个秘诀是创建所需操作的宏。一旦保存,请查看调用不同互操作方法的VB代码。这些方法与您在C#程序中必须处理的方法相同。

如果没有别的,它可以帮助你研究所需的操作,这可能会导致其他编程方式。

在Excel中,默认情况下不显示开发人员选项卡,您需要将其打开以执行宏并运行VB编辑器。

答案 1 :(得分:0)

我明白了。感谢OmegaMan推动正确的方向发展。我会在这里发布代码,以防任何有类似问题的人需要帮助。

        Excel.Application xlApp = new Excel.Application();  //creates the application
        xlApp.Visible = true;   //change to false for final version

        string wbPath = @"C:\path.xlsx"; //sets the path
        Excel.Workbook xlWb = xlApp.Workbooks.Open(wbPath,
            0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
            true, false, 0, true, false, false);
        //creates the workbook and opens the specific file

        Excel.Worksheet xlWS = (Excel.Worksheet)xlWb.ActiveSheet;   //sets the active sheet

        Excel.Range gr1Text = xlWS.get_Range("e20"); 
        Excel.Range xlRngP19 = xlWS.get_Range("p19");
        Excel.Range xlRngQ19 = xlWS.get_Range("q19");
        xlRngP19.Value = gr1Text;

        string[] rating = { "Exceptional", "Demonstrates skill level necessary for position", "Needs Improvement", "N/A" };

        bool opt1;
        opt1 = xlApp.ActiveSheet.OptionButton2.Value;
        bool opt2;
        opt2 = xlApp.ActiveSheet.OptionButton1.Value;
        bool opt3;
        opt3 = xlApp.ActiveSheet.OptionButton3.Value;
        bool opt4;
        opt4 = xlApp.ActiveSheet.OptionButton4.Value;
        bool chBox1;
        chBox1 = xlApp.ActiveSheet.CheckBox1.Value;


        Excel.Range xlRngP20 = xlWS.get_Range("p20");

        if (opt1 == true)
        {
            xlRngP20.Value = rating[0];
        }
        else if (opt2 == true)
        {
            xlRngP20.Value = rating[1];
        }
        else if (opt3 == true)
        {
            xlRngP20.Value = rating[2];
        }
        else if (opt4 == true)
        {
            xlRngP20.Value = rating[3];
        }
        else 
        {
            xlRngP20.Value = "**NOT RECORDED**";
        }

        if (chBox1 == true)
        {
            xlRngQ19.Value = "Growth Opportunity";
        }


        xlWb.Close(true);
        xlApp.Quit();
        //closes the file

答案 2 :(得分:0)

感谢分享Akb。以下是设置值的方法:

if (job == "Y")
{
  ((Excel.OptionButton)gma.OptionButtons("jobYes")).Value = true;
}
else
{
 ((Excel.OptionButton)gma.OptionButtons("jobNo")).Value = true;
}