Здесь есть похожий вопрос В памяти OleDbConnection к файлу Excel , но на этот вопрос был дан ответ, полностью исключив его, сделав его другим способом.
Вот пример кода, который использует OleDbConnection
для доступа к файлу Excel с диска:
static void Main(string[] args)
{
String filePathToExcelFile = "c:\\excelfile.xls";
Boolean hasHeaders = true;
String connectionString = String.Format(
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};" +
"Extended Properties=\"Excel 12.0;HDR={1};IMEX=2\"",
filePathToExcelFile, hasHeaders ? "Yes" : "No");
using(OleDbConnection conn = new OleDbConnection(connectionString))
using (OleDbCommand command = new OleDbCommand("SELECT * FROM [Sheet1$]",
conn))
{
conn.Open();
OleDbDataReader datareader = command.ExecuteReader();
while(datareader.Read())
{
Object[] values = new object[datareader.FieldCount];
datareader.GetValues(values);
Console.WriteLine(String.Join(",", values));
}
}
}
Я хотел бы извлечь файл Excel из NON-SEEKABLE System.IO.Stream
, а не из постоянного файла на диске.
Вопрос разбит на две части: а) Могу ли я "указать" OleDbConnection на System.IO.Stream? б) Если это так, то может ли это быть поток только для пересылки, а не для поиска?
К вашему сведению: если вы хотите запустить этот фрагмент кода, вам нужно установить Microsoft Access Database Engine 2010 распространяемый . И если вы установите 64-битную версию, вам нужно будет настроить проект на x64, и наоборот.