multi-importations de tôles avec oledb de compensation “_xlnm#_FilterDatabase” comme noms de feuille de calcul
j'ai un fichier excel avec plusieurs feuilles que je veux importer
le code est assez simple et basique, et devrait fonctionner
mais mon sheetnames reviens comme "_xlnm#_FilterDatabase" dans le débogueur
et il est la racine de mon problème
voici la portion de code:
string sheetName = "";
file = HostingEnvironment.MapPath("~/files/master1.xlsx");
xConnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + file + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";";
using (OleDbConnection connection = new OleDbConnection(xConnStr))
{
//get sheet names
connection.Open();
DataTable sheets = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
//eeo10 (2nd tab: first sheet to be imported)
sheetName = sheets.Rows[1]["TABLE_NAME"].ToString();
OleDbCommand command = new OleDbCommand("Select * FROM ["+sheetName+"]", connection);
//Create DbDataReader to Data Worksheet
using (OleDbDataReader dr = command.ExecuteReader())
{
//Bulk Copy to SQL Server
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnx))
{
bulkCopy.ColumnMappings.Add("code", "id");
bulkCopy.ColumnMappings.Add("category10", "category");
bulkCopy.DestinationTableName = "eeo10";
bulkCopy.WriteToServer(dr);
}
}
//eeo14 (3rd tab: second sheet to be imported)
sheetName = sheets.Rows[2]["TABLE_NAME"].ToString();
command = new OleDbCommand("Select * FROM [" + sheetName + "]", connection);
DataTable cols = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, sheetName, null });
foreach (DataRow r in cols.Rows)
{
System.Diagnostics.Debug.WriteLine("{0} = {1}", r["COLUMN_NAME"], r["ORDINAL_POSITION"]);
}
//Create DbDataReader to Data Worksheet
using (OleDbDataReader dr = command.ExecuteReader())
{
//Bulk Copy to SQL Server
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnx))
{
bulkCopy.ColumnMappings.Add("code", "id");
bulkCopy.ColumnMappings.Add("category14", "category");
bulkCopy.DestinationTableName = "eeo14";
bulkCopy.WriteToServer(dr);
}
}
}
donc comme l'a dit avant
le débogueur retourne sheetName="_xlnm#_FilterDatabase"
qui assez bizarrement le premier eeo10 travaux
mais eeo14 ne marche pas car il est toujours en essayant de travailler avec le eeo10 feuille
ici, peut-être que certains autres renseignements pertinents:
- j'ai désactivé le filtre automatique dans le classeur
- je l'ai mis dans la colonne d'en-tête imprimé juste pour confirmer la feuille c'était la lecture
des idées serait apprec
merci beaucoup!
OriginalL'auteur toy | 2014-04-12
Vous devez vous connecter pour publier un commentaire.
Excel crée une feuille masquée chaque fois que vous appliquez un filtre à une feuille et tout bien que cette feuille ne doit pas être disponibles lors de la récupération des noms de feuille de calcul.
Voici un morceau de code qui va vous aider à obtenir les noms de feuille de calcul à l'aide du Système.Les données.OleDb:
S'il vous plaît revenir à moi si vous avez toute sorte de problèmes avec cela.
Amusez-vous!
OriginalL'auteur Catalin