2011-09-06 183 views
1
private void button1_Click(object sender, EventArgs e) 
{ 
    DataTable test = getDataFromXLS("c:\temp.xls"); 
    if (test != null) 
    dataGridView1.DataSource = test; 
} 


private DataTable getDataFromXLS(string strFilePath) 
{ 
    try 
    { 
     string strConnectionString = ""; 
     strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + 
           "Data Source=" + strFilePath + "; Jet OLEDB:Engine Type=5;" + "Extended Properties=Excel 8.0;"; 
     OleDbConnection cnCSV = new OleDbConnection(strConnectionString); 
     cnCSV.Open(); 
     OleDbCommand cmdSelect = new OleDbCommand(@"SELECT * FROM [Sheet1$]", cnCSV); 
     OleDbDataAdapter daCSV = new OleDbDataAdapter(); daCSV.SelectCommand = cmdSelect; 
     DataTable dtCSV = new DataTable(); 
     daCSV.Fill(dtCSV); 
     cnCSV.Close(); 
     daCSV = null; 
     return dtCSV; 
    } 
    catch (Exception ex) 
    { 
     return null; 
    } 
    finally 
    { 
    } 
    } 

我发现源代码将Excel文件绑定到Internet上的Winform应用程序上的DataGridView对象。然而,我想知道是否有其他方法可以做到这一点,而不是使用ADO-或任何SQL-related procedures,感谢您的任何帮助。在Datagridview中显示excel文件内容

回答

1
public void CreateDataTableForExcelData(String FileName) 
{ 
OleDbConnection ExcelConnection = null; 
     string filePath = Server.MapPath(Request.ApplicationPath + "/UploadedFile/"); 
     DataTable dtNew = new DataTable(); 
     string strExt = ""; 
     strExt = FileName.Substring(FileName.LastIndexOf(".")); 
     if (strExt == ".xls") 
     { 
      ExcelConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + hdnFileName.Value + ";Extended Properties=Excel 8.0;"); 
     } 
     else 
     { 
      if (strExt == ".xlsx") 
      { 
       ExcelConnection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + hdnFileName.Value + ";Extended Properties=Excel 12.0;"); 
      } 
     } 
     try 
     { 
      ExcelConnection.Open(); 
      DataTable dt = ExcelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
      OleDbCommand ExcelCommand = new OleDbCommand(@"SELECT * FROM [" + ddlTableName.SelectedValue + @"]", ExcelConnection); 
      OleDbDataAdapter ExcelAdapter = new OleDbDataAdapter(ExcelCommand); 
      DataSet ExcelDataSet = new DataSet(); 
      ExcelAdapter.Fill(dtExcel); 
      ExcelConnection.Close(); 

     } 
     catch (Exception ex) 
     { 

     } 
     finally 
     { 
     } 
} 
0

您可以直接使用Excel COM Interop通过一些已有的包装器使用Excel本身读取文件。不过,我发现你目前的做法很合理。

0

您显示的代码绑定了一个普通的DataTable到excel文件。这意味着您可以以任何您想要的方式构建您的DataTable,并将其绑定到excel文件。对ADO或程序没有任何依赖性或任何依赖性。

或者我可能只是不明白你的问题。

0

你可以使用这个(不要忘了参考的Microsoft.Office.Interop.Excel可能有一些额外的代码,因为我是从我的工具把它,但总体思路是使用Excel COM):

public ArrayList ProcessWorkbook(string filePath) 
     { 
      string file = filePath; 

      Excel.Application excel = null; 
      Excel.Workbook wkb = null; 
      ArrayList al = new ArrayList(); 
      try 
      { 
       excel = new Excel.Application(); 

       wkb = ExcelTools.OpenBook(excel, file, false, true, false); 

       Excel.Worksheet sheet = wkb.Sheets["Adresses"] as Excel.Worksheet; 

       Excel.Range range = null; 

       if (sheet != null) 
        range = sheet.get_Range("A1:X6702", Missing.Value); 


       if (range != null) 
       { 
        foreach (Excel.Range r in range) 
        { 
         al.Add(r.Text); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       //if you need to handle stuff 
       Console.WriteLine(ex.Message); 
      } 
      finally 
      { 
       if (wkb != null) 
        ExcelTools.ReleaseRCM(wkb); 

       if (excel != null) 
        ExcelTools.ReleaseRCM(excel); 
      } 
      return al; 
     } 

//---------------- 
    public static class ExcelTools 
    { 
     public static Excel.Workbook OpenBook(Excel.Application excelInstance, string fileName, bool readOnly, bool editable, 
     bool updateLinks) 
     { 
      Excel.Workbook book = excelInstance.Workbooks.Open(
       fileName, updateLinks, readOnly, 
       Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
       Type.Missing, editable, Type.Missing, Type.Missing, Type.Missing, 
       Type.Missing, Type.Missing); 
      return book; 
     } 

     public static void ReleaseRCM(object o) 
     { 
      try 
      { 
       System.Runtime.InteropServices.Marshal.ReleaseComObject(o); 
      } 
      catch 
      { 
      } 
      finally 
      { 
       o = null; 
      } 
     } 
    }