这里有一个类似的问题,In Memory OleDbConnection to Excel File,但是,这个问题的答案是通过另一种方式完全避免它。
下面是一些使用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));
}
}
}我想从非SEEKABLE System.IO.Stream中提取Excel文件,而不是磁盘上的永久文件。
这个问题分为两个部分,a)我可以将OleDbConnection“指向”System.IO.Stream吗?b)如果是这样的话,这是否可以是一个只向前的流,而不是一个可查找的流?
仅供参考:如果你想运行这段代码,你需要安装Microsoft Access Database Engine 2010 Redistributable。如果您安装的是64位版本,则需要将项目设置为x64,反之亦然。
发布于 2013-06-21 06:39:34
如果有帮助,请检查以下内容:http://epplus.codeplex.com/
另请参阅示例代码:
string fileName = System.Windows.Forms.Application.StartupPath + "\\Resources\\SUPPLIERDECISIONKEYLIST.xlsx";
using (var pck = new OfficeOpenXml.ExcelPackage())
{
using (var stream = File.OpenRead(fileName))
{
pck.Load(stream);
}
var ws = pck.Workbook.Worksheets[SheetNo];https://stackoverflow.com/questions/9113248
复制相似问题