2011-07-10 35 views
2

它是我第一次使用c#訪問和讀取excel文件(xlsx).. 我有問題,錯誤是:沒有給出值或多個必需參數「沒有給出一個或多個必需參數的值」訪問Excel電子表格

下面

是我的代碼:

private void button5_Click(object sender, EventArgs e) 
    { 
     string ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Class Schedules.xlsx;Extended Properties=""Excel 12.0;HDR=NO;"""; 
     string ExcelQuery; 
     ExcelQuery = "SELECT A1 FROM [Sheet1$]"; 
     OleDbConnection ExcelConnection = new OleDbConnection(ConnectionString); 
     ExcelConnection.Open(); 
     OleDbCommand ExcelCommand = new OleDbCommand(ExcelQuery, ExcelConnection); 
     OleDbDataReader ExcelReader; 
     ExcelReader = ExcelCommand.ExecuteReader(); //error happens here 

     while (ExcelReader.Read()) 
     { 
      MessageBox.Show((ExcelReader.GetValue(0)).ToString()); 
     } 
     ExcelConnection.Close(); 
    } 

,因爲這是我第一次,我只是試圖讀取A1的內容,下面是我的Excel文件:

enter image description here

但運行代碼會給我一個錯誤:沒有給出一個或多個必需參數的值。

+0

我只是猜測......片參數不正確。 – Tigran

+0

我應該把Sheet1 $或只是Sheet1?因爲我的參考文獻說它應該是Sheet1 $ –

+0

嘗試不帶'$'標誌並親自查看。 –

回答

1

好吧,我找到了一種方法來讀取在C#....

位置的特定細胞rCnt=1,cCnt=1是Excel

A1
private void button9_Click(object sender, EventArgs e) 
    { 

     Excel.Application xlApp; 
     Excel.Workbook xlWorkBook; 
     Excel.Worksheet xlWorkSheet; 
     Excel.Range range; 

     string str; 
     int rCnt = 1; // this is where you put the cell row number 
     int cCnt = 1; // this is where you put the cell column number 

     xlApp = new Excel.ApplicationClass(); 
     xlWorkBook = xlApp.Workbooks.Open(@"C:\Class Schedules.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
     xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 

     range = xlWorkSheet.UsedRange; 


     str = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value2; //you now have the value of A1. 



     xlWorkBook.Close(true, null, null); 
     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(); 
     } 
    } 

一定要有:

using Excel = Microsoft.Office.Interop.Excel; 

,並在項目中添加一個名爲Microsoft Excel Object Library的項目,該項目可在COM選項卡下找到... 如果要讀取多個文本,只需使用for循環 並增加rCnt或cCnt的值... if你想寫進入細胞內,我認爲這是可以做到這樣:

(range.Cells[rCnt, cCnt] as Excel.Range).Value2 = value; 

這一切......希望這能幫助別人

0

從尋找一些舊的代碼我有,語法應爲:

ExcelQuery = "SELECT * FROM A1:Q10000"; 

這意味着你不必指定表名稱,它總是從第一或默認片拍攝和你有指定您選擇的列的範圍。

+0

我已經解決了這一問題與您的解決方案或只使用工作表Sheet1 $,但我現在有一個新的problem..error是:找不到可安裝ISAM –

+0

好吧,我改變了我的代碼再次收到一個或多個所需的參數錯誤再次給出沒有值錯誤 –

+0

嘗試使用更簡單的連接字符串:'string ConnectionString = @「Provider = Microsoft.ACE.OLEDB.12.0; Data Source = c:\ Class Schedules.xlsx;」 ;' - 什麼運氣? –

0

我相信你查詢中的A1是問題所在。爲了測試只是嘗試以下,看看它消除了錯誤...

ExcelQuery = "SELECT * FROM [Sheet1$]"; 

如果您想選擇特定的列,然後使用HDR = YES,而不是(在康涅狄格州的字符串)。

string ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Temp\Class Schedules.xlsx;Extended Properties=""Excel 12.0;HDR=YES;"""; 

這表示工作表的第一行包含列名稱。因此,它需要您的工作表中的問題進行格式化這種方式,但是,那麼你可以選擇特定的列...

ExcelQuery = "SELECT [Time] FROM [Sheet1$]"; 
相關問題