我正在尝试将数据从excel复制到sql server但面临以下错误。
Microsoft Office Access数据库引擎找不到对象'sheet1 $'。确保对象存在,并且您正确拼写其名称和路径名称。
我的代码是:
protected void importdatafromexcel(string filepath)
{
string sqltable = "PFDummyExcel";
string exceldataquery = "select EmployeeId,EmployeeName,Amount from [Sheet1$]";
string excelconnectionstring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties=Excel 12.0;Persist Security Info=False";
string sqlconnectionstring = System.Configuration.ConfigurationManager.ConnectionStrings["HRGold"].ConnectionString;
SqlConnection con = new SqlConnection(sqlconnectionstring);
OleDbConnection oledb = new OleDbConnection(excelconnectionstring);
OleDbCommand oledbcmd = new OleDbCommand(exceldataquery, oledb);
oledb.Open();
OleDbDataReader dr = oledbcmd.ExecuteReader();
SqlBulkCopy bulkcopy = new SqlBulkCopy(sqlconnectionstring);
bulkcopy.DestinationTableName = sqltable;
while (dr.Read())
{
bulkcopy.WriteToServer(dr);
}
oledb.Close();
}
请告诉我我是如何解决这个问题的。
答案 0 :(得分:3)
由于您尝试访问Excel文件中的工作表(名称为sheet1),因此引发此错误。默认情况下,第一个工作表名称为“sheet1”,但用户可以重命名此名称或删除此工作表。
要首先解决此问题,您必须从excel文件中获取所有工作表名称,然后您必须在上面的代码中传递此工作表名称以导入数据。
string filePath = "your file path";
string excelconnectionstring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties=Excel 12.0;Persist Security Info=False";
OleDbConnection Connection = new OleDbConnection(excelconnectionstring);
DataTable activityDataTable = Connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if(activityDataTable != null)
{
//validate worksheet name.
var itemsOfWorksheet = new List<SelectListItem>();
string worksheetName;
for (int cnt = 0; cnt < activityDataTable.Rows.Count; cnt++)
{
worksheetName = activityDataTable.Rows[cnt]["TABLE_NAME"].ToString();
if (worksheetName.Contains('\''))
{
worksheetName = worksheetName.Replace('\'', ' ').Trim();
}
if (worksheetName.Trim().EndsWith("$"))
itemsOfWorksheet.Add(new SelectListItem { Text = worksheetName.TrimEnd('$'), Value = worksheetName });
}
}
// itemsOfWorksheet : all worksheet name is added in this
所以你可以使用itemsOfWorksheet [0]作为工作表名称代替“sheet1”
答案 1 :(得分:0)
我有类似的问题,我按
排序Rest all相同,现在出现错误: Microsoft Office Access数据库引擎无法找到对象&#39; sheet1 $&#39; 已消失。