C# 자동 판단 Excel 버전은 서로 다른 연결 문자열을 사용합니다.

1952 단어
OLEDB로 연결 문자열을 설정하면 sql 서버를 읽는 것처럼 excel의 데이터를 읽을 수 있지만 excel 2003과 excel 2007/2010의 연결 문자열은 다르다.

  /// 
  ///  Excel DataTable
  /// 
  ///  Excel 
  ///  
  ///  DataTable
  /// 
  public DataTable ExcelToDataTable(string pathName, string sheetName)
  {
    DataTable tbContainer = new DataTable();
    string strConn = string.Empty;
    if (string.IsNullOrEmpty(sheetName)) { sheetName = "Sheet1"; }
    FileInfo file = new FileInfo(pathName);
    if (!file.Exists) { throw new Exception(" "); }
    string extension = file.Extension;
    switch (extension)
    {
      case ".xls":
        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
        break;
      case ".xlsx":
        strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pathName + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'";
        break;
      default:
        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
        break;
    }
    // Excel
    OleDbConnection cnnxls = new OleDbConnection(strConn);
    // Excel   Sheet1
    OleDbDataAdapter oda = new OleDbDataAdapter(string.Format("select * from [{0}$]", sheetName), cnnxls);
    DataSet ds = new DataSet();
    // Excel !
    oda.Fill(tbContainer);
    return tbContainer;
  }

여기서 주의해야 할 점은 파일의 접두사 이름이.xlsx(excel2007/2010)의 연결 문자열은 "Provider=Microsoft.ACE.OLEDB.12.0;..."입니다.가운데 빨간색 부분은 "Jet"이 아니므로 주의하십시오.

좋은 웹페이지 즐겨찾기