【问题标题】:How to open Excel file stored in byte[] via OleDB?如何通过 OleDB 打开存储在 byte[] 中的 Excel 文件?
【发布时间】:2013-11-28 14:45:34
【问题描述】:

我有一个问题,我希望这对您来说是一个简单的问题。 (Windows 窗体应用程序、C#、Framework 3.5、SQL Server 2008 R2)

我不知道如何通过 OleDB 打开 Excel(它以 byte[] 类型加载)。

那么,我做了什么: 我已经通过表单上传了 Excel (.xls(x)) 文件,并将其作为 varbinary(max) 保存在数据库中。现在我需要通过 oleDB 读取该 Excel 文件。我已经设法从数据库加载该文件并将其保存到 byte[] 变量中。如何在 oleDB 中打开 byte[]? 当我第一次上传文件时(在将其保存到数据库之前),我通过 OleDB 打开它,只传递了文件路径。当 Excel 的数据已经作为 byte[] 存储在内存中时,如何访问它?

【问题讨论】:

    标签: c# excel byte


    【解决方案1】:

    如果您想使用 OleDB 进行读取,则必须将字节写入磁盘。例如,您可以这样做:

    var filename = System.IO.Path.GetTempFileName();
    
    // Assuming that fileBytes is a byte[] containing what you read from your database        
    System.IO.File.WriteAllBytes(filename, fileBytes);
    var connection = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + ";Extended Properties=\"Excel 12.0;HDR=YES\"";
    
    // Do your work on excel
    using (System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(connection))
    {
        conn.Open();
        using (var cmd = conn.CreateCommand())
        {
            cmd.CommandText = "SELECT * FROM [Sheet1$]";
    
            using (var rdr = cmd.ExecuteReader())
            {
                while (rdr.Read())
                {
                    System.Diagnostics.Debug.WriteLine(rdr["ColumnName"]);
                }
            }
        }
        conn.Close();
    }
    
    //Cleanup
    System.IO.File.Delete(filename);
    

    如果您不想将文件写入磁盘,您可以考虑使用可以从内存流中读取 excel 文件的第三方库。 SpreadsheetGear 或 Aspose 等工具是可以完成此任务的商业工具。

    【讨论】:

      【解决方案2】:

      我不知道您使用什么库来处理您的 Excel 数据,但首先想到的是它几乎肯定有一个 LoadFromFile 方法。它可能不会被称为,但这就是它的作用。看看它是否也有一个LoadFromStream 方法,如果有,把你的byte[] 数据加载到MemoryStream,然后从那里加载XLS。

      【讨论】:

      • 我不是说人,我想这是因为你还没有完成你的家庭作业。没有这样的方法...
      【解决方案3】:
      emp.upload_file = Path.GetFileName(file.FileName);
      

      emp 因为您创建的表对象和文件是HttpPostedFileBase 文件

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-29
        • 2014-05-30
        • 1970-01-01
        • 2015-09-18
        • 2013-03-25
        • 2022-01-24
        • 2018-06-02
        相关资源
        最近更新 更多