c# - 如何通过OleDB打开存储在byte[]中的Excel文件?

标签 c# excel byte

我有一个问题,我希望这对你来说是一个简单的问题。 (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[] 存储在内存中时,如何访问它?

最佳答案

如果您想使用 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 等工具是可以实现此目的的商业工具。

关于c# - 如何通过OleDB打开存储在byte[]中的Excel文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18838425/

相关文章:

c# - 为什么 ConcurrentDictionary.GetOrAdd(key, valueFactory) 允许 valueFactory 被调用两次?

excel - 查找范围内的列号?

VBA匹配列中相反的符号值

java - 使用按位运算符将 byte 转换为 int

c# - 面向对象的方法设计选项

c# - 运行时编译错误

c# - 获取对作为函数传递的 Lambda 中的参数的引用

excel - 根据邮政编码的开头突出显示excel中的行

java - 如何在 Java 7 中使用一组众所周知的值初始化无符号字节数组?

c - 如何将单个字节放入网络字节顺序?