Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Импорт данных из Excel в listbox


Автор: dize 18.8.2010, 15:39
Собственно есть данные(40 строк) в одном столбике, расположенные на Книга1, Лист1. Необходимо их отобразить точно так же в листбоксе.

Автор: jonie 18.8.2010, 16:00
Вот вам, используйте...
Код


        /// <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;
        }

Автор: dize 18.8.2010, 16:04
jonie, большое спасибо =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)