【问题标题】:C# - From DataGridView to Excel Problem When I Reset To PCC# - 当我重置到 PC 时从 DataGridView 到 Excel 问题
【发布时间】:2019-03-09 11:48:56
【问题描述】:

将数据从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();
        }

请帮忙。

【问题讨论】:

  • 嗨,到底是什么问题?
  • @Stefan 嗨,Stefan。假设我运行程序并将数据从 DataGridView 传输到 Excel。关闭和打开我的电脑后,一张空白的 Excel 工作表出现了。
  • 计算机重启后是否要打开特定文件?
  • 或者时不时保存你的文件?
  • @Stefan 不,我不想要。您认为我该如何解决?

标签: c# excel winforms datagridview savefiledialog


【解决方案1】:

您的代码看起来过于复杂。你可以试试下面的示例并反馈吗?

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-excel-datagridview.htm

【讨论】:

    猜你喜欢
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    相关资源
    最近更新 更多