Excel 如何在编码的UI中手动编写代码以从xls工作表中获取数据

Excel 如何在编码的UI中手动编写代码以从xls工作表中获取数据,excel,ms-office,coded-ui-tests,Excel,Ms Office,Coded Ui Tests,我正在通过编码的UI(手动)编写数据驱动的测试。我想从excel文件(data.xlsx)中获取数据。它将从xls工作表中获取数据,并逐个放入Gridview。 e、 g:文件路径(控制类型:行)将从xls工作表中获取数据(C:\Users\XXXXX\Desktop\malware\mal.txt)。我正在使用这种方法,但无法做到。任何人都可以帮忙 string strFilePath = "C:\\Eclipse\\Checklist.xls"; string strConnectionS

我正在通过编码的UI(手动)编写数据驱动的测试。我想从excel文件(data.xlsx)中获取数据。它将从xls工作表中获取数据,并逐个放入Gridview。 e、 g:文件路径(控制类型:行)将从xls工作表中获取数据
(C:\Users\XXXXX\Desktop\malware\mal.txt)
。我正在使用这种方法,但无法做到。任何人都可以帮忙

string strFilePath = "C:\\Eclipse\\Checklist.xls"; 
string strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strFilePath + "; Jet OLEDB:Engine Type=5;" + "Extended Properties=Excel 8.0;";
OleDbConnection cnCSV = new OleDbConnection(strConnectionString);
cnCSV.Open();
OleDbDataAdapter daCSV = new OleDbDataAdapter();

关于这个话题有很多问题和答案,但这里有一个简短的回顾:T

这里有两种访问数据的方法:Datasource或手动创建数据类

如何使用数据源可在此处找到: 或在此:

另一种方法是创建一个数据类来访问数据: 看

使用Microsoft.Office.Interop.Excel

要打开Excel实例,请执行以下操作:

private Microsoft.Office.Interop.Excel.Application excel;
...
excel = new Microsoft.Office.Interop.Excel.Application();
要打开特定工作簿,请执行以下操作:

private Workbook workbook;
....
workbook = excel.Workbooks.Open(@"\\C\Data\YourDriver.xlsx");
要获取特定工作表,请执行以下操作:

Worksheet worksheet = workbook.Worksheets["YourTestCaseWorkSheet"];
以字符串形式获取单元格A2

Range a2 = worksheet.get_Range("A2");
return a2.Text;
要终止任务,请执行以下操作:

