O motor do Microsoft Office Access database não conseguiu encontrar um objecto

estou a tentar copiar dados do excel para o servidor sql, mas estou a enfrentar o seguinte erro.

O motor do Microsoft Office Access database não conseguiu encontrar o objecto 'sheet1$'. Certifique-se que o objecto existe e que soletra o seu nome e o nome do caminho correctamente.

o meu código é:

 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();
    }
Por favor, diz-me como resolvo isto..

Author: Ondrej Janacek, 2013-12-06

2 answers

Este erro é levantado porque você está tentando acessar a folha (que nome é sheet1) no arquivo excel. Por padrão, o nome da primeira folha é "sheet1", mas o usuário tem ou renomear este nome ou excluir esta folha.

Para resolver este problema em primeiro lugar, você tem que obter todo o nome da folha do arquivo excel, então você tem que passar este nome da folha em seu código acima para importar dados.

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

Para que possa usar o itemsOfWorksheet [0] como nome da folha em vez de" sheet1 "

 3
Author: Jayesh Goyani, 2013-12-06 07:06:35

Tive um problema semelhante, resolvi-o por

  1. gravar o ficheiro excel do ficheiro 'fileuploader' para uma pasta temporária dentro da pasta da página web.
  2. a usar a localização desse ficheiro no meu texto de ligação

O resto era o mesmo e agora o erro: O motor de banco de dados Microsoft Office Access não conseguiu encontrar o objecto 'sheet1$' tinha desaparecido.

 0
Author: Vinay Ranjan Shukla, 2016-10-05 05:25:35