首页 文章

Excel上载无法在Windows Server 2012上运行

提问于
浏览
2

我开发了一个应用程序,用户必须上传winzip存档文件 . 然后,代码从该存档中提取Excel文件(采用 .xls 格式,97-2003工作簿),并将该Excel文件中的数据上载到我的SQL数据库表中 . 我正在使用 ZipFile.ExtractToDirectory(zipPath, extractPath) 来解压缩文件 .

下面是我用于excel上传的代码 .

using (OleDbConnection connExcel = new OleDbConnection(Excelconstring))
{
    using (OleDbCommand cmdExcel = new OleDbCommand())
    {
        using (OleDbDataAdapter odaExcel = new OleDbDataAdapter())
        {
            cmdExcel.Connection = connExcel;

            connExcel.Open();

            DataTable dtExcelSchema;
            string sheetName = "Chat Summary$";  
            //DateTime.Today.ToString("M.d.y$");

            // Read Data from First Sheet.
            cmdExcel.CommandText = "SELECT * From [" + sheetName + "]";
            odaExcel.SelectCommand = cmdExcel;
            odaExcel.Fill(dt);
            connExcel.Close();
        }
    }
}

问题是这在我的本地系统64位Windows 7与Microsoft Office 2010上完全正常 . 我在本地系统上使用Microsoft.Jet.OLEDB.4.0 . 问题是当我在我的服务器(带有Microsoft Office 2013的Windows Server 2012)上部署相同的代码时,这不起作用 . 我已在服务器上安装了Microsoft Access 2010可再发行组件,并将提供程序更改为Microsoft.ACE.OLEDB.12.0但仍无法正常工作 . 将提供程序更改为ACE后出现的错误是

外部表格不是预期的格式

此外,当我自己提取文件时,打开它一次然后再次存档 - 它工作正常 . 我尝试过来自不同论坛的许多解决方案,但似乎没有任何解决方案可行 . 我已将调试模式从“anycpu”更改为“x86”和“x64”,但仍然无法正常工作 .

我已经尝试过的步骤是安装Microsoft Access 2010可再发行组件,将调试模式从“anycpu”更改为“x86”,将连接字符串从Jet.OLEDB.4.0更改为ACE.OLEDB.12.0 .

1 回答

  • 1

    Excel 2010仍然是一个32位应用程序 . 因此,请尝试在IIS应用程序池上将 Enable 32-bit applications 设置为True .

    enter image description here

相关问题