2013-04-23 4 views
8

Кто-нибудь знает, как я могу прочитать данные Excel по строкам с помощью C# .net.читать данные Excel по строкам с помощью C# .net

Я нашел этот код, который вернет данные из excel и display на grindview в C# .net. Как все, я просто блуждаю, будет ли возможность читать данные по строкам на стороне сервера?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

using System.Data; 
using System.Data.OleDb; 
using System.IO; 


namespace site 
{ 
    public partial class pgTest : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 


     protected void btnImport_Click(object sender, EventArgs e) 
     { 
      string connString = ""; 
      string strFileType = Path.GetExtension(fileuploadExcel.FileName).ToLower(); 
      string path = fileuploadExcel.PostedFile.FileName; 
      //Connection String to Excel Workbook 
      if (strFileType.Trim() == ".xls") 
      { 
       connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\""; 
      } 
      else if (strFileType.Trim() == ".xlsx") 
      { 
       connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\""; 
      } 


      string query = "SELECT [username],[age],[phone] FROM [Sheet1$]"; 
      OleDbConnection conn = new OleDbConnection(connString); 
      if (conn.State == ConnectionState.Closed) 
       conn.Open(); 
      OleDbCommand cmd = new OleDbCommand(query, conn); 
      OleDbDataAdapter da = new OleDbDataAdapter(cmd); 
      DataSet ds = new DataSet(); 
      da.Fill(ds); 
      grvExcelData.DataSource = ds.Tables[0]; 
      grvExcelData.DataBind(); 
      da.Dispose(); 
      conn.Close(); 
      conn.Dispose(); 
     } 


    } 
} 
+0

Этот код будет делать; просто не привязывайте данные к «grvExcelData» (я предполагаю, что это должно что-то сделать с представлением Grid). Или еще лучше; вы можете использовать Microsoft.Office.Interop.Excel API – aquaraga

+0

этот код обеспечивает то, что вы хотите в наборе данных, не так ли? –

+0

Я считаю, что он просто хочет проверить, как читать файлы excel по строкам и не читать весь файл excel и загружать его значение в сетку. –

ответ

6

вы можете использовать OleDbDataReader ниже

using (OleDbConnection connection = new OleDbConnection(connectionString)) 
{ 
    OleDbCommand command = new OleDbCommand(queryString, connection); 

    connection.Open(); 
    OleDbDataReader reader = command.ExecuteReader(); 

    while (reader.Read()) 
    { 
     var val1= reader[0].ToString(); 
    } 
    reader.Close(); 
} 
16

Поскольку Excel работает с диапазонами, вы должны сначала получить диапазон ячеек, который вы хотите прочитать. После этого вы можете просматривать их, используя цикл for. Вы можете видеть пример ниже:

Excel.Application xlApp = new Excel.Application(); 
    Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"C:\myexcel.xlsx"); 
    Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1]; 
    Excel.Range xlRange = xlWorksheet.UsedRange; 

    int rowCount = xlRange.Rows.Count; 
    int colCount = xlRange.Columns.Count; 

    for (int i = 1; i <= rowCount; i++) 
    { 
     for (int j = 1; j <= colCount; j++) 
     { 
      MessageBox.Show(xlRange.Cells[i, j].Value2.ToString()); 
     } 
    } 

Более подробное объяснение этого блока кода можно найти here.

+1

Лем, не могли бы вы обновить ссылку, которую вы предоставили ... ее больше не работает ... Спасибо – nick

+0

Ссылка на данный момент 404. – bunkerdive

Смежные вопросы