Могу ли я читать файлы Excel с помощью драйвера ACE OleDbConnection Excel из непригодного для поиска файла System.IO.Stream, а не из файла? - PullRequest
7 голосов
/ 02 февраля 2012

Здесь есть похожий вопрос В памяти 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, и наоборот.

1 Ответ

0 голосов
/ 21 июня 2013

Отметьте, если это помогает: 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];
...