C#导入Excel数据常见问题

今天在做一个excle数据导入的时候遇到了一个奇葩问题,项目使用的是MVC,在VS2010里面调试的时候没有问题,可是当发布到本地IIS或服务器上时就出现了问题:

1、excel文件正在被使用;

2、没有安装Microsoft.Jet.OLEDB.4.0。

后来找公司的前辈帮忙,发现这个Bug其实很好解决。

问题1的产生原因是打开的链接忘记关闭了,所以才会导致这个错误提示。

问题2的产生原因可能是因为32位和64位的原因,因为我的机子64位的,IIS的应用池没有允许【启用32位应用程序】,所以最后导致了这个问题。

 

 

最后,po段c#导入excel数据的代码:

public string ImportData()
{
    if (Request.Files.Count > 0 && Request.Files[0].ContentLength > 0)
  {   HttpPostedFileBase file
= Request.Files[0]; string path = AppDomain.CurrentDomain.BaseDirectory + "Content\\Upload\\ItOperation"; string fileName = Path.GetFileNameWithoutExtension(file.FileName); string extension = Path.GetExtension(file.FileName); string newFileName = CurrentEmpCode + extension;//以当前时间命名另一份文件 if (file.ContentLength > 4194304)//不能超过4m {   status = "'status:failed'"; name = "'name':'上传文件大小不能超过4M'"; ret = "{'error':1,'msg':'上传文件不能超过4M!'}"; } else {   string otherFilePath = Path.Combine(path, newFileName); file.SaveAs(otherFilePath); DataTable dtSheetName = new ExcelHelper().GetSheetNames(otherFilePath); if (dtSheetName != null && dtSheetName.Rows.Count > 0) {    string sheetName = dtSheetName.Rows[0]["TABLE_NAME"].ToString(); if (sheetName != "") {    DataTable dt = LoadExcelDataToTable(otherFilePath, sheetName, extension);    if (dt != null && dt.Rows.Count > 0) {
             //...你的逻辑 } } } } } }
public DataTable LoadExcelDataToTable(string path, string sheetName, string fileType) {   string strConn = "";
  if (fileType == ".xlsx")
  {
    strConn
= "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + path + ";" + "Extended Properties='Excel 12.0;HDR=YES;IMEX=1'";
}
else if (fileType == ".xls") {   strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + path + ";" + "Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\""; } OleDbConnection conn = new OleDbConnection(strConn); DataTable dt = new DataTable(); try {   conn.Open(); string strExcel = ""; OleDbDataAdapter myCommand = null;    strExcel = "select * from [" + sheetName + "]"; myCommand = new OleDbDataAdapter(strExcel, strConn); myCommand.Fill(dt); } catch {   dt = null; } finally {   conn.Close(); }   return dt; }

 

posted on 2015-09-10 16:53  斗笠大侠  阅读(777)  评论(0编辑  收藏  举报

导航