2010-12-11 108 views
0

J'ai 2 feuilles Excel. Mon exigence est, je dois copier toutes les données d'une feuille Excel à l'autre. Ci-dessous est un extrait de code pour le même, ci-dessous le code est de copier et coller toutes les données d'une feuille à l'autre dans Excel, mais ce n'est pas coller les données de la gamme A1.Comment coller des données sélectionnées dans une autre feuille Excel en utilisant OLEDB?

Je souhaite que les données sélectionnées soient collées dans une autre feuille Excel à partir de la première ligne. En outre, je veux supprimer et insérer de nouvelles données chaque fois que le bouton est cliqué, au lieu d'ajouter dans le même. S'il vous plaît aider.

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

     } 

    } 
} 

Répondre

0

mais son pas coller les données de plage A1 parce que la première rangée est considérée comme étant l'en-tête de la table (feuille) soit les créer manuellement ou utiliser getRange de le faire.

// 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; 

afin d'insérer de nouvelles données à chaque fois effectuer une commande de suppression avant d'insérer OleDB ne sopport pas la commande de suppression

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

vérifier ce lien pour plus de fonctions sur le fichier excel Here