2011-09-06 5 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 
    { 
    } 
    } 

인터넷의 winform 응용 프로그램에서 Excel 파일을 DataGridView 개체에 바인딩하는 소스 코드를 발견했습니다. 그러나 어떤 도움을 주셔서 감사합니다 ADO- 또는 SQL-related procedures을 사용하는 대신 다른 방법이 있는지 알고 싶습니다.Display는 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를 참조하는 것을 잊지 해달라고하지만, 전반적인 아이디어는 사용하는 엑셀 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; 
      } 
     } 
    } 
관련 문제