Как удалить дубликаты записей из листа Excel с помощью oledb - PullRequest
0 голосов
/ 11 января 2011

У меня есть лист Excel с 4 столбцами (JobCode, JobName, StartDate, EndDate). На основе одного правила я должен проверить 1-й лист Excel и вставить все записи во 2-й лист Excel, за исключением дубликата записи, который присутствует в 1-м листе Excel. Я пытался использовать список. Но он работает как ожидалось.

List<string> JobCodeList = new List<string>();
for (int iRowCount = 0; iRowCount < hrms_jobdata.Tables[0].Rows.Count; iRowCount++)
{
    JobCode = hrms_jobdata.Tables[0].Rows[iRowCount]["Job Code"].ToString();
    JobName = hrms_jobdata.Tables[0].Rows[iRowCount]["Job Name"].ToString();
    StartDate = hrms_jobdata.Tables[0].Rows[iRowCount]["Start Date"].ToString();
    EndDate = hrms_jobdata.Tables[0].Rows[iRowCount]["End Date"].ToString();
    JobCodeList.Add(JobCode + JobName);
}

connectionhrms_job.Close();


for (int iRowCount = 0; iRowCount < hrms_jobdata.Tables[0].Rows.Count; iRowCount++)
{
    JobCode = hrms_jobdata.Tables[0].Rows[iRowCount]["Job Code"].ToString();
    JobName = hrms_jobdata.Tables[0].Rows[iRowCount]["Job Name"].ToString();
    StartDate = hrms_jobdata.Tables[0].Rows[iRowCount]["Start Date"].ToString();
    EndDate = hrms_jobdata.Tables[0].Rows[iRowCount]["End Date"].ToString();

    DateTime convertedstart = DateTime.Parse(StartDate);
    StartDateFormated = convertedstart.ToString("dd-MM-yyyy");

    DateTime convertedend = DateTime.Parse(EndDate);
    EndDateFormated = convertedend.ToString("dd-MM-yyyy");

    List<string> dupvalue = removeDuplicates(JobCodeList);

    foreach (string value in dupvalue)
    {
        string jobcodename = value; 
    }

    string connectionStringdest = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pathdestination + ";Extended Properties=Excel 12.0;";
    DbProviderFactory factorydest = DbProviderFactories.GetFactory("System.Data.OleDb");
    DbConnection connectiondest = factorydest.CreateConnection();
    connectiondest.ConnectionString = connectionStringdest;
    DbCommand command = connectiondest.CreateCommand();
    StringBuilder inserthrms_job = new StringBuilder();
    inserthrms_job = inserthrms_job.Append("Insert into [hrms_job$] values ('" + JobCode + "', '" + JobName + "', '" + StartDateFormated + "', '" + EndDateFormated + "','" + JobCode + " " + JobName + "') ");
    inserthrms_job = inserthrms_job.Append(";");
    command.CommandText = inserthrms_job.ToString();
    connectiondest.Open();
    command.ExecuteNonQuery();
    connectiondest.Close();
}

Ответы [ 2 ]

0 голосов
/ 13 мая 2011

Хороший вопрос - я не думаю, что это возможно с помощью оператора SELECT в oledbadapter для одного ответа, который я вижу (если так, пожалуйста, сообщите).

См. Это OleDBAdapter Excel QA Я отправил через переполнение стека.

Поместите свой DataSet в объект, как я сделал в нижней части поста.

Затем расширьте ваш объект с помощью enumerable.distinct ( см. Пример MSDN ), чтобы ваш объект возвращал отдельные элементы из последовательности с помощью средства сравнения по умолчанию для сравнения значений.

затем внизу этого поста:

var noduplicates = query.Distinct();
foreach (var rec in noduplicates)
    Console.WriteLine(rec.ManagedLocationID + " " + rec.PartID + " " + rec.Quantity);
0 голосов
/ 11 января 2011

Когда вы запрашиваете исходную электронную таблицу, просто сделайте «Выберите top 1 field1, field2, field3 из [Sheet $] Group по field1, field2, field3».Таким образом, вы читаете только первую запись, а не дубликаты.

...