Как я могу вставить выбранные данные в другой лист Excel, используя OLEDB? - PullRequest
0 голосов
/ 11 декабря 2010

У меня есть 2 листа Excel. Мое требование - я должен скопировать все данные из одного листа Excel в другой. Ниже приведен фрагмент кода для того же самого, ниже код копирует и вставляет все данные с одного листа на другой в Excel, но не вставляет данные из диапазона A1.

Я хочу, чтобы выбранные данные были вставлены в другой лист Excel, начиная с 1-й строки. Кроме того, я хочу удалять и вставлять свежие данные каждый раз, когда нажимается кнопка, вместо добавления в ту же. Пожалуйста, помогите.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.Common;
using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;

namespace TestExcelSheet
{
    public partial class Form1 : Form
    {
        string path = @"C:\Users\Bhawesh\Documents\Visual Studio 2010\Projects\TestExcelSheet\DataValidationTest.xlsx";
        string pathdestination = @"C:\Users\Bhawesh\Documents\Visual Studio 2010\Projects\TestExcelSheet\DataValidationTest - updated.xlsx";


        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                //Source Path
                string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";
                DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");
                DbDataAdapter adapter = factory.CreateDataAdapter();
                DbCommand selectCommand = factory.CreateCommand();
                selectCommand.CommandText = "SELECT [Job Code], [Job Name],Format([Start Date],'MM-DD-YYYY') as [Start Date], Format([End Date],'MM-DD-YYYY') as [End Date] FROM [Job$]";
                DbConnection connection = factory.CreateConnection();
                connection.ConnectionString = connectionString;
                selectCommand.Connection = connection;
                adapter.SelectCommand = selectCommand;
                DataSet Job = new DataSet();
                adapter.Fill(Job);
                for (int iRowCount = 0; iRowCount <= Job.Tables[0].Rows.Count; iRowCount++)
                {

                        string JobCode = "";
                        string JobName = "";
                        string StartDate = "";
                        string EndDate = "";
                        JobCode = Job.Tables[0].Rows[iRowCount]["Job Code"].ToString().Trim();
                        JobName = Job.Tables[0].Rows[iRowCount]["Job Name"].ToString().Trim();
                        StartDate = Job.Tables[0].Rows[iRowCount]["Start Date"].ToString().Trim();
                        EndDate = Job.Tables[0].Rows[iRowCount]["End Date"].ToString().Trim();

                        //Destination Path
                        string connectionStringdest = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pathdestination + ";Extended Properties=Excel 12.0;";
                        DbProviderFactory factorydest = DbProviderFactories.GetFactory("System.Data.OleDb");
                        DbDataAdapter adapterdest = factorydest.CreateDataAdapter();
                        DbCommand insertCommand = factorydest.CreateCommand();
                        DbConnection connectiondest = factorydest.CreateConnection();
                        connectiondest.ConnectionString = connectionStringdest;
                        insertCommand.Connection = connectiondest;
                        adapterdest.InsertCommand = insertCommand;


                        if (connectiondest.State == ConnectionState.Closed)
                        {
                            connectiondest.Open();
                        }
                        if (Job.Tables.Count > 0 && Job.Tables[0].Rows.Count > 0)
                        {

                                insertCommand.CommandText = "Insert into [Job_updated$] values ('" + JobCode + "', '" + JobName + "', '" + StartDate + "', '" + EndDate + "') ";
                                //insertCommand.CommandText = "UPDATE [Job_updated$E1:E1] SET F1='MyNewCol';";
                                insertCommand.ExecuteNonQuery();
                            insertCommand.Dispose();
                        }
                        connectiondest.Close();
                        dataGridView1.DataSource = Job.Tables[0].DefaultView;
                    }
                }

            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

        }

    }
}

1 Ответ

0 голосов
/ 13 декабря 2010

, но это не вставка данных из диапазона A1, поскольку первая строка считается заголовком для таблицы (листа), либо создайте их вручную, либо используйте для этого getRange.

// Create an array for the headers and add it to cells A1:C1.
object[] objHeaders = {"Order ID", "Amount", "Tax"};
m_objRange = m_objSheet.get_Range("A1", "C1");
m_objRange.Value = objHeaders;

, чтобывставлять новые данные каждый раз при выполнении команды удаления перед вставкой oleDb не поддерживает команду удаления

Excel.Range ran = (Excel.Range)sheet.Rows[5, Type.Missing];
ran.Select();
ran.Delete(Excel.XlDirection.xlUp);

проверьте эту ссылку для получения дополнительных функций в файле Excel Здесь

...