C# 用户选择要在C中加载的excel工作表
我想读一个excel文件。此excel文件包含多个工作表。用户可以选择在c中加载哪个工作表来使用它。我想将数据复制到access数据库中 我已经编写了加载excel工作簿和将数据复制到access数据库表的代码。但是在这段代码中,只有用户选择Excel文件,而不是工作表,我已经在代码中硬编码了工作表名称 如何为用户提供在中选择自己的选择表的功能 工作簿excel。我还想检索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
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为了回答您的请求,我编辑了我的答案