Импорт основных данных со стандартной проверкой - PullRequest
0 голосов
/ 12 сентября 2018

У меня было файл Excel , кнопка (импорт) , openfiledialog и gridview на VB.Net 2013. Моя задача - создать кнопку, которая будет извлекать все данные из файла Excel в datagridview

openFileDialog1.InitialDirectory = "C:\\Users\\ProgrammerPC1\\Desktop\\DLAV FILES";
openFileDialog1.Title = "Import Master Data";
openFileDialog1.FileName = "";
openFileDialog1.Filter = "Excel Files|*.xls;*.xlsx;*.xlsm";

try { 
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        string name = "Sheet1";
        string constr = @"provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + openFileDialog1.FileName + "'; Extended Properties=Excel 8.0; HDR=Yes; IMEX=1;";

        System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection(constr);
        System.Data.OleDb.OleDbCommand oconn = new System.Data.OleDb.OleDbCommand("SELECT * FROM [" + name + "$]", con);
                con.Open();

        System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(oconn);
        DataTable data = new DataTable();
        adapter.Fill(data);
        dataGridView1.DataSource = data;
    }
    else
    {
        MessageBox.Show("Operation Cancelled");
    }
}catch (Exception err)
    {
        MessageBox.Show(err.Message);
    }

Моя ошибка внешняя таблица не в ожидаемом формате

1 Ответ

0 голосов
/ 12 сентября 2018

Я обнаружил, что вы используете один и тот же поставщик строки подключения (MS Jet OLEDB 4.0 Provider) для файлов XLS (для Excel 97-2003) и XLSX (для Excel 2007 и более поздних версий), поэтому внешняя таблицане в ожидаемом формате ошибка при попытке чтения файлов XLSX / XLSM.

Вам необходимо использовать 2 отдельные строки подключения и переключать их в зависимости от расширения файла, сохраненного в OpenFileDialog, с помощью метода Path.GetExtension(), как в приведенном ниже примере:

if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
    string extension = Path.GetExtension(openFileDialog1.FileName); // get file extension
    string name = "Sheet1"

    using (System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection())
    {
        switch (extension)
        {
            case ".xls": // Excel 97-2003 files
               // Excel 97-2003 connection string
               string xlsconstr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + openFileDialog1.FileName + "'; Extended Properties=Excel 8.0; HDR=Yes; IMEX=1;";
               con.ConnectionString = xlsconstr;
               break;

            case ".xlsx": // Excel 2007 files
            case ".xlsm":
               // Excel 2007+ connection string, see in https://www.connectionstrings.com/ace-oledb-12-0/    
               string xlsxconstr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + openFileDialog1.FileName + "'; Extended Properties=Excel 12.0; HDR=Yes; IMEX=1;";
               con.ConnectionString = xlsxconstr;
               break;
        }

        using (System.Data.OleDb.OleDbCommand oconn = new System.Data.OleDb.OleDbCommand("SELECT * FROM [" + name + "$]", con))
        {
            con.Open();

            System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(oconn);
            DataTable data = new DataTable();
            adapter.Fill(data);
            dataGridView1.DataSource = data;
        }
    }
}
else
{
    MessageBox.Show("Operation Cancelled");
}
...