Плохой выбор данных с использованием VBScript, значений полей даты
У меня есть лист, который содержит данные, как показано ниже:
- Могу ли я передать аргумент VBScript (файл vbs, запущенный cscript)?
- Windows 7 - VBS Script для изменения последнего входа в систему
- Скриптинг Bitlocker Расшифровка локального жесткого диска
- Вызов службы WCF с помощью VBScript
- Windows 7 - Соберите силу беспроводного сигнала через командную строку
Теперь Excel имеет 36 заданий, у каждой задачи есть 4 столбца. первая задача. имя Task1 всегда будет запущено из столбца L. 36 задач были описаны 144 столбца. Теперь нам нужно пройти по строке и нужно проверить, будет ли TNStart Start date <T (N + 1) Start date.then, эта строка будет выбрана как плохая строка. Вкратце, когда номер задачи № будет увеличен с 1 до 36, дата начала должна быть соответствующей, должна быть в порядке возрастания. Если это не удается в любое время, строка должна быть помечена как плохие данные.
Можете ли вы, ребята, помочь мне здесь, чтобы сделать это с хорошей модой?
Option Explicit Dim objExcel1 Dim strPathExcel1 Dim objSheet1,objSheet2 Dim IntRow1,IntRow2 Dim ColStart Set objExcel1 = CreateObject("Excel.Application")'Object for Condition Dump strPathExcel1 = "D:\AravoVB\Copy of Original Scripts\CopyofGEWingtoWing_latest_dump_21112012.xls" objExcel1.Workbooks.Open strPathExcel1 Set objSheet1 = objExcel1.ActiveWorkbook.Worksheets(1) Set objSheet2 = objExcel1.ActiveWorkbook.Worksheets("Bad Data") objExcel1.ScreenUpdating = False objExcel1.Calculation = -4135 'xlCalculationManual IntRow2=2 IntRow1=4 Do Until IntRow1 > objSheet1.UsedRange.Rows.Count ColStart = objExcel1.Application.WorksheetFunction.Match("Parent Business Process ID", objSheet1.Rows(3), 0) + 1 Do Until ColStart > objSheet1.UsedRange.Columns.Count And objSheet1.Cells(IntRow1,ColStart) = "" If objSheet1.Cells(IntRow1,ColStart + 1) > objSheet1.Cells(IntRow1,ColStart + 5) and objsheet1.cells(IntRow,ColStart + 5) "" Then objSheet1.Range(objSheet1.Cells(IntRow1,1),objSheet1.Cells(IntRow1,objSheet1.UsedRange.Columns.Count)).Copy objSheet2.Range(objSheet2.Cells(IntRow2,1),objSheet2.Cells(IntRow2,objSheet1.UsedRange.Columns.Count)).PasteSpecial IntRow2=IntRow2+1 Exit Do End If ColStart=ColStart+4 Loop IntRow1=IntRow1+1 Loop objExcel1.ScreenUpdating = True objExcel1.Calculation = -4105 'xlCalculationAutomatic
Плохая производительность
В моем листе есть 2000 строк, а критерий отбора плохих данных – 144 столбца. Теперь выход идет через 25 минут. Таким образом, это увеличивает общую производительность. Поэтому я прошу вас помочь мне, сделав его более быстрым.
Возможно ли также, когда он справляется с плохой строкой на другом листе, также отмечены плохие столбцы в RED
- VBScript: Каков самый простой способ форматирования строки?
- 800A0401 - Ожидаемый конец заявления
- Base64 кодирует строку в VBScript
- Удалить все файлы из папки и ее подпапок
- Как найти окно Заголовок активного (переднего плана) windows с помощью Window Script Host
- Добавление кавычек в строку в VBScript
- Любые хорошие библиотеки для parsingа JSON в classическом ASP?
- Использование аргументов командной строки в VBscript
Я бы предложил подключиться к электронной таблице Excel через ADODB и получить данные с помощью SQL. Вы можете экспортировать данные в новую таблицу Excel просто, используя метод CopyFromRecordset
.
Option Explicit Dim conn, cmd, rs Dim clauses(34), i Dim xlApp, xlBook Set conn = CreateObject("ADODB.Connection") With conn .Provider = "Microsoft.ACE.OLEDB.12.0" .ConnectionString = "Data Source=""C:\path\to\excel\file.xlsx"";" & _ "Extended Properties=""Excel 12.0;HDR=Yes""" 'If you don't have Office 2007 or later, your connection string should look like this: '.ConnectionString = "Data Source=""C:\path\to\excel\file.xls"";" & _ ' "Extended Properties=""Excel 8.0;HDR=Yes""" .Open End With For i = 0 To 34 clauses(i) = "[Task" & i + 1 & " Start Date] < [Task" & i + 2 & " Start Date]" Next Set cmd = CreateObject("ADODB.Command") cmd.CommandText = "SELECT * FROM [WorksheetName$] WHERE " & Join(clauses, " OR ") cmd.ActiveConnection = conn Set rs = cmd.Execute Set xlApp = CreateObject("Excel.Application") xlApp.Visible = True Set xlBook = xlApp.Workbooks.Add xlBook.Sheets(1).Range("A1").CopyFromRecordset cmd.Execute
Замените C:\path\to\excel\file.xlsx
и WorksheetName
с соответствующими значениями.
обновленный
Некоторые ссылки:
Время выполнения VBScript / WSH / Scripting
- JScript и VBScript , в частности, разделы VBScript , Script Runtime и Windows Script Host . Также проверьте раздел « Регулярные выражения »
ADODB - объекты данных ActiveX
- Как использовать объект подключения
- Объекты данных Microsoft ActiveX
- Как открыть объекты соединения ADO и объекты набора записей
- Как использовать ADO для чтения и записи данных в книгах Excel
- Программирование ADO VBScript - поскольку большинство образцов ADO находятся в VB6 / VBA
Разработка клиентских приложений
Многие образцы в MSDN используют VBA или VB6. Для краткого введения в портирование VBA / VB6 на VBScript см. Здесь . Основной момент для запоминания - это большинство из этих тем (ADODB, Excel, Scripting Runtime) не являются специфичными для VBScript; они являются объектными моделями, доступными для любого языка с поддержкой COM, и их использование будет выглядеть очень похоже (см. здесь пример на Python).
Google - ваш друг , как и StackOverflow .