Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/39: Рейтинг темы: голосов - 39, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 66
1

Экспорт и последующий анализ данных spc

09.09.2013, 16:41. Показов 7347. Ответов 126
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
приветствую!

программист я не очень)) но имеется желание облегчить себе жизнь)
собственно суть:
имеем файл базы данных spc (лог системы контроля параметров) во вложении, данный фаил содержит примерно сутки работы системы количество строк всегда 10002 количество столбцов при преобразовании может варьироваться
необходимо:
1. наладить импорт из данного файла в таблицу Excel, ну или экспорт (с этим у меня пока самая большая проблема)
предполагаю что в конечной таблице должна открываться юзерформа где можно указать путь к файлу из которого нужно взять данные при этом копируемые данные должны помещаться в начало листа
2.после переноса в основной файл должны ракладываться в нормальные столбцы и проверятся на ряд параметров : Во первых должны удалятся строки содержащие хотя бы одно 0 значение, во вторых в конце массива могут содержаться дубли уже внесенной ранее информции т.к. лог снимается вручную втретих нужно проводить проверку на наполнение листа т.е при достижении 1кк строк начинать новый лист.
3. на отдельном листе или в юзерформе создать группу графиков с изменяемым интервалом дат т.е забиваем дата/время начало-дата/время конец и получаем графическое отображение изменений данных параметров.

собственно вопросы следующие:
насколько это реализуемо средствами excel/vba
как реализовать п 1.

п.2 сейчас потихоньку делаю сам, хотя как конролировать наполнение листа тоже пока не представляю.
Вложения
Тип файла: rar DataLogSPC.rar (165.3 Кб, 20 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2013, 16:41
Ответы с готовыми решениями:

Обработка множества документов word/pdf и последующий семантический анализ их содержимого
Добрый день, уважаемые форумчане. Подскажите, каким образом корректней решать следующую задачу:...

Ввод данных в Input и их последующий вывод на странице
Добрый день. Только начал осваивать MVC. Осваиваю по оф документам и сайту metanit.com Под...

Поиск данных в текстовом файле и последующий вывод
Доброго времени суток, форумчане! Нужна ваша помощь. В колледже стал проходить C++ Builder, работаю...

SQL: Группирование записей таблицы, и последующий вывод данных
Доброго времени суток всем. Помогите с проблемкой. Есть таблица с платежами. Каждый студент может...

126
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
11.09.2013, 20:09 61
Author24 — интернет-сервис помощи студентам
Я про другое. И мой у меня работает стабильно. А после того, как вернул точку, убрал замены, прописал через GetOpenfilename - вобще летает. Но очень интересно, почему у ТС все убивает?
0
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 66
11.09.2013, 20:40  [ТС] 62
прошу прощения меня отвлекли))
в общем код я пишу медленно так что пока только наметки, если в чем то не прав поправьте
Кликните здесь для просмотра всего текста
Visual Basic
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
51
52
53
54
55
56
57
58
59
60
Sub CvsToXlsxOneList()
    Dim mRng As Range, x As Range, i&, j&, mARR(), LastCol&
    Dim WbCSV As Workbook, WbSvod As Workbook, ShSvod As Worksheet
    
    Set WbSvod = ActiveWorkbook
    FileCSV = Application.GetOpenFilename(filefilter:="Workbooks(*.csv),*.csv", _
                Title:="Выберите файлы CSV", MultiSelect:=True)
    
    If Not IsArray(FileCSV) Then Exit Sub
    Application.ScreenUpdating = False
    'разброска данных файлов по листам
    'здесь должна быть проверка на на количетво свободных строк в общем файле
    'и в случае необходимости создание нового листа
    On Error Resume Next
    For j = 1 To UBound(FileCSV) 'этот цикл получается не нужен если грузить по одному файлу
        Workbooks.Open (FileCSV(j))
        'в исходном CSV
        'меняем в А1 / на пробел
        'добавляем пустой столбец после столбца А
        'делим столбец А по пробелу (в идеале еще и форматирование применяем чтобы убрать 00:00 после даты и отобразить секунды во времени)
        Set WbCSV = ActiveWorkbook
        With WbCSV
            If j = 1 Then 'этот иф не нужен выполняется поидее только часть после Else
                .Sheets(1).Copy After:=WbSvod.Sheets(WbSvod.Sheets.Count)
                Set ShSvod = ActiveSheet
                ShSvod.Columns.AutoFit
            Else
                With .Sheets(1)
                    .Range(.[a3], .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).Copy
                End With
                ShSvod.Cells(ShSvod.UsedRange.Rows.Count + 1, 1).PasteSpecial
            End If
            .Close False
        End With
    Next
        
    With WbSvod
        'обработка листов
        For j = 2 To .Sheets.Count
            With .Sheets(j)
                ' комбинированный код с Igor_T
                ReDim mARR(0 To .UsedRange.Columns.Count - 1)
                For i = 1 To .UsedRange.Columns.Count:  mARR(i - 1) = i: Next i
                'здесь есть мнение что все таки имеет смысл ограничить проверяемый диапазон 20000 строк
                'т.к. по мере накопления данных функция будет работать все дольше и дольше
                'и начианть с A1 что бы удаляло лишние шапки
                Set mRng = .Range(.[a3], .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count))
                mRng.RemoveDuplicates (mARR), xlNo
                LastCol = .UsedRange.Columns.Count + 1
                ' вот этот цикл я не до конца понимаю как работает))
                For Each x In mRng.SpecialCells(xlCellTypeBlanks)
                    .Cells(x.Row, LastCol) = 1
                Next
                Set x = .Cells(1, LastCol)
                .UsedRange.Columns(LastCol).ColumnDifferences(x).EntireRow.Delete
            End With
        Next
    End With
    Application.ScreenUpdating = True
End Sub

остается открытым вопрос о необходимости сортировки, и куда вставлять в конец или начало листа.
плюсы которые вижу:
нет необходимости держать отдельный лист для манипуляций с масивом, все происходит в исходном файле
а первый лист на котором сейчас кнопка как раз пригодится для п.3
из минусов
не совсем представляю как реализовать поиск по 3 компонентам,причем один из которых нужно задавать не строго, но это как бы следующий этап так что упремся разберемся.
0
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 66
11.09.2013, 20:55  [ТС] 63
убивает потому что Lastcol почему то =20))) а должно быть = 17
Миниатюры
Экспорт и последующий анализ данных spc  
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
11.09.2013, 21:37 64
Так и у меня основной вопрос: "Почему у меня всегда 17, а у Вас 20?"

Добавлено через 24 минуты
Ну если я прав - с Вас пиво. А так как пью не меньше 2 - значит два.
Проверил Вашу книгу - железно 20!!! Удалил лист, запустил - железно 17. Вы на этом листе, справа могли, например, изменить формат ячейки. Потом удалили значения, там вроде как ничего нет, а код ячейку с измененным форматом считает родными. Удалите листы, переименуйте новый. Запустите код - увидим.
1
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 66
11.09.2013, 21:40  [ТС] 65
Igor_Tr, а пиво какое)))? работает
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
11.09.2013, 21:49 66
Нет, спасибо, лучше я сейчас сам себе ящик возьму, а то после пива Вы опять что-нибудь нахимичите.
В следующий раз, если Вы что-то делаете в других свободных ячейках паралельно, тогда выделяете весь первый пустой столбец (на букву столбика, появится стрелка - бабац). Нажимаете Ctrl + Shift и стрелку вправо. Из контекстного меню выбираете не очистить, а удалить!!! Так и с рядами ниже, только стрелка вниз. Ну теперь комбинируйте с наших кодов что Вам нравится.
1
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 66
11.09.2013, 22:24  [ТС] 67
в общем пытаюсь сделать разложение даты в исходном CSV
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
' код записаный макрорекордером
Columns("B:B").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
'код в макросе
Columns("B:B").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("A1:A" & ActiveSheet.UsedRange.Rows.Count).TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True

не понимаю почему так опять мистика)
Миниатюры
Экспорт и последующий анализ данных spc  
Изображения
 
0
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
11.09.2013, 22:28 68
Раскладывать Дату и Время надо не в исходном файле, а уже в сформированном своде.
0
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 66
11.09.2013, 22:30  [ТС] 69
toiai, в сформированом проблема: у нас внизу(или вверху) уже сохраненные значения при добавлении столбца под время их будет сдвигать, а почему в исходном нельзя?
0
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
11.09.2013, 22:35 70
Если файл CVS один то не принципиально, а если их много загружать, то увеличивается время исполнения кода по сравнению исполнения его разово в сводном файле.
0
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 66
11.09.2013, 22:38  [ТС] 71
toiai, файлы все равно грузить по одному, но сохранять на один лист до наполнения, потом создавать следующий

если делать в конечном файле все равно на 3 столбца раскладывает
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
11.09.2013, 22:48 72
И не только. При вставке новых даных Вам нужно будет запоминать диапазон вставки и работать с ним - не проблема, но мороки больше. Выход - подправить основной код, что б он сразу делал эту разбивку. Мне так кажется. А зачем Вам это?
0
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 66
11.09.2013, 22:55  [ТС] 73
Igor_Tr, https://www.cyberforum.ru/post5042713.html

без разбивки у меня пока не получается вернуть данные в графический вид, в среднем анализируемый диапазон от 40 минут до нескольких часов т.е. от 240+ до просто дофига значений))) причем некоторые могут меняться резко а некоторые плавно падают или растут до критического уровня
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
11.09.2013, 22:58 74
А вобще - никогда не делал, но если бы... Записал в массив ст."А". Перевел бы в привычный мне формат (без AM, PM). Расписал в массиве с увеличением столбцов на +1, залил массив. И, если мой код, все в массив из листа - приемника и потом на лист "Reunion". Нужно по времени сравнить.
0
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 66
11.09.2013, 23:03  [ТС] 75
Igor_Tr, так в том то и дело что изначально, до разбивки, формат 24часовой, а при работе макроса эти ам/рм откуда то лезут
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
11.09.2013, 23:07 76
Почему-то я это опять не понимаю. Есть диапазон дат. Да и по барабану, какой формат. Для графиков это не ловушка. главное что б Excel принимал как дату. Пробуйте без изменений. Не получится -тогда, когда завтра найду время, постараюсь подправить код. А теперь уже ребята пришли. Мы на пиво. Стресс заливать.
1
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 66
11.09.2013, 23:13  [ТС] 77
Igor_Tr, excel их и понимает как дату, но график нужно от времени строить а не от даты точнее даже от даты/времени если значение в первом столбце записано "dd/mm/yy hh:mm:ss" то excel использует только dd/mm/yy и рисует прямую как на первом рисунке.
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
11.09.2013, 23:17 78
Нет, никогда сердце не болело, но наверное заболит. Вот опять у меня все нормально с датами. Посмотрите у себя в настройках (панель упр-я, язык, региональные....) настройки короткой и длинной даты. Или киньте скин настроек. Нет, все, я на пиво...Ползком.
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
11.09.2013, 23:20 79
Все, нет меня.
Миниатюры
Экспорт и последующий анализ данных spc  
0
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
11.09.2013, 23:27 80
Вот вариант подходящий под ТС
Вложения
Тип файла: zip SvodDataLogSPC_toiai на один лист Обновленый.zip (43.5 Кб, 5 просмотров)
1
11.09.2013, 23:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.09.2013, 23:27
Помогаю со студенческими работами здесь

Чтение из файла данных и последующий вывод на экран в виде линейного однонаправленного списка
Здравствуйте, я новичок в программировании. Не понимаю как выполнить следующую задачу: Дан список...

Копирование строки. При вводе пробела программа пропускает последующий ввод данных
char st, st1; int k, m, i, j; system("cls"); cout <<"Введите строку"<<endl; cin >>st; ...

Экспорт данных из базы данных *.DB в Word через Table (DateSet)
Всем Hello! у меня проблема не могу выгрузить данные из DB через table много чего перепробовал но...

Как сделать экспорт данных из таблицы базы данных MSSQL 2008 в Excel на php?
Добрый день. Подскажите как сделать экспорт данных из таблицы базы данных MSSQL 2008 в Excel ?...


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru