Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
ctac1412
18 / 18 / 2
Регистрация: 12.02.2013
Сообщений: 387
1

Работа с excel, нахождение уникальных строк

17.10.2017, 18:47. Просмотров 798. Ответов 5
Метки нет (Все метки)

Добрый день!Товарищи!
Есть два файла с количеством строк до 10 к. В каждом строке много колонок, нам нужно сравнить лишь по 2.
Берем каждую строку в файле 1 и значение ячейки 3, и ищем в файле 2 в каждой строке в ячейки 7.
Короче это сверка , в первом есть все работы, а во второй нужно сверить, попали ли эти работы в счет. сравниваем определенные ячейки
как лучше всего сделать?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2017, 18:47
Ответы с готовыми решениями:

Работа с Excel: Удаление строк
Помогите решить задачу по работе с Excel. Необходимо считать данные из...

Работа с Excel через Microsoft.Office.Interop.Excel
Необходимо реализовать програмку взаимодействующую с Excel в режиме реального...

Посчитать количество строк в Excel
Добрый вечер Подскажите, пожалуйста, как посчитать количество строк в книге...

Запись в Excel всех строк из ComboBox
Доброе время суток. :) Возник вопрос: Необходимо записать данные из ComboBox,...

Несоответствие строк при переносе таблицы из Excel в DataTable
Доброго времени. Сложная для объяснения ситуация. Есть исходный файл Excel...

5
Yury Komar
Модератор
Эксперт .NET
2378 / 2184 / 348
Регистрация: 27.01.2014
Сообщений: 3,913
Завершенные тесты: 1
17.10.2017, 19:45 2
открывать оба фйла и сверяять. либо грузить оба файла через ADO.NET в DataSe, закрывать файлы и сверять то, что в DataSet

Добавлено через 27 секунд
вотрой вариант будеть в разы быстрее

Добавлено через 32 секунды
и не стребует установленного Excel в системе
1
ovva
2432 / 2057 / 505
Регистрация: 02.02.2013
Сообщений: 1,928
Записей в блоге: 2
17.10.2017, 20:44 3
Лучший ответ Сообщение было отмечено Yury Komar как решение

Решение

Можно так (думаю что вы сможете переложить это на свои данные)
Кликните здесь для просмотра всего текста
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Imports System.Data.OleDb
'…
Private Sub CompareTable_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
    Dim sPth1 As String = IO.Path.Combine(Application.StartupPath, "Towns1.xls")
    Dim sPth2 As String = IO.Path.Combine(Application.StartupPath, "Towns2.xls")
    Dim cmdText1, cmdText2 As String
    ''имена полей таблицы в первой строке
    'Dim strConnection1 As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPth1 & "; Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
    'Dim strConnection2 As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPth2 & "; Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
    'cmdText1 = "Select [ГОРОД_1_2] From [Towns$]"
    'cmdText2 = "Select [ГОРОД_1_2_2] From [Towns$]"
    'имена полей таблицы стандартные (A, B, C, ...)
    Dim strConnection1 As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPth1 & "; Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
    Dim strConnection2 As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPth2 & "; Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
    cmdText1 = "Select [F3] From [Towns$]" 'F3 - третья колонка, Towns - имя листа
    cmdText2 = "Select [F5] From [Towns$]"
    Dim dt1 As DataTable = loadTable(strConnection1, cmdText1)
    Dim dt2 As DataTable = loadTable(strConnection2, cmdText2)
    Dim notTowns As New List(Of String) 'список имен из 1 не нашедших соответствия в 2.
    Dim bb As Boolean
    For Each t1 As DataRow In dt1.Rows
        bb = False
        For Each t2 As DataRow In dt2.Rows
            If t2.Item(0).Equals(DBNull.Value) Then Continue For
            If t1.Item(0) = t2.Item(0) Then
                bb = True
                Continue For
            End If
        Next
        If Not bb Then notTowns.Add(t1.Item(0))
    Next
    'что-то делаем с notTowns
End Sub
Private Function loadTable(ByVal strConn As String, ByVal CommText As String) As DataTable
    Dim dt As New DataTable
    Using conn = New OleDb.OleDbConnection(strConn)
        Try
            conn.Open()
            Dim cmd As New OleDb.OleDbCommand()
            cmd.Connection = conn
            cmd.CommandText = CommText
            Dim da As New OleDb.OleDbDataAdapter(cmd)
            da.Fill(dt)
            Return dt
        Catch ex As Exception
            MsgBox(ex.ToString)
            Return Nothing
        End Try
    End Using
End Function

Для Excel7 и выше
vb.net
1
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & sPth & "; Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
2
ctac1412
18 / 18 / 2
Регистрация: 12.02.2013
Сообщений: 387
18.10.2017, 09:15  [ТС] 4
Спасибо! Пока ждал сделал через тупое открытие файлов сбора строк и их последующее сравнение. Думаю ваш вариант будет на много быстрее, заложу что на него.
0
ovva
2432 / 2057 / 505
Регистрация: 02.02.2013
Сообщений: 1,928
Записей в блоге: 2
18.10.2017, 17:12 5
Небольшое замечание по коду, в строке 27 Continue For лучше заменить на Exit For.
0
Yury Komar
Модератор
Эксперт .NET
2378 / 2184 / 348
Регистрация: 27.01.2014
Сообщений: 3,913
Завершенные тесты: 1
18.10.2017, 17:42 6
ovva, тоже обратил внимание
0
18.10.2017, 17:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2017, 17:42

работа с excel
доброго времени. столкнулся с проблемой загрузки данных из excel. есть книга с...

Работа с Excel: Удаление листов
Подскажите как удалять листы из книги Excel, что то ни как не удаляются. И...

Работа с готовой таблицей Excel
Доброго времени суток. помогите с написанием программы на Visual Basic....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru