Здравствуйте, Ransom Stark, Вы писали:
RS>Здравствуйте, Аноним, Вы писали:
А>>Как можно работать с excell-ем из C#? в частности интересует как можно из excell-файла вытащить из каждой закладки DataTable с данными?
RS>я делаю примерно так.
RS>RS> private const int SheetNumber = 0;
RS> private static string GetConnectionString(string path)
RS> {
RS> return string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=No;IMEX=1""", path);
RS> }
RS> private static string GetSheetName(OleDbConnection connection)
RS> {
RS> System.Data.DataTable sheets = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[]{null, null, null, "TABLE"});
RS> string result = "[" + sheets.Rows[SheetNumber]["TABLE_NAME"].ToString() + "]";
RS> return result;
RS> }
RS> private static OleDbCommand GetCommand(OleDbConnection connection)
RS> {
RS> string commandText = "SELECT * FROM " + GetSheetName(connection);
RS> OleDbCommand result = new OleDbCommand(commandText, connection);
RS> return result;
RS> }
RS> public static DataTable GetExcelTable(OleDbConnection connection)
RS> {
RS> connection.Open();
RS> OleDbCommand command = GetCommand(connection);
RS> OleDbDataAdapter adapter = new OleDbDataAdapter(command);
RS> DataSet ds = new DataSet();
RS> adapter.Fill(ds);
RS> return ds.Tables[0];
RS> }
RS>
можно-то можно, так и делается, только данные не всегда правильно интерпретируются, о чем собсно выше и написано
плюс данный код можно упростить, так как нет необходимости создавать DataSet в adapter.Fill можно и DataTable передавать