Чтение файла Excel в c # .net ячейка за ячейкой - PullRequest
0 голосов
/ 10 февраля 2012

Я новичок в c#.net

У меня есть лист Excel, и я хочу импортировать его в database.

Я хочу читать ячейку за ячейкой и хочу вставить значение в database.

this.openFileDialog1.FileName = "*.xls";
            DialogResult dr = this.openFileDialog1.ShowDialog();
            if (dr == System.Windows.Forms.DialogResult.OK)
            {
                string path = openFileDialog1.FileName;
                string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=no;IMEX=1;""", openFileDialog1.FileName);
                string query = String.Format("select * from [{0}$]", "Sheet3");

                OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString);

                DataSet dataSet = new DataSet();
                dataAdapter.Fill(dataSet);
                dataGridView1.DataSource = dataSet.Tables[0];

Ответы [ 2 ]

1 голос
/ 10 февраля 2012

Я предполагаю, что после выполнения кода в вашем вопросе вы можете увидеть значения в пределах dataGridView1.

. Фактическое чтение из таблицы Excel выполняется при вызове dataAdapter.Fill.Итак, в вашем случае чтение ячеек сводится к индексации столбцов и строк в dataSet.Tables[0].

Например:

for (int row = 0; row < dataSet.Tables[0].Rows.Count; row++)
{
   DataRow r = dataSet.Tables[0].Rows[row];
}

Доступ к ячейкам в строке r тривиален (как в примере выше, только для ячейки).

РЕДАКТИРОВАТЬ
Я забыл описать часть «вставить значения в базу данных».Я предполагаю, что база данных - это SQL Server (может быть и Express Edition).

Первое: создайте соединение с базой данных.Вместо того, чтобы вручную составлять строку подключения, используйте SqlConnectionStringBuilder:

SqlConnectionStringBuilder csb = new SqlConnectionStringBuilder();
csb.DataSource = <your server instance, e.g. "localhost\sqlexpress">;
csb.InitialCatalog = <name of your database>;
csb.IntegratedSecurity = <true if you use integrated security, false otherwise>;
if (!csb.IntegratedSecurity)
{
    csb.UserId = <User name>;
    csb.Password = <Password>;
}

Затем создайте и откройте новый SqlConnection со строкой подключения:

using (SqlConnection conn = new SqlConnection(csb.ConnectionString))
{
    conn.Open();

Итерируйте по всемзначения, которые вы хотите вставить и выполнить соответствующую команду вставки:

    for (...)
    {
        SqlCommand cmd = new SqlCommand("INSERT INTO ... VALUES (@param1, ..., @paramn)", conn);
        cmd.Parameters.AddWithValue("@param1", value1);
        ...
        cmd.Parameters.AddWithValue("@paramn", valuen);

        cmd.ExecuteNonQuery();
    }

Это закрывает соединение, так как блок using заканчивается:

}

И вот, пожалуйста.В качестве альтернативы вы можете использовать адаптер данных со специальной командой вставки.Затем вставка значений сводится к одной строке, однако ваша таблица базы данных должна иметь ту же структуру, что и Excel-лист (соответственно: как таблица данных, которую вы получили в опубликованном вами коде.

1 голос
/ 10 февраля 2012

Выезд в НПО

http://npoi.codeplex.com/

Это .NET-версия реализации Apache POI Excel. Он легко сделает то, что вам нужно, и поможет избежать некоторых проблем (например, локальной копии Excel или, что еще хуже, копии Excel на сервере), с которыми вы столкнетесь при использовании поставщика Jet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...