2013-04-30 7 views
4

Я использую этот код, чтобы открыть файл первенствовать и сохранить его в DataGridView:Импорт Excel в DataGridView

string name = "Items"; 
string constr = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source=" + Dialog_Excel.FileName.ToString() + "; Extented Properties =\"Excel 8.0; HDR=Yes;\";"; 
OleDbConnection con = new OleDbConnection(constr); 
OleDbDataAdapter sda = new OleDbDataAdapter("Select * From [" + name + "$]", con); 
DataTable data = new DataTable(); 
sda.Fill(data); 
grid_items.DataSource = data; 

Как объясняет: This youtube link

Но я получаю ошибку ISAM. Любое предложение?

+2

Что такое сообщение об ошибке EXACT? –

+0

@JeremyThompson: ** Исключение: не удалось найти устанавливаемый ISAM ** –

+0

Как я и ожидал, вы проверили [этот ресурс] (https://www.google.com/search?q=Could+not+find+installable + ISAM)? или даже [здесь] (http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/62ee4978-ca29-48d3-9367-6dd4ab639d2d/) –

ответ

21

Поскольку вы не ответили на мой комментарий выше, я отправляю решение для обоих.

У вас не хватает ' в Extended Properties

Для Excel 2003 попробовать это (испытанный)

private void button1_Click(object sender, EventArgs e) 
    { 
     String name = "Items"; 
     String constr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + 
         "C:\\Sample.xls" + 
         ";Extended Properties='Excel 8.0;HDR=YES;';"; 

     OleDbConnection con = new OleDbConnection(constr); 
     OleDbCommand oconn = new OleDbCommand("Select * From [" + name + "$]", con); 
     con.Open(); 

     OleDbDataAdapter sda = new OleDbDataAdapter(oconn); 
     DataTable data = new DataTable(); 
     sda.Fill(data); 
     grid_items.DataSource = data; 
    } 

BTW, я перестал работать с Джет давнего назад. Сейчас я использую ACE.

private void button1_Click(object sender, EventArgs e) 
    { 
     String name = "Items"; 
     String constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + 
         "C:\\Sample.xls" + 
         ";Extended Properties='Excel 8.0;HDR=YES;';"; 

     OleDbConnection con = new OleDbConnection(constr); 
     OleDbCommand oconn = new OleDbCommand("Select * From [" + name + "$]", con); 
     con.Open(); 

     OleDbDataAdapter sda = new OleDbDataAdapter(oconn); 
     DataTable data = new DataTable(); 
     sda.Fill(data); 
     grid_items.DataSource = data; 
    } 

enter image description here

Для Excel 2007+

private void button1_Click(object sender, EventArgs e) 
    { 
     String name = "Items"; 
     String constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + 
         "C:\\Sample.xlsx" + 
         ";Extended Properties='Excel 12.0 XML;HDR=YES;';"; 

     OleDbConnection con = new OleDbConnection(constr); 
     OleDbCommand oconn = new OleDbCommand("Select * From [" + name + "$]", con); 
     con.Open(); 

     OleDbDataAdapter sda = new OleDbDataAdapter(oconn); 
     DataTable data = new DataTable(); 
     sda.Fill(data); 
     grid_items.DataSource = data; 
    } 
+0

Что здесь означает «Предметы»? –

+2

«Элементы» - это название листа. Если вы не переименовали его, используйте «Sheet1». –

+0

Какой прекрасный пример мистера, +1. Вы знаете, могу ли я использовать ACE с VS 2010? Интересно, где я могу это получить. Спасибо и прекрасный пример. Приветствия.! – WhySoSerious

1

попробовать этот следующий фрагмент, оборотный штраф.

private void button1_Click(object sender, EventArgs e) 
{ 
    try 
    { 
      OpenFileDialog openfile1 = new OpenFileDialog(); 
      if (openfile1.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
      { 
        this.textBox1.Text = openfile1.FileName; 
      } 
      { 
        string pathconn = "Provider = Microsoft.jet.OLEDB.4.0; Data source=" + textBox1.Text + ";Extended Properties=\"Excel 8.0;HDR= yes;\";"; 
        OleDbConnection conn = new OleDbConnection(pathconn); 
        OleDbDataAdapter MyDataAdapter = new OleDbDataAdapter("Select * from [" + textBox2.Text + "$]", conn); 
        DataTable dt = new DataTable(); 
        MyDataAdapter.Fill(dt); 
        dataGridView1.DataSource = dt; 
      } 
     } 
     catch { } 
} 
0

попробуйте следующую программу

using System; 
using System.Data; 
using System.Windows.Forms; 
using System.Data.SqlClient; 

namespace WindowsFormsApplication1 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     System.Data.OleDb.OleDbConnection MyConnection; 
     System.Data.DataSet DtSet; 
     System.Data.OleDb.OleDbDataAdapter MyCommand; 
     MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\csharp.net-informations.xls';Extended Properties=Excel 8.0;"); 
     MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection); 
     MyCommand.TableMappings.Add("Table", "Net-informations.com"); 
     DtSet = new System.Data.DataSet(); 
     MyCommand.Fill(DtSet); 
     dataGridView1.DataSource = DtSet.Tables[0]; 
     MyConnection.Close(); 
    } 
} 
} 
1

Я использовал следующий код, он работает!

using System.Data.OleDb; 
using System.IO; 
using System.Text.RegularExpressions; 

private void btopen_Click(object sender, EventArgs e) 
{ 
    try 
    { 
    OpenFileDialog openFileDialog1 = new OpenFileDialog(); //create openfileDialog Object 
    openFileDialog1.Filter = "XML Files (*.xml; *.xls; *.xlsx; *.xlsm; *.xlsb) |*.xml; *.xls; *.xlsx; *.xlsm; *.xlsb";//open file format define Excel Files(.xls)|*.xls| Excel Files(.xlsx)|*.xlsx| 
    openFileDialog1.FilterIndex = 3; 

    openFileDialog1.Multiselect = false;  //not allow multiline selection at the file selection level 
    openFileDialog1.Title = "Open Text File-R13"; //define the name of openfileDialog 
    openFileDialog1.InitialDirectory = @"Desktop"; //define the initial directory 

    if (openFileDialog1.ShowDialog() == DialogResult.OK)  //executing when file open 
    { 
     string pathName = openFileDialog1.FileName; 
     fileName = System.IO.Path.GetFileNameWithoutExtension(openFileDialog1.FileName); 
     DataTable tbContainer = new DataTable(); 
     string strConn = string.Empty; 
     string sheetName = fileName; 

     FileInfo file = new FileInfo(pathName); 
     if (!file.Exists) { throw new Exception("Error, file doesn't exists!"); } 
     string extension = file.Extension; 
     switch (extension) 
     { 
      case ".xls": 
        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'"; 
        break; 
      case ".xlsx": 
        strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pathName + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'"; 
        break; 
      default: 
        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'"; 
        break; 
     } 
     OleDbConnection cnnxls = new OleDbConnection(strConn); 
     OleDbDataAdapter oda = new OleDbDataAdapter(string.Format("select * from [{0}$]", sheetName), cnnxls); 
     oda.Fill(tbContainer); 

     dtGrid.DataSource = tbContainer; 
     } 

    } 
    catch (Exception) 
    { 
     MessageBox.Show("Error!"); 
    } 
    } 
Смежные вопросы