Search code examples
c#.netwinformsdatagridviewexport-to-excel

error with Exporting Report details to Excel file


enter image description hereenter image description hereI have a form in which report is generated and shown in datagridview, when user clicks on 'Export to Excel' the data in datagridview is transfered to an excel file. but i m having problem: the first row of the gridview is not saved in the excel file please help

thanks in advance

below is code which i m using

        if (dgvCreditLimitTransaction.RowCount >= 1)
        {
            // creating Excel Application 
            Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
            // creating new WorkBook within Excel application 
            Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
            // creating new Excelsheet in workbook 
            Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
            // see the excel sheet behind the program 
            app.Visible = true;
            // get the reference of first sheet. By default its name is Sheet1. 
            // store its reference to worksheet 
            worksheet = workbook.Sheets["Sheet1"];
            worksheet = workbook.ActiveSheet;
            // changing the name of active sheet 
            worksheet.Name = "Transaction Details";
            // storing header part in Excel 
            int hdinvdate = 0;
            for (int i = 2; i <= dgvCreditLimitTransaction.ColumnCount; i++)
            {
                worksheet.Cells[1, i] = dgvCreditLimitTransaction.Columns[i - 1].HeaderText;
                if (dgvCreditLimitTransaction.Columns[i - 1].HeaderText == "LC Number")
                {
                    hdinvdate = i - 1;
                }
            }
            // storing Each row and column value to excel sheet 
            for (int i = 0; i < dgvCreditLimitTransaction.Rows.Count; i++)
            {
                for (int j = 1; j < dgvCreditLimitTransaction.ColumnCount; j++)
                {
                    if (dgvCreditLimitTransaction.Rows[i].Cells[j].Value != null)
                    {
                        if (j == hdinvdate)
                        {

                            DateTime tempinvdt = Convert.ToDateTime(dgvCreditLimitTransaction.Rows[i].Cells[j].Value);

                            worksheet.Cells[i + 2, j + 1] = tempinvdt.ToString("MM/dd/yyyy");

                        }
                        else
                        {
                            worksheet.Cells[i + 2, j + 1] = dgvCreditLimitTransaction.Rows[i].Cells[j].Value.ToString();
                        }

                    }
                }
            }
            // Exit from the application 
            //           app.Quit();
        }
        else
        {
            MessageBox.Show("Please select Data");
        }

Solution

  • Changes to your code are below and noted with comments. IT was my understanding that you want the first column in the excel spreadsheet, but not the first row. Just leave me a comment if you need any adjustments and I'll note them with an update.


    //I changed i=2 to i = 1 to get first column header
    for (int i = 1; i <= dgvCreditLimitTransaction.ColumnCount; i++)
    {
        worksheet.Cells[1, i] = dgvCreditLimitTransaction.Columns[i - 1].HeaderText;
    
        if (dgvCreditLimitTransaction.Columns[i - 1].HeaderText == "LC Number")
        {
            hdinvdate = i - 1;
        }
    }
    
    
    //changed i = 0 to i = 1 to remove the first row, if you wish to keep the first row set i = 0
    for (int i = 0; i < dgvCreditLimitTransaction.RowCount; i++)
    {
        //change j = 1 to j = 0 so that you get 1st columns data
        for (int j = 0; j < dgvCreditLimitTransaction.ColumnCount; j++)
        {
            if (dgvCreditLimitTransaction.Rows[i].Cells[j].Value != null)
            {
                if (j == hdinvdate)
                {
    
                    DateTime tempinvdt = Convert.ToDateTime(dgvCreditLimitTransaction.Rows[i].Cells[j].Value);
    
                    worksheet.Cells[i + 2, j + 1] = tempinvdt.ToString("MM/dd/yyyy");
    
                }
                else
                {
                    worksheet.Cells[i + 2, j + 1] = dgvCreditLimitTransaction.Rows[i].Cells[j].Value.ToString();
                }
    
            }
        }
    }
    // Exit from the application 
    //           app.Quit();
    }
    else
    {
    MessageBox.Show("Please select Data");
    }