«Не задано значение для одного или нескольких обязательных параметров» Доступ к электронной таблице Excel - PullRequest
2 голосов
/ 10 июля 2011

это мой первый доступ и чтение файла Excel (xlsx) с помощью c # .. У меня возникла проблема, и ошибка была: Нет значения для одного или нескольких обязательных параметров

ниже мой код:

    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

, но запускаюКод выдаст мне ошибку: для одного или нескольких обязательных параметров не задано значение.

Ответы [ 3 ]

1 голос
/ 12 июля 2011

хорошо, я нашел способ прочитать определенную ячейку в c # ....

местоположение rCnt=1,cCnt=1 - A1 в Excel

 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, которую можно найти на вкладке COM ... если вы хотите прочитать несколько текстов, просто используйте для цикла и увеличить значение rCnt или cCnt ... если вы хотите записать в ячейку, я думаю, что это можно сделать следующим образом:

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

вот и все ... надеюсь, это поможет другим

0 голосов
/ 11 июля 2011

Я считаю, что проблема А1 в вашем запросе.Чтобы проверить, попробуйте следующее и убедитесь, что это устраняет ошибку ...

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

Если вы хотите выбрать определенные столбцы, используйте вместо этого HDR = YES (в вашей строке conn).

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$]";
0 голосов
/ 10 июля 2011

Смотря на какой-то старый код, который у меня есть, синтаксис должен быть следующим:

ExcelQuery = "SELECT * FROM A1:Q10000";

То есть вам не нужно указывать имя листа, оно всегда берется с первого листа или листа по умолчаниютакже необходимо указать диапазон столбцов, которые вы выбрали.

...