/// <summary>
/// Quits the excel process
/// </summary>
public void Quit() 
{
    Marshal.ReleaseComObject(this.worksheet);
    Marshal.ReleaseComObject(this.workbook);
    this.excel.Quit();
    this.excel = null;
}
//
///退出excel进程
/// 
公开作废退出()
{
Marshal.ReleaseComObject(此工作表);
Marshal.ReleaseComObject(此.工作簿);
this.excel.Quit();
this.excel=null;
}
//dll
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用Excel=Microsoft.Office.Interop.Excel;
运用系统反思;
使用Microsoft.CSharp;
使用Microsoft.VisualStudio.TestTools.UITesting.HTMLControl;
使用Microsoft.VisualStudio.TestTools.UITesting.WinControl;
使用System.Windows.Forms;
使用Microsoft.VisualStudio.TestTools.UITesting;
使用Microsoft.VisualStudio.TestTools.UITest.Extension;
使用System.IO;
使用Microsoft.VisualStudio.TestTools.UnitTesting;
使用System.Data.SqlClient;
使用系统数据;
使用System.Xml;
使用系统线程;
使用System.Data.OleDb;
使用Microsoft.Office.Interop.Excel;
使用系统组件模型;
//调用类的代码
Playback.Initialize();
ReadExcel myClassObj=新建ReadExcel();
myClassObj.excelRead();
//阅读excelclass的代码
公共无效excelRead()
{
Excel.Application appExl=新的Excel.Application();
Excel.Workbook工作簿=null;
尝试
{
字符串methodName=“”;
Excel.工作表;
Excel.Range-ShtRange;
//打开Excel文件(myData.xlsx)
appExl=新的Excel.Application();
工作簿=appExl.Workbooks.Open(“E:\\inputSheet”,缺少.Value,只读:false);
NwSheet=(Excel.Worksheet)workbook.Sheets.get_项(1);
ShtRange=NwSheet.UsedRange;//给出工作表中使用的单元格
int rCnt=0;
int-cCnt=0;

对于(rCnt=1;rCnt),我建议使用OpenXML而不是互操作库。请添加一些解释。
//dll
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;
using Microsoft.CSharp;
using Microsoft.VisualStudio.TestTools.UITesting.HtmlControls;
using Microsoft.VisualStudio.TestTools.UITesting.WinControls;
using System.Windows.Forms;
using Microsoft.VisualStudio.TestTools.UITesting;
using Microsoft.VisualStudio.TestTools.UITest.Extension;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Data.SqlClient;
using System.Data;
using System.Xml;
using System.Threading;
using System.Data.OleDb;
using Microsoft.Office.Interop.Excel;
using System.ComponentModel;   


 //code for calling the class

    Playback.Initialize();
                ReadExcel myClassObj = new ReadExcel();
                myClassObj.excelRead();


    //code for reading excelclass
    public void excelRead()
            {
                Excel.Application appExl = new Excel.Application();
                Excel.Workbook workbook = null;
                try
                {
                    string methodName = "";


                    Excel.Worksheet NwSheet;
                    Excel.Range ShtRange;

                    //Opening Excel file(myData.xlsx)
                    appExl = new Excel.Application();
                    workbook = appExl.Workbooks.Open("E:\\inputSheet", 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")
                            {

                                methodName = NwSheet.Cells[rCnt, cCnt - 1].Value2;
                                Type metdType = this.GetType();
                                MethodInfo mthInfo = metdType.GetMethod(methodName);

                                if (Convert.ToString(NwSheet.Cells[rCnt, cCnt - 1].Value2) == "fn_AddNum" || Convert.ToString(NwSheet.Cells[rCnt, cCnt - 1].Value2) == "fn_SubNum")
                                {
                                    StaticVariable.intParam1 = Convert.ToInt32(NwSheet.Cells[rCnt, cCnt + 2].Value2);
                                    StaticVariable.intParam2 = Convert.ToInt32(NwSheet.Cells[rCnt, cCnt + 3].Value2);
                                    object[] mParam1 = new object[] { StaticVariable.intParam1, StaticVariable.intParam2 };
                                    object result = mthInfo.Invoke(this, mParam1);
                                    StaticVariable.intOutParam1 = Convert.ToInt32(result);
                                    NwSheet.Cells[rCnt, cCnt + 4].Value2 = Convert.ToString(StaticVariable.intOutParam1) != "" ? Convert.ToString(StaticVariable.intOutParam1) : String.Empty;
                                }

                                else
                                {
                                    object[] mParam = new object[] { };
                                    mthInfo.Invoke(this, mParam);

                                    NwSheet.Cells[rCnt, cCnt + 4].Value2 = StaticVariable.outParam1 != "" ? StaticVariable.outParam1 : String.Empty;
                                    NwSheet.Cells[rCnt, cCnt + 5].Value2 = StaticVariable.outParam2 != "" ? StaticVariable.outParam2 : String.Empty;
                                }
                                NwSheet.Cells[rCnt, cCnt + 1].Value2 = StaticVariable.resultOut;



                            }
                            else if (Convert.ToString(NwSheet.Cells[rCnt, cCnt].Value2) == "N")
                            {
                                MessageBox.Show("Result is No");
                            }
                            else if (Convert.ToString(NwSheet.Cells[rCnt, cCnt].Value2) == "EOF")
                            {
                                MessageBox.Show("End of File");
                            }

                        }
                    }

                    workbook.Save();
                    workbook.Close(true, Missing.Value, Missing.Value);
                    appExl.Quit();
                    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(ShtRange);
                    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(NwSheet);
                    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(workbook);
                    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(appExl);
                }

                catch (Exception)
                {
                    workbook.Close(true, Missing.Value, Missing.Value);
                }
                finally
                {
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                    System.Runtime.InteropServices.Marshal.CleanupUnusedObjectsInCurrentContext();



                }

            }

            public void fn_Login()
            {
                string path = @"E:\log.txt";
                try
                {
                    BrowserWindow brwin1 = BrowserWindow.Launch("http://www.ndtv.com");
                    brwin1.Maximized = true;
                    HtmlHyperlink htSubmit = new HtmlHyperlink(brwin1);
                    htSubmit.SearchProperties.Add("InnerText", "Arvind Kejriwal's Appeal Wins Donations for 'Broke' AAP");
                    htSubmit.DrawHighlight();
                    StaticVariable.resultOut = true;
                }
                catch (UITestControlNotFoundException ex)
                {
                    TextWriter tw = new StreamWriter(path, true);
                    tw.WriteLine(ex.StackTrace);
                    tw.Close();
                    StaticVariable.resultOut = false;
                }
            }

            public void fn_LogOut()
            {
                string path = @"E:\log.txt";
                try
                {
                    BrowserWindow brwin1 = BrowserWindow.Launch("http://www.ndtv.com");
                    brwin1.Maximized = true;
                    HtmlHyperlink htSubmit = new HtmlHyperlink(brwin1);
                    htSubmit.SearchProperties.Add("InnerText", "He Has 4 Degrees,But Works as a Garbage Collector in Mumbai");
                    htSubmit.DrawHighlight();
                    StaticVariable.resultOut = true;
                }
                catch (UITestControlNotFoundException ex)
                {
                    TextWriter tw = new StreamWriter(path, true);
                    tw.WriteLine(ex.StackTrace);
                    tw.Close();
                    StaticVariable.resultOut = false;
                }
            }

            public void fn_LinkRes()
            {
                SqlConnection conRes = new SqlConnection("Data Source=CHDSEZ301257D;Initial Catalog=AGCS;Integrated Security=True");
                SqlCommand cmdRes = new SqlCommand();
                cmdRes.Connection = conRes;
                cmdRes.CommandType = CommandType.Text;
                cmdRes.CommandText = "select * from tbl_Links";
                SqlDataAdapter daDetails = new SqlDataAdapter(cmdRes);
                System.Data.DataTable dtDetails = new System.Data.DataTable();
                daDetails.Fill(dtDetails);
                StaticVariable.outParam1 = dtDetails.Rows[0][0].ToString();
                StaticVariable.outParam2 = dtDetails.Rows[0][1].ToString();
                StaticVariable.resultOut = true;
            }

            public int fn_AddNum(int a,int b)
            {
                int result = 0;
                result = a + b;
                StaticVariable.resultOut = true;
                return result;
            }

            public int fn_SubNum(int a, int b)
            {
                int result = 0;
                result = a - b;
                StaticVariable.resultOut = true;
                return result;
            }

    //code for static class
    public static bool resultOut;
            public static int intParam1;
            public static int intParam2;
            public static int intOutParam1;
            public static int intOutParam2;
            public static string strParam1;
            public static string outParam1;
            public static string outParam2;
            public static DataTable dtExcel;

//excel data

    tcId    FuncName    Flag    Result  InParam1    InParam2    OutParam1   OutParam2
    Tc_001  fn_Login    Y                   
    Tc_002  fn_LogOut   N                   
    Tc_003  fn_LinkRes  N                   
    Tc_004  fn_AddNum   Y       23  34      
    Tc_005  fn_Login    N                   
    Tc_006  fn_LogOut   Y                   
    Tc_007  fn_LinkRes  N                   
    Tc_008  fn_SubNum   N       34  23      
    Tc_009  fn_Login    N                   
    Tc_010  fn_LogOut   N                   
    Tc_011  fn_LinkRes  Y                   
    Tc_012  fn_AddNum   N       23  34      
    Tc_013  fn_Login    N                   
    Tc_014  fn_LogOut   N                   
    Tc_015  fn_LinkRes  N                   
    Tc_016  fn_SubNum   Y       34  23      
    Tc_017  fn_Login    N                   
    Tc_018  fn_LogOut   N                   
    Tc_019  fn_LinkRes  N                   
    EOF