I 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");
}
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");
}