在c#中读取excel 2003(.xls)

时间:2010-08-16 08:56:27

标签: c# excel

我在阅读excel 2003格式文件(xls)时遇到了问题。

我正在使用带有Windows 7和64位处理器的vs2008

如果我发送excel 2007格式文件(.xlsx),下面的代码工作正常 我已将office 2007安装在我的系统中。

这里我添加了参考

Microsoft Office 12.0 Object Library
Microsoft.Office.Tools.Excel.dll
Microsoft.Office.Tools.Excel.v9.0.dll
#region ExcelToDataTableChild

/// <summary>
/// Excel To DataTable for   attendance employee
/// </summary>
/// <param name="strfilelocation"></param>
/// <returns></returns>
public  DataTable ExcelToDataTableChild(string strfilelocation, string strfilename)
{
    OleDbConnection excelConn = new OleDbConnection();
    DataTable dtPatterns = new DataTable();
    string excelConnStr = string.Empty;
    try
    {
        string fileName = Path.GetExtension(@strfilelocation);
        DataSet ds = new DataSet();
        OleDbCommand excelCommand = new OleDbCommand(); OleDbDataAdapter excelDataAdapter = new OleDbDataAdapter();

        #region Check FileExtension

        if (fileName.Equals(".xlsx"))
        {
            excelConnStr = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + strfilelocation + "; Extended Properties =Excel 8.0;";
        }
        if (fileName.Equals(".xls"))
        {
            excelConnStr = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + strfilelocation + "; Extended     Properties=Excel 8.0;";
        }

        #endregion


        excelConn = new OleDbConnection(excelConnStr);
        excelConn.Open();
        //excelCommand = new OleDbCommand("SELECT `Employee Name` as PATTERN FROM [sheet1$]", excelConn);
        excelCommand = new OleDbCommand("SELECT * FROM [sheet1$]", excelConn);
        excelDataAdapter.SelectCommand = excelCommand;
        excelDataAdapter.Fill(dtPatterns);
        dtPatterns.TableName = "EmpList";
        ds.Tables.Add(dtPatterns);
        dtPatterns.AcceptChanges();
    }
    catch (Exception ex)
    {
        WriteLogError(ex.Message);
    }
    finally
    {
        excelConn.Close();
    }
    return dtPatterns;
}

#endregion

以上代码在excel 2003(.xls)系统中运行正常,我使用的是Xp,VS 2008。

代码工作正常,我能够毫无问题地阅读excel 2003数据。

但是相同的代码在Windows 7,64位处理器中失败

任何帮助我如何解决问题都会很棒。

感谢 王子

2 个答案:

答案 0 :(得分:2)

ACE提供程序是32位的,您的应用程序应该以32位模式编译才能使用它。这是thread,可能会有所帮助。

答案 1 :(得分:2)

使用 Excel Data Reader 在应用程序中阅读Excel文件。

http://exceldatareader.codeplex.com/