2010-09-15 72 views

回答

2
using Excel = Microsoft.Office.Interop.Excel; 

顯然需要添加參考你的項目,然後它的樸素簡單:)

private void ProcessExcel(string filepath) 
    { 

      Excel.ApplicationClass ExcelObj = new Excel.ApplicationClass(); 

      Excel.Workbook theWorkbook = ExcelObj.Workbooks.Open(filepath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 

      Excel.Sheets sheets = theWorkbook.Worksheets; 

      Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1); 

      Excel.Range range = worksheet.UsedRange; 

      System.Array myvalues = (System.Array)range.Cells.Value2; 

      int vertical = myvalues.GetLength(0); 
      int horizontal = myvalues.GetLength(1); 



      string[] headers = new string[horizontal]; 
      string[] data = new string[horizontal]; 


      DataTable ResultsHeader = New DataTable(); 
      DataSet ds = New DataSet(); 


      for (int x = 1; x <= vertical; x++) 
      { 
        Utils.inicializarArrays(datos); 
        for (int y = 1; y <= horizontal; y++) 
        { 
         if (x == 1) 
         { 
          headers[y - 1] = myvalues.GetValue(x, y).ToString(); 
         } 
         else 
         { 
          string auxdata = ""; 
          if (myvalues.GetValue(x, y) != null) 
           auxdata = myvalues.GetValue(x, y).ToString(); 
          data[y - 1] = auxdata; 
         } 

        } 
        if(x == 1) //headers 
        { 
          for(int w = 0; w < horizontal; w++) 
          { 
            ResultsHeader.Columns.Add(New DataColumn(headers[w], GetType(string))); 
          } 
          ds.Tables.Add(ResultsHeader); 
        } 
        else 
        { 
          DataRow dataRow = ds.Tables[0].NewRow(); 
          for(int w = 0; w < horizontal; w++) 
          { 
            dataRow(headers[w]) = data[w] 
          } 
          ds.Tables[0].Rows.Add(dataRow); 
        } 
      } 
      DataView myDataView = new DataView(); 
      myDataView.Table = ds.Tables[0]; 
      MydataGrid.CurrentPageIndex = 0; 
      MydataGrid.DataSource = myDataView; 
      MydataGrid.DataBind(); 
    } 
+0

我怎樣才能像參考我無法測量值你寫 – Dotnet 2010-09-15 08:53:55

+0

特定的一個我有它在C:\ Program Files文件\微軟的Visual Studio 9.0 \視覺工作室工具Office \ PIA \ Office12 \ Microsoft.Office.Interop.Excel.dll – 2010-09-15 08:58:07

+0

它工作良好,但我怎麼能分離每個單元格的值,並寫入網格意味着如果在我的Excel中我有列作爲名稱和年齡,我會喜歡顯示內容,因爲它是單獨放在datagridview我可以鱈魚爲此請 – Dotnet 2010-09-15 09:28:19

0

深入瞭解followign問題的「微軟Word/Excel文檔操縱」部分:Most useful free .NET libraries?

+0

嗨,我需要什麼,我問了一個示例代碼 – Dotnet 2010-09-15 08:07:23

0

我可以建議你這個解決辦法...


Excel文件保存爲csv格式。在http://www.codeproject.com/KB/database/CsvReader.aspx


使用CSV讀者庫它有很多的方法來作爲數據源的數據網格例如使用

+0

如果csv意味着我已經完成了,但是我想從excel – Dotnet 2010-09-15 08:36:04

+0

開始,那麼您可以在.net excel庫中挖掘,如果您想要如上所述......或者在代碼背後,您可以將excel文件另存爲csv並使用csvreader – dankyy1 2010-09-15 08:58:44

0

我會使用CSV格式保存Excel工作表,然後使用這個免費的fast CSV Reader C#實現來解析它。

0

我遲到了,但我有一些值得添加的東西!我嘗試了Juan的代碼,並沒有立即編譯。在對互聯網進行了幾個小時的研究之後,我對它進行了一些修改,並且準確地完成了原始海報的要求(因爲我需要做同樣的事情)。我不得不從其他來源拼湊代碼,不幸的是,我沒有跟蹤我嘗試和改變的零星和片斷,所以我不能對此發表太多評論。

以下代碼在Visual Studio 2008和.NET 3.5中起作用。另外,將數據放入數組時,格式化會丟失(例如,日期變爲需要使用DateTime.FromOADate()進行轉換的雙精度轉換)。與此相關的問題是,您無法確定某個值是編碼觀點中的實際雙精度值還是日期值,但如果您事先知道列將作爲日期,則在插入數據時將其格式化桌子。

private void processExcel(string filename) 
{ 
    Excel.Application xlApp; 
    Excel.Workbook xlWorkBook; 
    Excel.Worksheet xlWorkSheet; 

    var missing = System.Reflection.Missing.Value; 

    xlApp = new Excel.ApplicationClass(); 
    xlWorkBook = xlApp.Workbooks.Open(filename, false, true, missing, missing, missing, true, Excel.XlPlatform.xlWindows, '\t', false, false, 0, false, true, 0); 
    xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 

    Excel.Range xlRange = xlWorkSheet.UsedRange; 
    Array myValues = (Array)xlRange.Cells.Value2; 

    int vertical = myValues.GetLength(0); 
    int horizontal = myValues.GetLength(1); 

    DataTable dt = new DataTable(); 

    // must start with index = 1 
    // get header information 
    for (int i = 1; i <= horizontal; i++) 
    { 
     dt.Columns.Add(new DataColumn(myValues.GetValue(1,i).ToString())); 
    } 

    // Get the row information 
    for (int a = 2; a <= vertical; a++) 
    { 
     object[] poop = new object[horizontal]; 
     for (int b = 1; b <= horizontal; b++) 
     { 
      poop[b - 1] = myValues.GetValue(a, b); 
     } 
     DataRow row = dt.NewRow(); 
     row.ItemArray = poop; 
     dt.Rows.Add(row); 
    } 

    // assign table to default data grid view 
    dataGridView1.DataSource = dt; 

    xlWorkBook.Close(true, missing, missing); 
    xlApp.Quit(); 

    releaseObject(xlWorkSheet); 
    releaseObject(xlWorkBook); 
    releaseObject(xlApp); 
} 

private void releaseObject(object obj) 
{ 
    try 
    { 
     System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); 
     obj = null; 
    } 
    catch (Exception ex) 
    { 
     obj = null; 
     MessageBox.Show("Unable to release the Object " + ex.ToString()); 
    } 
    finally 
    { 
     GC.Collect(); 
    } 
} 
相關問題