Собственно, идея очень простая - надо открыть OleDb-соединение и вперед, с песней :)
Берем вот такой .xls-файл:
Чтение данных делаем так:
string fileName = @"test.xls";
string sheetName = "Sheet$";
string connString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " +
fileName +
"; Extended Properties=Excel 8.0";
string query = "Select * from [" + sheetName + "]";
OleDbConnection conn = new OleDbConnection(connString);
OleDbCommand cmd=new OleDbCommand(query, conn);
conn.Open();
OleDbDataReader reader = cmd.ExecuteReader();
textBox1.Text = "";
while (reader.Read())
{
textBox1.Text += System.Environment.NewLine;
textBox1.Text += reader.GetString(0) + " ("+reader.FieldCount+")";
}
reader.Close();
conn.Close();
Результат будет примерно таким:
А запись данных так:
string fileName = @"test.xls";
string sheetName = "Sheet$";
string connString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " +
fileName +
"; Extended Properties=Excel 8.0";
string wquery = "Insert into [Sheet$] (Name,Data) Values (?,?)";
OleDbConnection conn = new OleDbConnection(connString);
OleDbCommand wcmd=new OleDbCommand(wquery, conn);
conn.Open();
OleDbParameter namep = wcmd.Parameters.Add("Name", OleDbType.VarChar, 80);
OleDbParameter datap = wcmd.Parameters.Add("Data", OleDbType.UnsignedInt, 16);
namep.Value = "aaa";
datap.Value = 15;
wcmd.ExecuteNonQuery();;
conn.Close();
Результат, соответственно, такой:
Вот так вот всё просто. Я надеюсь, что найти где это можно применить сможете сами :)
Ой, спасибо! Спасибо Огромное! Классно! А главное просто! Но все пишет!
ОтветитьУдалитьЯ сам удивился, что оно работает :)
ОтветитьУдалитьСтранно, что про такую возможность практически никто не знает...
Работает неправильно, если взять excel файл 2007 офиса
ОтветитьУдалитьВот так годится Provider=Microsoft.ACE.OLEDB.12.0;
Только это всё децкий пример.
Как из byte[](файл excel) прочитать его содержимое, без создания файла
Логично, новый эксел - новые глюки :) Тем более что Microsoft прекратило поддержку Jet. Помимо прочего - данный код вообще не будет работать (с указанной мной строкой подключения) на 64-битных платформах с 64-битной версией программы. По причине отсутствия Microsoft Jet 4.0 x64.
ОтветитьУдалитьА вот если верить вот этому блогу http://blogs.msdn.com/gzunino/archive/2004/08/02/206377.aspx то не использовать временный файл - нельзя.