Member 12349103 Ответов: 2

Экспорт C# winform в excel


Я пытаюсь экспортировать в Excel, при нажатии кнопки все швы идут хорошо.
когда я открываю файл, он просто показывает заголовок и одну строку..
все должно быть очень просто.


<pre>private void btnExcel_Click(object sender, EventArgs e)
        {

            { 
            for (int i = 1; i <= 10; i++)
            {
                DataGridViewRow row =
                    (DataGridViewRow)dataGridView1.RowTemplate.Clone();
                                   
            }
        }

        
        Microsoft.Office.Interop.Excel._Application excel = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel._Workbook workbook = excel.Workbooks.Add(Type.Missing);
            Microsoft.Office.Interop.Excel._Worksheet worksheet = null;

            try
            {

                worksheet = workbook.ActiveSheet;

                worksheet.Name = "ExportedFromDatGrid";

                int cellRowIndex = 1;
                int cellColumnIndex = 1;

                
                for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                {
                    for (int j = 0; j < dataGridView1.Columns.Count; j++)
                    {
                       
                        if (cellRowIndex == 1)
                        {
                            worksheet.Cells[cellRowIndex, cellColumnIndex] = dataGridView1.Columns[j].HeaderText;
                        }
                        else
                        {
                            worksheet.Cells[cellRowIndex, cellColumnIndex] = dataGridView1.Rows[i].Cells[j].Value.ToString();
                        }
                        cellColumnIndex++;
                    }
                    cellColumnIndex = 1;
                    cellRowIndex++;
                }
                
                SaveFileDialog saveDialog = new SaveFileDialog();
                saveDialog.Filter = "Excel files (*.xlsx)|*.xlsx|All files (*.*)|*.*";
                saveDialog.FilterIndex = 2;

                if (saveDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    workbook.SaveAs(saveDialog.FileName);
                    MessageBox.Show("Export Successful");
                }
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                excel.Quit();
                workbook = null;
                excel = null;

            }
        }


Что я уже пробовал:

редактирование кода интернет-поиска

Michael_Davies

Не то чтобы это был ответ, но разве это не должно быть dataGridView1.Columns.Граф-1?

for (int j = 0; j < dataGridView1.Columns.Count; j++)

Кроме того, внутренний цикл for по столбцам не будет хранить первую строку datagridview, так как вы используете настройку первой строки для установки заголовков, и данные не будут храниться так, как они есть в else.

Лично я бы так и сделал;

1. сохраните данные, начиная со строки 2 листа.
2. сохраните названия заголовков в верхней строке, строке 1 листа.

	int cellRowIndex = 2;
	int cellColumnIndex;

	for (int i = 0; i < dataGridView1.Rows.Count - 1; i++, cellRowIndex++)
	{
		cellColumnIndex = 1;

		for (int j = 0; j < dataGridView1.Columns.Count - 1; j++, cellColumnIndex++)
		{
			worksheet.Cells[cellRowIndex, cellColumnIndex] = dataGridView1.Rows[i].Cells[j].Value.ToString();
		}
	}

	cellColumnIndex = 1;

	for (int j = 0; j < dataGridView1.Columns.Count - 1; j++, cellColumnIndex++)
	{
		worksheet.Cells[1, cellColumnIndex] = dataGridView1.Columns[j].HeaderText;
	}

2 Ответов

Рейтинг:
0

Patrice T

Используйте отладчик, чтобы проверить переменные и посмотреть, что делает ваш код.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что он делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]
Отладка кода C# в Visual Studio - YouTube[^]
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.