Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用户选择要在C中加载的excel工作表_C#_Excel_Database_Ms Access_User Controls - Fatal编程技术网

C# 用户选择要在C中加载的excel工作表

C# 用户选择要在C中加载的excel工作表,c#,excel,database,ms-access,user-controls,C#,Excel,Database,Ms Access,User Controls,我想读一个excel文件。此excel文件包含多个工作表。用户可以选择在c中加载哪个工作表来使用它。我想将数据复制到access数据库中 我已经编写了加载excel工作簿和将数据复制到access数据库表的代码。但是在这段代码中,只有用户选择Excel文件,而不是工作表,我已经在代码中硬编码了工作表名称 如何为用户提供在中选择自己的选择表的功能 工作簿excel。我还想检索excel文件中的所有工作表 代码正在修改中 private void btnImport_Click(object sen

我想读一个excel文件。此excel文件包含多个工作表。用户可以选择在c中加载哪个工作表来使用它。我想将数据复制到access数据库中

我已经编写了加载excel工作簿和将数据复制到access数据库表的代码。但是在这段代码中,只有用户选择Excel文件,而不是工作表,我已经在代码中硬编码了工作表名称

如何为用户提供在中选择自己的选择表的功能 工作簿excel。我还想检索excel文件中的所有工作表

代码正在修改中

private void btnImport_Click(object sender, EventArgs e)
    {
        var openFileExcel = new OpenFileDialog()
        {
            Filter = "Excel Files | *.xlsx; *.xls; *.xlsm",
            Title = "Select an Excel File",
            CheckFileExists = true
        };
        if (openFileExcel.ShowDialog() == DialogResult.Cancel)
            return;
        DatabaseObjects.FileName = openFileExcel.FileName;
        using(OleDbConnection conn = new OleDbConnection(DatabaseObjects.ConnectionString), 
            connExcel = new OleDbConnection(DatabaseObjects.ConnectionStringExcel))
        {
            string query = "INSERT INTO Students (RollNo, SName, FName, ClassID) VALUES(@RollNo, @SName, @FName, @ClassID)";
            string queryExcel = "SELECT * FROM [Seven$]";
            using (OleDbCommand command = new OleDbCommand(query, conn), commandExcel = new OleDbCommand(queryExcel,connExcel))
            {
                OleDbParameter param1 = new OleDbParameter("RollNo", OleDbType.Numeric);
                command.Parameters.Add(param1);
                OleDbParameter param2 = new OleDbParameter("SName", OleDbType.VarChar);
                command.Parameters.Add(param2);
                OleDbParameter param3 = new OleDbParameter("FName", OleDbType.VarChar);
                command.Parameters.Add(param3);
                OleDbParameter param4 = new OleDbParameter("ClassID", OleDbType.Numeric);
                command.Parameters.Add(param4);
                conn.Open();
                connExcel.Open();
                OleDbDataReader drExcel = commandExcel.ExecuteReader();
                while(drExcel.Read())
                {
                    param1.Value = Convert.ToInt32(drExcel[0]);
                    param2.Value = drExcel[1].ToString();
                    param3.Value = drExcel[2].ToString();
                    param4.Value = Convert.ToInt32(drExcel[4]);
                    command.ExecuteNonQuery();
                }
            }
        }
    }

对不起,我一路去VBA,因为我读了EXCEL这个词。。。哈哈

现在,要获得c中现有表的列表,可以使用 DataTable schemaTable=conn.GetOleDbSchemaTableOleDbSchemaGuid.Tables,null

您需要conn作为活动连接

要获取图纸名称,请执行以下操作:

foreach (DataRow dr in schemaTable.Rows)
{
    ExcelSheets.Add(dr["TABLE_NAME"].ToString());
}
或者,使用LINQ

ExcelSheets = schemaTable.AsEnumerable()
                .Select(r => r.Field<string>("TABLE_NAME"))
                .ToList();

我正在使用office interop类检索excel文件中的图纸名称

Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook excelBook = xlApp.Workbooks.Open("D:\\Book1.xlsx"); 
    
    String[] excelSheets = new String[excelBook.Worksheets.Count];
    int i = 0;
    foreach(Microsoft.Office.Interop.Excel.Worksheet wSheet in excelBook.Worksheets)    
    {
      excelSheets[i] = wSheet.Name;
      i++;
    }

您可以很容易地将工作表列表放入数据表中

DataTable dtSheets = conn.GetSchema("Tables")

桌子是用来做什么的?我必须用我的表格来更改它,否则怎么办?不,这就是查询表格的方式。只需按原样添加该行,dtSheets将用工作表名称填充。确定。如何从此dtSheets检索工作表名称?只需将DataTable作为数据源分配给组合框即可。如果你需要这方面的指导,我相信网上有很多例子。如果您需要知道包含工作表名称的列名,只需设置一个断点并检查datatable的columns集合。我可以获取工作表。但是,应用程序的用户如何知道选择工作表,谁只是在使用界面而不是编码部分?将工作表名称添加到combobox/list控件,在您的btnImport_Click事件中,只需使用控件中选定的工作表更改工作表名称,如:select*FROM[+Combobobox1.Text+$]如何从此数据表中获取图纸名称以供进一步使用?@MuhammadRizwan为了回答您的请求,我编辑了我的答案