Вот вам, используйте...
| Код |
/// <summary> /// загружает из XSL файла (соедирнение с ним задается в conn) имена листов Excel /// для Excel это считается иманами таблиц /// </summary> /// <param name="conn">Закрытый, но настроенны на соединение OleDbConnection</param> /// <returns>имена листов Excel</returns> private static string[] LoadXSLSchema(OleDbConnection conn) { string[] SheetNames = null; logger.Info("LoadXSLSchema started"); try { conn.Open();
DataTable SchemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null }); if (SchemaTable.Rows.Count > 0) { SheetNames = new string[SchemaTable.Rows.Count]; int i = 0; foreach (DataRow TmpRow in SchemaTable.Rows) { SheetNames[i] = TmpRow["TABLE_NAME"].ToString(); i++; } } } catch (Exception Ex) { logger.Error("Cant get schema from XSL", Ex); throw; } finally { if (conn != null && conn.State == ConnectionState.Open) { conn.Close(); } } logger.Info("LoadXSLSchema ended"); return SheetNames; }
/// <summary> /// Загружает XSL файл в DataSet. /// Анализируется только первый лист. /// Первая строка является заголовочной - по ней определяется количество и имена столбцов /// При ошибке пробрасывает исключение /// </summary> /// <param name="fileName">Имя файла XSL</param> /// <returns>Заполненый первой страницей из файла DataSet</returns> protected static DataTable LoadFromXLS(string fileName) { DataTable dt = new DataTable(); try { string connStr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=0\";", fileName); OleDbConnection conn = new OleDbConnection(connStr); #region get sheets name from XSL file string[] sheetNames = LoadXSLSchema(conn); if(sheetNames.Length<1) throw new InvalidDataException("sheets not found"); #endregion
dt.TableName = sheetNames[0];
#region load first sheet to DataSet.Tables[0] try { string selStr = string.Format("select * from [{0}]", sheetNames[0]); conn.Open(); OleDbDataAdapter sheetAdapter = new OleDbDataAdapter(selStr, conn); sheetAdapter.Fill(dt); } catch (Exception ex) { logger.Error("cant get first sheet", ex); throw; } finally { if (conn != null && conn.State == ConnectionState.Open) { conn.Close(); conn.Dispose(); } } #endregion } catch (Exception ex) { logger.Error("parse XLS file failed", ex); dt = null; throw; } return dt; }
|
|