Столбцы Datagridview не отображаются при экспорте данных в excel C# winform
я пытаюсь использовать этот код для экспорта данных datagridview в excel но каждый раз когда я экспортирую excel только экспорт строк datagridview
Что я уже пробовал:
private void button1_Click(object sender, EventArgs e) { 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 i = 0; int j = 0; for (i = 0; i <= dataGridView1.RowCount - 1; i++) { for (j = 0; j <= dataGridView1.ColumnCount - 1; j++) { DataGridViewCell cell = dataGridView1[j, i]; xlWorkSheet.Cells[i + 1, j + 1] = cell.Value; } } xlWorkBook.SaveAs("Test.xls", 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); } 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(); } }
Richard MacCutchan
Запустите код в отладчике, чтобы убедиться, что он правильно подсчитывает количество столбцов.
Amar chand123
Количество столбцов правильно
Datagridview1.RowCount показать 8
Richard MacCutchan
Ну, вы должны дать нам еще несколько подсказок. Мы не можем догадаться, что происходит, когда вы запускаете код.
Amar chand123
У меня есть datagridview в datagridview data show из базы данных access. И в компоненте datagridview у меня есть 8 столбцов и 12 строк, и, если я использую closedxml на экспорт затем правильно экспортировать данные, но я не хочу использовать closedxml, потому что я не знаю, как я экспортирую же данных текстовое поле перед экспортом объекта datagridview данных
Richard MacCutchan
Очень интересно, но это все еще не объясняет, что на самом деле происходит, когда вы запускаете код. У меня есть приложение, которое делает почти то же самое: оно создает DataGridView и заполняет его данными из различных источников. При нажатии кнопки он сохраняет всю информацию в книге Excel. Так что ваш код должен делать то же самое, но я никак не могу догадаться, почему он этого не делает.
Amar chand123
Сэр, у вас есть какие-нибудь хорошие предложения? Как и те же коды для экспорта textbox и datagridview в экспорте
0x01AA
Не совсем понятно, в чем проблема. Вы хотите сказать, что не видите имен столбцов в excel?Если это так, то вам необходимо получить доступ к именам столбцов с помощью dataGridView1.Columns
Richard MacCutchan
DataGridViewCell cell = dataGridView1[j, i];
получает ячейку в строке i, столбце j, Поэтому она должна захватить все ячейки.
0x01AA
Включая имена столбцов, я имею в виду строку заголовка? Я так не думаю, может быть, попробую. Я бы сказал, что код OP возвращает только строки данных.
0x01AA
Поэтому я бы сказал, что строка заголовка должна обрабатываться отдельно, как описано здесь: Экспорт DataGridView В Excel На Языке C#[^]
// storing header part in Excel
for (int i = 1; i < dataGridView1.Columns.Count + 1; i++)
{
worksheet.Cells[1, i] = dataGridView1.Columns[i - 1].HeaderText;
}
Amar chand123
Я использую это но когда я использую этот столбец показать но первую строку заменить текстом заголовка столбца
0x01AA
Да, конечно. Вам нужно добавить еще один +1 для индекса строки после этого для строки excel.
xlWorkSheet.Cells[i + 1 + 1, j + 1] = cell.Value;
Amar chand123
Не работает я уже пробую но проблема в том что когда я использую это в моем файле excel в первой строке столбец show и во второй строке пустой show
0x01AA
Я почти уверен, что это работает, если вы не путаетесь с индексом. Еще раз внимательно проверьте исходный код.
Amar chand123
вот мой код
for (int i = 1; i < dataGridView1.Columns.Count + 1; i++)
{
xlWorkSheet.Ячейки[1, i] = dataGridView1.столбцы[i - 1].HeaderText;
}
for (int i = 1; i <= dataGridView1.Rows.Граф - 1; i++)
{
for (int j = 0; j <= dataGridView1.Columns.Количество - 1; j++)
{
Ячейка DataGridViewCell = dataGridView1[j, i];
xlWorkSheet.Ячейки[i + 1, j + 1] = ячейка.Ценность;
}
}
0x01AA
+1 больше для строки excel решит эту проблему:
xlWorkSheet.Cells[i + 1 + 1, j + 1] = cell.Value;
Amar chand123
спасибо за напоминание Я понимаю свою ошибку
for (int i = 1; i <= dataGridView1.Rows.Граф - 1; i++)
заменить на
for (int i = 0; i <= dataGridView1.Rows.Граф - 1; i++)
и это прекрасно работает
0x01AA
Мы всегда рады вам. И спасибо, что приняли мой ответ.
Amar chand123
Спасибо вам обоим сэр без ваших предложений я сам не понимаю проблемы