Openen exce bestandl in datagridview

Status
Niet open voor verdere reacties.

Sj0rske

Gebruiker
Lid geworden
12 apr 2011
Berichten
31
Hallo,

ik probeer een excel bestand te openen in mijn datagridview! Het lukt om informatie er in te zetten met dit:
Code:
if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    string filename = string.Empty;



                    filename = openFileDialog1.FileName;
                    textBox1.Text = filename.ToString();

                    System.Data.OleDb.OleDbConnection MyConnection;
                    System.Data.DataSet DtSet = new System.Data.DataSet();
                    System.Data.OleDb.OleDbDataAdapter MyCommand;
                    MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + filename.ToString() + "';Extended Properties=Excel 8.0;");
                    MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection);
                    MyCommand.TableMappings.Add("Table", "TestTable");

                    MyCommand.Fill(DtSet);
                    dataGridView1.DataSource = DtSet.Tables[0];
                    MyConnection.Close();

                }

Maar ik wil graag dat hij NIET mijn headers aanvult. dus gewoon eronder in de aanpasbare velden.

Dus iemand?

groeten,
 
Bedankt! Ik zal er naar kijken! als ik er dan niet uit kom laat ik wat weten!
 
Zo is mijn excel bestand in het begin.
Voorbeeld_excel.png

Dan laad ik 'm in! dan geeft hij 'm correct weer.
voorbeeld_foutopgeslagen.png

Dan sla ik hem op en openen ik hem weer krijg ik dit.
voorbeeld_opgeslagen.png

En zo ziet mijn excel bestand eruit.
voorbeeld_inladen_correct.png

Dus wat ik nu wil bij het opslaan is dat hij de eerste rij vult met mijn headers dus (voornaam, achternaam ect.) en de rest van de info moet er onder volgen.

Dit is mijn code die ik nu gebruik om opteslaan:
Code:
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string filename = saveFileDialog1.FileName.ToString();

                Excel.Application xlApp;
                Excel.Workbook xlWorkBook;
                Excel.Worksheet xlWorkSheet;
                object misValue = System.Reflection.Missing.Value;

                xlApp = new Excel.Application();
                xlWorkBook = xlApp.Workbooks.Add(misValue);

                xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);



                int x = 0;
                int y = 0;

                for (x = 0; x <= dataGridView1.RowCount -1 ; x++)
                {
                    for (y = 0; y <= dataGridView1.ColumnCount -1  ; y++)
                    {
                        DataGridViewCell cell = dataGridView1[y, x];
                        xlWorkSheet.Cells[x + 1, y + 1] = cell.Value;
                    }
                }

                xlWorkBook.SaveAs(filename.ToString(), Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
                xlWorkBook.Close(true, misValue, misValue);
                xlApp.Quit();

                releaseObject(xlWorkSheet);
                releaseObject(xlWorkBook);
                releaseObject(xlApp);
            }

Code:
        private void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
       }

Ik hoop dat jullie me kunnen helpen ;)
 
Kun je niet gewoon door je headers gaan zoals je door datagrid cells gaat?

Code:
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
    //use the column.HeaderText;
}
 
Je bericht begon met het inladen van een excel bestand.
Maar als het goed begrijp schrijf je ook weer terug naar een /het excel bestand.
Bij het weg schrijven worden de kolomkoppen niet mee genomen en als dat excel bestand dan weer inlees krijg je de koppen met een volgnummer.
Op zich is dat allemaal nog wel te volgen.

Nu programmeer ik niet in C maar ik vermoed dat het 'fout' gaat omdat de kolomkoppen niet in de data in form1 staan.
Wat je mist bij het wegschrijven is dus een routine die de kolomkoppen in je form wegschrijft naar rij 1 van het excel bestand.
 
Kun je niet gewoon door je headers gaan zoals je door datagrid cells gaat?

Code:
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
    //use the column.HeaderText;
}

... nou toevallig zeg tijdens het type van m'n reactie kom je met het zelfde antwoord. :d (3 minuten tussen de berichten).
 
Bedankt voor de antwoorden :) het is gelukt! Alleen krijg ik nu nog 'n error bij het opslaan maar dat moet mezelf nog lukken!

Bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan