Avatar billede simsen Mester
28. juli 2006 - 23:56 Der er 3 kommentarer og
1 løsning

eksportere datagridview til excel

Jeg forsøger at eksportere mit datagridview til excel arket på linie 14 kolonne1 og fremefter .

Når jeg forsøger får jeg følgende fejl: Exception from HRESULT: 0x800A03EC. Den fremkommer ellers ikke med nogen data i de felter, jeg har valgt (række 14 kolonne1).

Min kode:

using System.Data.OleDb;
using System.Reflection;

        int fakid;
        private DataViewManager dsView;
        private DataSet ds;
        private DataTable dtOrdrelinier = null;
        private OleDbDataAdapter da;
        private OleDbDataAdapter da2;
        string myDB = "c:\\ANSI\\Fakturasystem.mdb";


            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();

            if (xlApp == null)
            {
                MessageBox.Show("Du har ikke den korrekte version af Excel");
            }

            xlApp.Visible = true;
           
            string path = @"c:\ANSI\faktura.xls";
            Microsoft.Office.Interop.Excel.Workbook wb = xlApp.Workbooks.Open(path, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing);
            Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[1];

            if (ws == null)
            {
                MessageBox.Show("Du har ikke den korrekte version af Excel");
            }

            #region Faktura nr og dato
            ws.Cells[2, 6] = txtFakturaNr.Text;
            ws.Cells[8, 6] = txtFakturaDato.Text;
            #endregion

            #region Fakturalinier
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                for (int j = 0; j < ds.Tables[0].Columns.Count; j++)
                {
                    xlApp.Cells[14 + i, 1 + j] = ds.Tables[0].Rows[j];
                }
            }
            #endregion


Jeg kan tilføje, at når jeg ikke har Region Fakturalinier med, får jeg ingen fejl, og eksporter korrekt de tekstfelter der også er på min form over.

Kan nogen fortælle mig, hvad jeg gør forkert i Region Fakturaliner. Jeg skal have mit datagridview felter eksporteret over til excel regnearket?

mvh
simsen :-)
Avatar billede Slettet bruger
29. juli 2006 - 02:18 #1
Som jeg ser det, peger du (inde i løkkerne) på en række med den tæller, som tæller kolonner.
Avatar billede simsen Mester
29. juli 2006 - 08:54 #2
Hej sandbox

Og det betyder hvad? Nu er jeg newbee og har fundet koden ude på nettet, så jeg aner rent faktisk ikke hvad jeg skal gøre istedet for.

mvh
simsen :-)
Avatar billede simsen Mester
29. juli 2006 - 10:11 #3
Hej igen

Jeg har endelig fundet noget kode, der virker uden, den går i fejl. MEN jeg har problemet, at jeg i mit datagridview har 5 kolonner. Men den viser kun 4 af dem. Det er faktisk kolonne 4 den ikke viser.

Koden der næsten fungerer:
            #region Fakturalinier
            int rIndex = 12;
            foreach (DataRow row in dtOrdrelinier.Rows)
            {
                rIndex++;
                int cIndex = 0;
                foreach (DataColumn col in dtOrdrelinier.Columns)
                {
                    cIndex++;
                    xlApp.Cells[rIndex + 1, cIndex] = row[col.ColumnName].ToString();
                }
            }

            }

            #endregion

Koden hvor jeg smider de 5 kolonner over i datagridviewet er:

                #region FelterIDataGridView             
                // Databinding for the Grid
                da2 = new OleDbDataAdapter("SELECT Ordre.Antal, Ordre.VareNr, Produkter.Varenavn, Produkter.PrisExMoms FROM Produkter INNER JOIN (Faktura INNER JOIN Ordre ON Faktura.FakturaID = Ordre.FakturaNr) ON Produkter.VareNr = Ordre.VareNr WHERE FakturaID=@fakid", cn);

                da2.SelectCommand.Parameters.Add("@fakid", OleDbType.Integer);

                da2.SelectCommand.Parameters["@fakid"].Value = fakid;         

                //create datatable
                dtOrdrelinier = new DataTable();

                //fill datatable
                    da2.Fill(dtOrdrelinier);

                //create colum to hold the sum of other two colums
                DataColumn col = new DataColumn("RaekkeBeloeb");
                col.DataType = typeof(System.Decimal);
                col.Expression = "Antal*PrisExMoms";

                //add the colums
                dtOrdrelinier.Columns.Add(col);

                //bind datatable to grid view
                dgrOrdre.DataSource = dtOrdrelinier;
                #endregion

Nogen der kan se, hvorfor kolonne 4 (som er Produkter.PrisExMoms fra databasen) ikke bliver eksporteret til excel?

mvh
simsen
Avatar billede simsen Mester
29. juli 2006 - 19:10 #4
Problemet lå i, jeg havde (for at få design til at passe) merged to celler sammen i de rækker, hvor datagrid'et skulle være. Men der var stadig en kolonne ekstra, som den så lagde den i og dermed skjulte den.

Jeg har omgået problemet ved at lave følgende kode:

            #region Fakturalinier
            int rIndex = 12;
            foreach (DataRow row in dtOrdrelinier.Rows)
            {
                rIndex++;
                int cIndex = 0;
                foreach (DataColumn col in dtOrdrelinier.Columns)
                {
                    cIndex++;
                    if (cIndex == 4)
                    {
                        cIndex++;
                    }
                    xlApp.Cells[rIndex + 1, cIndex] = row[col.ColumnName].ToString();
                }
            }
            #endregion

simsen :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester