Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Проверка таблиц Excel


Автор: FRC 21.10.2006, 08:33
Доброго времени суток!
Есть Excel-евская таблица с данными, название таблицы состоит из названия формы таблицы (012) и периода (0609-где 06 это год а 09 месяц) нужно проверить данные согласно некоторым условиям (например: строка 5 равна суме строк 7и 8) и в случае не удовлетворения этого требования выводится сообщение с указанием ошибки в каком именно столбце таблицы она произошла! 
Таблицы могут содержать в себе несколько десятков столбцов и строк. 
Так же нужно проверить соответствие с предыущим месяцем (0608) такого же файла.
Если у кого есть какие-нибудь мысли по этому вопросу пожалуста поделитесь!

Автор: Naghual 21.10.2006, 13:41
Мысль одна. Не заморачиватся в Экселе - в нем практически невозможно помешать пользователю ввести всякую чуш в нужном месте!

Эта задачка уже на БД тянет!

Автор: FRC 21.10.2006, 13:55
Naghual, 
Цитата

Эта задачка уже на БД тянет!

Если я правльно понял нужно перекинуть все данные в базу Access и там уже творить с данными все что дуже угодно.
Но возможно ли будет сделать сравнение с предыдущим периодом? (такой же таблицей но за предыдущий месяц) 

Автор: Naghual 21.10.2006, 15:10
Будет лучше, если ввод данных осуществлять непосредственно в БД. В ней же эти данные и обрабатывать.
Ну и конечно, уже готовые экселевские данные импортнуть.

Добавлено @ 15:11 
проверка валидности данных осуществляется непосредственно во время ввода данных, исключается возможность ввода не того ТИПА данных и нарушения структуры.

Автор: FRC 21.10.2006, 18:59
Naghual,  Хочу организовать следующим образом: Все данные в файле Excel расположенные в столбцах при импорте в Access должны расположиться в одну строку, где имя строки будет определять номер файла, а название таблицы период содержащихся в ний данных, по моему мнению это должно облегчить сравнение с предыдущим периодом. Столкнулся с проблемой при переносе данных из Excelя в таблицу Access, данные не распологаются так как описано выше, что сделать???

Автор: mihanik 24.10.2006, 09:24
Naghual, FRC!!!

Я что-то недопонял.
Тут необходимо, чтобы только тип данных совпадал?
Если только это условие, то действительно, в БД это сделать просто.
Хотя и в ехеле всё это делается через меню Данные/Проверка...

Если же нужно проверять правильность введения данных и соответствие с уже имеющимися данными в других ячейках, то для начинающего именно в ехеле будет проще.

Самый постой способ, - это условное форматирование.
Да и использование условий возможно...

Так что... 

Короче!
Ставь точнее задачу и уже решай сам, в чём эту задачу будет решать проще...

Автор: Naghual 24.10.2006, 13:48
Сделай програмный импорт.

Автор: FRC 26.10.2006, 11:13
mihanik, мне необходимо автоматически (при нажатии на кнопку) перенести данные содержащиеся в Екселе (данные содержатся в столбцах и строках 10х70) в таблицу Ассес. Данные должны быть расположены в Ассесе в одну строку! Данные из другого файла Ексель должны расположиться в строке ниже и т.д.

Автор: mihanik 26.10.2006, 11:50
FRC!!!

Технически и программно это несложно!

Только ты представь себе, что у тебя в одной записи будет 10х70=700 полей !!! smile 

Это не есть хорошо!!!
Ты хорошенько задачу продумай, составь грамотное ТЗ...

Будем решать вместе.  smile 

Автор: FRC 26.10.2006, 15:39
mihanik, 
Цитата
 Технически и программно это несложно!
Может небольшой кусочек кода по импорту данных? 

Автор: mihanik 27.10.2006, 07:09
Сразу скажу, что в объектной модели Access работал не много.

Что-то типа такого получается...

Код

    Dim MyDB As DAO.Database
    Dim MyRecordSet As DAO.Recordset

    ' Подключаемся к базе данных 
    strConnect = ";database=" & strDBPath & "\" & strDBName
    Set MyDB = OpenDatabase("", True, False, strConnect)
    Set MyRecordSet = MyDB.OpenRecordset( strTableName, dbOpenDynaset)

'
' Здесь идут какие-то действия с RecordSet
'

    ' Отключаемся от базы данных
    MyRecordSet.Close
    Set MyRecordSet = Nothing
    MyDB.Close
    Set MyDB = Nothing


Если что, Naghual и Flotsky тебе лучше смогут помоч.
Я с базами данных не очень давно работаю...

Добавлено @ 07:11 
strConnect может изменяться в зависимости от того, в каком формате у тебя храниться БД...

Добавлено @ 07:15 
А если надо создать БД программно, то делаем так...

Код

'''''''''''''''''''''
' Создаём базу даных в указанном месте
'''''''''''''''''''''
Sub CreateMyDB(strFN As String)
   Dim newDB As DAO.Database
   Dim newTD As DAO.TableDef
   Dim newFD As DAO.Field
   Dim NewID As DAO.Index

On Error GoTo CreateDatabase_Error
   
   Set newDB = DAO.Workspaces(0).CreateDatabase(strFN, dbLangGeneral, dbVersion30)
   Set newTD = newDB.CreateTableDef("Respondents")
   
   ' Создаём 1-е поле...
   Set newFD = newTD.CreateField("IDNumber", dbText, 10)
   newFD.AllowZeroLength = False
   newFD.Required = True
   newTD.Fields.Append newFD
   
' Создаём 2-е поле...
   Set newFD = newTD.CreateField("SenderEMail", dbText, 64)
   newFD.AllowZeroLength = False
   newFD.Required = True
   newTD.Fields.Append newFD
' ........

   '  Создаём n-е поле...
   Set newFD = newTD.CreateField("SentOn", dbDouble)
   newFD.Required = True
   newTD.Fields.Append newFD
    
 
   newDB.TableDefs.Append newTD
   newDB.TableDefs.Refresh
   
   newDB.Close
   
CreateDatabase_OK:
   Exit Sub
   
CreateDatabase_Error:
   If DAO.Errors.Count > 0 Then
       MsgBox DAO.Errors(0).Number & ":" & DAO.Errors(0).Description, vbCritical + vbOKOnly + vbApplicationModal
   Else
       MsgBox Err.Number & ":" & Err.Description, vbCritical + vbOKOnly + vbApplicationModal
   End If
   Resume CreateDatabase_OK
End Sub



Часть этого кода нашёл поиском по форуму...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)