这里有一个类似的问题 In Memory OleDbConnection to Excel File,但是通过另一种方式来回答了这个问题。
以下是使用
我希望能够从一个不可寻址的 System.IO.Stream 中提取 Excel 文件,而不是执着于磁盘上的持久文件。
这个问题可以分解为两个部分:a)我可以“指向”OleDbConnection 到一个 System.IO.Stream 吗?b)如果可以,它可以是一个只向前的流而不是可寻址的流吗?
FYI:如果您想运行此代码片段,则需要安装 Microsoft Access Database Engine 2010 Redistributable。如果您安装了 64 位版本,则需要将项目定位为 x64,反之亦然。
以下是使用
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));
}
}
}
我希望能够从一个不可寻址的 System.IO.Stream 中提取 Excel 文件,而不是执着于磁盘上的持久文件。
这个问题可以分解为两个部分:a)我可以“指向”OleDbConnection 到一个 System.IO.Stream 吗?b)如果可以,它可以是一个只向前的流而不是可寻址的流吗?
FYI:如果您想运行此代码片段,则需要安装 Microsoft Access Database Engine 2010 Redistributable。如果您安装了 64 位版本,则需要将项目定位为 x64,反之亦然。