C # - из DataGridView в Excel Проблема при перезагрузке на ПК - PullRequest
0 голосов
/ 09 марта 2019

При переносе данных из DataGridView в Excel проблем не возникает, поэтому код работает.Но есть проблема;После выключения компьютера, а затем открыв пустой лист Excel.Когда я экспортирую данные из DataGridView в Excel, это происходит по какой-то причине после выключения и включения компьютера.Это мой код:

        SaveFileDialog sfd = new SaveFileDialog();
        sfd.InitialDirectory = "C:";
        sfd.Title = "Save as an Excel File";
        sfd.FileName = "MyList";
        sfd.Filter = "Excel files (*.xlsx)|*.xlsx|All files (*.*)|*.*";
        if(sfd.ShowDialog() != DialogResult.Cancel)
        {
            Microsoft.Office.Interop.Excel.Application ea = new Microsoft.Office.Interop.Excel.Application();
            ea.Application.Workbooks.Add(Type.Missing);
            ea.Columns.ColumnWidth = 45;
            for (int a = 1; a < dgv.Columns.Count + 1; a++)
            {
                ExcelApp.Cells[1, a] = dgv.Columns[a - 1].HeaderText;
            }
            for (int b1 = 0; b1 < dgv.Rows.Count - 1; b1++)
            {
                for (int b2 = 0; b2 < dgv.Columns.Count; b2++)
                {
                    ea.Cells[b1 + 2, b2 + 1] = dgv.Rows[b1].Cells[b2].Value;
                }
            }
            ea.ActiveWorkbook.SaveCopyAs(sfd.FileName.ToString());
            ea.ActiveWorkbook.Saved = true;
            ea.Quit();
        }

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 11 марта 2019

Ваш код выглядит слишком сложным. Можете ли вы попробовать образец ниже и отзывы?

using System;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;
using Excel = Microsoft.Office.Interop.Excel; 

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection cnn ;
            string connectionString = null;
            string sql = null;

            connectionString = "data source=servername;initial catalog=databasename;user id=username;password=password;";
            cnn = new SqlConnection(connectionString);
            cnn.Open();
            sql = "SELECT * FROM Product";
            SqlDataAdapter dscmd = new SqlDataAdapter(sql, cnn);
            DataSet ds = new DataSet();
            dscmd.Fill(ds);

            dataGridView1.DataSource = ds.Tables[0];
        }

        private void button2_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("csharp.net-informations.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);

            MessageBox.Show("Excel file created , you can find the file c:\\csharp.net-informations.xls");
        }

        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();
            }
        }

    }
}

http://csharp.net -informations.com / Excel / CSharp-первенствует-datagridview.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...