[英]Reading data from Excel sheet containg multiple tables using C#
假设我有一个包含一个工作表的Excel文件,在此工作表中有2个表,一个表用于员工字段[empID,empName,title],另一表用于部门字段[deptId,deptName]。
我想知道我怎么可以从Excel文件中读取数据,并在数据表,一个用于加载两个表emplyee
和其他的department
。
我进行了搜索,发现可以在与Excel进行oleDbconnection之后通过“ select * from [sheet $]选择”来查询工作表,但就我而言,工作表包含两个结构不同的表。
我正在使用VS2010 C#开发Windows应用程序。
首先,制作一个SheetSelectionForm。 然后将这些代码放在窗体上,并调用PopulateSheetsOfExcelFile(excelFilePath)
方法。 该表格将向您显示Excel工作表的名称,您可以选择要从Excel中读取的工作表。
如您所说,这些表具有不同的结构,因此您需要为每张Excel表格创建不同的数据表。
还有另一种使用DataAdapter读取整个Excel的方法。 使用我的方法,您可以创建自定义DataTable,并使用excel列/行索引进行填充。
using System.Data.OleDb;
private void SelectItem()
{
ExcelSheetName = excelSheetsListBox.SelectedItem != null ?
excelSheetsListBox.SelectedItem.ToString() : string.Empty;
Close();
}
private void PopulateSheetsOfExcelFile(string excelFilePath)
{
try
{
String connString = string.Empty;
try
{
connString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;\"", excelFilePath);
using (OleDbConnection objConn = new OleDbConnection(connString))
{
objConn.Open();
using (DataTable dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null))
{
if (dt == null)
return;
excelSheetsListBox.Items.Clear();
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow row = dt.Rows[i];
excelSheetsListBox.Items.Add(row["TABLE_NAME"].ToString());
}
}
}
}
catch (Exception exA1)
{
connString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"", excelFilePath);
using (OleDbConnection objConn = new OleDbConnection(connString))
{
objConn.Open();
using (DataTable dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null))
{
if (dt == null)
return;
excelSheetsListBox.Items.Clear();
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow row = dt.Rows[i];
excelSheetsListBox.Items.Add(row["TABLE_NAME"].ToString());
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(“HATA”);
ExcelSheetName = string.Empty;
Close();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.