Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как импортировать данные из Excel 
:(
    Опции темы
Experimenter
Дата 24.11.2007, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: 4
Всего: 17



Код

using System;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Windows.Forms;
using System.Xml;

namespace VingradSamples
{
    class DataFromExcel : Form
    {
        DataGridView dgv;

        [STAThread]
        static void Main()
        {
            Application.Run(new DataFromExcel());
        }

        public DataFromExcel()
        {
            this.Text = "Взаимодействие с Excel";

            //Добавляем DataGridView на форму
            dgv = new DataGridView();
            dgv.Dock = DockStyle.Fill;
            this.Controls.Add(dgv);

            //Добавляем Меню
            MenuStrip ms = new MenuStrip();
            ms.Dock = DockStyle.Top;

            ToolStripMenuItem tsmi = new ToolStripMenuItem("Файл");
            ToolStripMenuItem child =
                new ToolStripMenuItem("Открыть...",
                                      null,
                                      menuOpenFile_Click,
                                      Keys.Control | Keys.O);
            tsmi.DropDownItems.Add(child);

            child = new ToolStripMenuItem("Выход",
                                          null,
                                          delegate { Close(); },
                                          Keys.Alt | Keys.F4);
            tsmi.DropDownItems.Add(child);
            ms.Items.Add(tsmi);
            this.Controls.Add(ms);
        }

        private void menuOpenFile_Click(object obj, EventArgs ea)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.CheckPathExists = true;
            ofd.Multiselect = false;
            ofd.Filter = "Файлы Excel|*.xls";

            try
            {
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    OleDbConnection oleConn = new OleDbConnection();

                    //HDR = Yes/No использовать или нет первую строку в качестве заголовка столбцов
                    //IMEX = 1 - все данные будут импортированы как текст
                    //за подробностями сюда: http://support.microsoft.com/kb/194124/EN-US/
                    oleConn.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0; " +
                                               "Data Source = '" + ofd.FileName + "'; " +
                                               "Extended Properties = 'Excel 8.0; HDR = Yes; IMEX = 1'";

                    //Вместо 'Лист1' проставить имя нужного листа в выбранном файле
                    string strSQL = "SELECT * FROM [Лист1$]";

                    oleConn.Open(); 
                    OleDbCommand oleCom = new OleDbCommand(strSQL, oleConn);
                    OleDbDataAdapter oleDA = new OleDbDataAdapter(oleCom);
                    DataSet ds = new DataSet();
                    oleDA.Fill(ds, "xlTable");
                    oleDA.FillSchema(ds, SchemaType.Source, "xlTable");
                    oleConn.Close();
                    dgv.DataSource = ds.Tables["xlTable"];
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}


Это сообщение отредактировал(а) Experimenter - 26.11.2007, 09:13


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
thomas
Дата 24.11.2007, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 6
Всего: 65



Добавлю свои пять копеек.
Цитата

 //Вместо 'Лист1' проставить имя нужного листа в выбранном файле
                    string strSQL = "SELECT * FROM [Лист1$]";


Функция для получения массива типа string с именами листов в Excel файле.
Код

Public Function GetExcelSheetNames() As String()
        Dim dt As DataTable
        Try
            con.Open()
            dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
            If dt Is Nothing Then
                Return Nothing
            End If
            Dim excelSheet() As String
            Dim size As Integer = dt.Rows.Count - 1
            excelSheet = New String(size) {}
            Dim i As Int16 = 0
            For Each row As DataRow In dt.Rows
                Dim strSheetTableName As String = row("TABLE_NAME").ToString()
                excelSheet(i) = strSheetTableName.Substring(0, strSheetTableName.Length - 1)
                i += 1
            Next
            Return excelSheet
        Catch ex As Exception
            Throw New Exception(ex.Message)
        Finally
            con.Close()
        End Try
    End Function 'in orde

Код

public string[] GetExcelSheetNames()
        {
            DataTable dt;
            try
            {
                con.Open();
                dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                if (dt == null) return null;
                string[] excelSheet;
                int size = dt.Rows.Count - 1;
                excelSheet = new string[size];
                int i = 0;
                foreach (DataRow row in dt.Rows)
                {
                    string strSheetTableName = row["TABLE_NAME"].ToString();
                    excelSheet[i] = strSheetTableName.Substring(0, strSheetTableName.Length - 1);
                    i++;
                }
                return excelSheet;
            }
            catch(Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                con.Close();
            }
        }


Это сообщение отредактировал(а) thomas - 25.11.2007, 00:26


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Experimenter
Дата 24.11.2007, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: 4
Всего: 17



thomas, отлично, спасибо!

Это сообщение отредактировал(а) Experimenter - 26.11.2007, 09:12


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0777 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.