Считать файл Excel в datagridview c# - PullRequest
0 голосов
/ 28 марта 2020

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

private void Predict_Click(object sender, EventArgs e)
{
    string path = @"C:\Users\epifa\Desktop\Master\2nd semester\esports\all_cards.xlsx";
    string constr = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = "+ path + " Extended Properties=\"Excel 12.0 Macro; HDR = YES";
    OleDbConnection con = new OleDbConnection(constr);
    DataTable dt = new DataTable();
    Stats_table.DataSource = dt;
}

Не могли бы вы посоветовать?

Ответы [ 3 ]

0 голосов
/ 29 марта 2020

Как заметил ... «а затем, так как я знаю, что соединение работает» ... это спорно. Тем не менее, при условии, что у вас есть действующее соединение ... код, похоже, ничего не делает "с" этим соединением ... Например, в строке ...

OleDbConnection con = new OleDbConnection(constr);

Эта строка кода может успешно завершиться, но вы не делать НИЧЕГО с соединением…, как «заполнение» таблицы данных данными из книги Excel.

После этой строки кода создается НОВЫЙ ПУСТОЙ DataTable, а затем устанавливается эта «пустая» таблица как DataSource к сетке. Я не уверен, что еще можно ожидать, кроме «пустой» сетки.

Наконец, кажется, что в строке соединения отсутствует некоторый синтаксис, и, вероятно, из-за этого произойдет сбой. Ниже приведены два примера, которые откроют файлы XLS и XLSX. Помните, что вам нужно знать имя листа, которым вы хотите заполнить таблицу.

Чтобы открыть файл XLSX с листом с именем «sheet1»…

private void btn_OpenXLSX_Click(object sender, EventArgs e) {
  string path = @"path_to_the_XLSX_file";
  string worksheetName = "sheet1";
  string constr = "Provider = Microsoft.Ace.OLEDB.12.0; Data Source = " + path + "; Extended Properties=\"Excel 12.0; HDR = YES;Imex=1;\";";
  OleDbConnection con = new OleDbConnection(constr);
  OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("Select * from [" + worksheetName + "$]", con);
  DataTable dt = new DataTable();
  myDataAdapter.Fill(dt);
  Stats_table.DataSource = dt;
}

Чтобы открыть файл XLS с рабочим листом «sheet1»…

private void btn_OpenXLS_Click(object sender, EventArgs e) {
  string path = @"path_to_the_XLS_file";
  string worksheetName = "sheet1";
  string constr = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " + path + "; Extended Properties=\"Excel 8.0; HDR = YES;Imex=1;\";";
  OleDbConnection con = new OleDbConnection(constr);
  OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("Select * from [" + worksheetName + "$]", con);
  DataTable dt = new DataTable();
  myDataAdapter.Fill(dt);
  Stats_table.DataSource = dt;
}

Надеюсь, это имеет смысл и поможет.

0 голосов
/ 30 марта 2020

после многих испытаний я наконец-то получил его,

OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source =  C:\Users\epifa\Desktop\Master\2nd semester\esports\all_cards.xlsx" + @"; Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0""";
OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", conn);
DataSet stats = new DataSet();
OleDbDataAdapter adapter = new OleDbDataAdapter(command);
adapter.Fill(stats);
Stats_table.DataSource = stats.Tables[0];

все равно спасибо:)

0 голосов
/ 28 марта 2020

вам нужно выяснить, что происходит.

Очевидно, что происходит исключение.

Вы можете поймать исключение, чтобы узнать, что происходит:

private void Predict_Click(object sender, EventArgs e)
{
    try 
    {
        string path = @"C:\Users\epifa\Desktop\Master\2nd semester\esports\all_cards.xlsx";
        string constr = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = "+ path + " Extended Properties=\"Excel 12.0 Macro; HDR = YES";
        OleDbConnection con = new OleDbConnection(constr);
        DataTable dt = new DataTable();
        Stats_table.DataSource = dt;
    } catch (Exception e) {
        Console.WriteLine(e.Message);
    }
}

После того как вы знаете, в чем проблема, вы можете go исправить ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...