我在阅读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位处理器中失败
任何帮助我如何解决问题都会很棒。
感谢 王子
答案 0 :(得分:2)
ACE提供程序是32位的,您的应用程序应该以32位模式编译才能使用它。这是thread,可能会有所帮助。
答案 1 :(得分:2)
使用 Excel Data Reader 在应用程序中阅读Excel文件。