Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 61 След.
Поиск в файле csv, не открывая его
 
Тесты в полном разгаре)
Я тоже протестировал свою библу на 3х накопителях:
HDD WDC WD10EACS-00ZJB0  (1000 ГБ, SATA-II)
HDD WDC WD5000AAKX-001CA0  (500 ГБ, 7200 RPM, SATA-III)
SSD KINGSTON SV300S37A120G  (120 ГБ, SATA-III)

Кто выиграет? Ответ под спойлером
Скрытый текст


Цитата
excel_and написал:
Если удастся (будет желание) реализовать вывод всех строк по заданным идентификаторам
Добавил третий параметр в функцию - Разделитель (опциональный), т.е. если не задан - выводится первая найденная строка. Если задан, выводятся все найденные строки, через заданный разделитель.  В качестве разделите можно использовать любой символ Юникода или несколько символов (строку). Я использовал, к примеру, символ перенос строки (код символа = 10).
Пример и надстройки прилагаю.
Изменено: bedvit - 21 Май 2020 23:14:57
«Бритва Оккама» или «Принцип Калашникова»?
Перевести условное форматирование в обычное - VBA., Универсальный и специализированные варианты.
 
smaxus, да, есть такой момент. внес изменения в код, теперь форматы в объединенных ячейках с непечатными символами переносятся корректно.
Также добавил красивое решение от Михаила п.11 и реализовал возможность сохранить условное форматирование только в выделенной области текущего листа или для всей книги одним переключателем.
Код.
Код
Option Explicit
'разработка от: bedvit-Виталий Б.
'для форума: http://www.planetaexcel.ru/forum
'версия: 10 от 20/05/2020
'действие: Перевести условное форматирование в обычное для текущего листа - 0(False), для всей книги - 1(True)
'если 0 (для текущего листа) - обрабатывается выделенный диапазон, если диапазон из одной ячейки - весь лист.
'если 1 (для всей книги) - обрабатывается всё условное форматирование
'сохраняет структуру/группировку листа.

Sub RUN(): ConditionalFormatToFormat 0: End Sub

Sub ConditionalFormatToFormat(Optional AllWorksheets As Boolean = False)
Dim W As String, tW As String, WS As Worksheet, Rn As Range, ac, r As Range, A As Long
If MsgBox("Форматы не входящие в стандартные (гистограммы и значки), будут утеряны! Продолжить?", vbExclamation + vbYesNo) = vbYes Then
    With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: ac = .Calculation: .Calculation = -4135: .StatusBar = "BE: обработка данных...": End With
    W = ActiveWorkbook.name
    On Error Resume Next 'обработка ошибок в случае отсутствия условного формата на листе
    
    If AllWorksheets Then
        For Each WS In Worksheets
            Err.Clear
            Set Rn = WS.Cells.SpecialCells(xlCellTypeAllFormatConditions)
            GoSub Go_
        Next
    Else
        Set WS = ActiveSheet
        Err.Clear
        If Selection.CountLarge = 1 Then Set Rn = Cells.SpecialCells(xlCellTypeAllFormatConditions) Else Set Rn = Selection.SpecialCells(xlCellTypeAllFormatConditions)
        GoSub Go_
    End If
    With Application: .ScreenUpdating = True: .DisplayAlerts = True: .EnableEvents = True: .Calculation = ac: .StatusBar = False: End With
End If
Exit Sub

Go_:
If Err = 0 Then
    tW = Environ("temp") & "\" & CreateObject("Scripting.FileSystemObject").GetTempName()
    Workbooks.Add
    For A = 1 To Rn.Areas.count
        Set r = Rn.Areas(A):    r.Copy
        Range(r(1, 1).Address, r(r.Rows.count, r.Columns.count).Address).PasteSpecial Paste:=xlPasteValues 'значения
        Range(r(1, 1).Address, r(r.Rows.count, r.Columns.count).Address).PasteSpecial Paste:=xlPasteAllUsingSourceTheme 'формат
        Application.CutCopyMode = False
    Next
    ActiveWorkbook.SaveAs FileName:=tW, FileFormat:=xlWebArchive, CreateBackup:=False
    Workbooks(Dir(tW)).Close 0
    Workbooks.Open FileName:=tW
    For A = 1 To Rn.Areas.count
        Set r = Rn.Areas(A)
        Range(r(1, 1).Address, r(r.Rows.count, r.Columns.count).Address).Copy:  r.PasteSpecial Paste:=xlPasteFormats
        Application.CutCopyMode = False
    Next
    Workbooks(Dir(tW)).Close 0: Kill tW 
    Rn.Cells.FormatConditions.Delete 'удаляем условное форматирование
End If
Return
End Sub

Тестируйте.

p.s. Из замеченного: команда "Вставить значение и исходное форматирование", если записать в рекордере, работает так:
Код
...PasteSpecial Paste:=xlPasteAllUsingSourceTheme
...PasteSpecial Paste:=xlPasteValues
, что на объединенных ячейках вызывает ошибку "для этого все объединенные ячейки должны иметь одинаковый размер"...
если же эти команды поменять местами, все работает.  Почему разработчики не сделали такую очередность для меня загадка.
Изменено: bedvit - 20 Май 2020 23:43:38
«Бритва Оккама» или «Принцип Калашникова»?
Поиск в файле csv, не открывая его
 
Цитата
Hugo написал:
попросить Виталия чтоб написал функцию, которая будет вытягивать указанную строку из указанного файла
Готово. Скорость сопоставима с поиском. 5,2 миллионную строку находит за 8 сек. Это вторая функция в надстройке: GetRowCSV(файл, номер строки-начинается с 1)
«Бритва Оккама» или «Принцип Калашникова»?
Поиск в файле csv, не открывая его
 
Можно вывести на текущий лист. если вам так удобнее:
Код
Sub Test()
Dim t#: t = Timer
[a2] = Application.Run("FindInCSV", "C:\Users\bvv\Downloads\пример_структуры_1_ГБ.csv", "ASD123FGH456")
[a3] = "Time, sec: " & Timer - t
End Sub

7 мин это долго, видимо у вас hdd слабоват (в 5 раз медленнее чем у меня на рабочем, среднем ПК), у вас ноутбук?
«Бритва Оккама» или «Принцип Калашникова»?
Поиск в файле csv, не открывая его
 
Цитата
excel_and написал:
Что я делаю не так?
см. рис.
«Бритва Оккама» или «Принцип Калашникова»?
Поиск в файле csv, не открывая его
 
Цитата
Hugo написал:
попросить Виталия чтоб написал функцию, которая будет вытягивать указанную строку из указанного файла
Можно написать.
«Бритва Оккама» или «Принцип Калашникова»?
Поиск в файле csv, не открывая его
 
Т.к. скорость оперативной памяти и процессора выше на порядки, скорости чтения с hdd, все упирается в скорость чтения с вашего диска. Т.е. быстрее можно сделать функцию, только на быстром железе, ну и возможно немного оптимизировать на ассемблере.
Скорость чтения одного и 100 файлов такого же размера, естественно разная. Нужно создать дескриптор на файл, пообщатся с системой, попить чайка. Еще из особенностей функции: в Excel (с 2007 помоему), строка это Юникод (2 байта на символ), а в файле ANSI (1 байт на символ). Мне приходится переводить из одного формата в другой итоговую строку.
«Бритва Оккама» или «Принцип Калашникова»?
Поиск в файле csv, не открывая его
 
Hugo,  что бы отключить, нужно просто снять галку. Михаил Л,  правильно написал.
Если функционал понравится, можно причесать, сделать описание (как в обычных функциях).
Немного матчасти, для тех кто будет пользоваться:  xll - это надстройка написанная на Си\С++, поэтому в проектах VBA она не видна. Но принцип подключения и использования тот же самый. Из минусов - нельзя посмотреть код, если нет знаний реверс-инженеринга. Из плюсов феноминальная скорость работы (напрямую с win, hdd, памятью, с ячейками Excel, без объектной тяжёлой части, что является и в некоторой степени недостатком, в случае работы с объектами Excel) + небольшая плюшка, можно создать свою категорию/и функций, что я и сделал.
Что происходит под капотом:  функция напрямую обращается к hdd, а в идеале ssd (вот здесь реально будет прирост скорости), и читает кусок памяти в виде строки. Потом следующий. Т.е. в оперативке только текущий. Теоритически файл может быть размером с ваш hdd, и много оперативки не потребуется. Далее ищется вхождение строки, если найдено, выводится строка. Файл закрывается. Опять же открыть файл (в данном контексте) это не прочитать его весь, а создать файловый дескриптор и читать нужную область байтов с диска (строку).
«Бритва Оккама» или «Принцип Калашникова»?
Поиск в файле csv, не открывая его
 
excel_and, Все верно. Функция просматривает csw, с первого символа и далее (построчно). Если находится искомая подстрока (для всей строки). Эта строка выводится, поиск прекращается. По поводу нескольких строк, можно расширить функционал, но нужен ли он?
Посмотрел ваши тайминги, возможно в них ошибка, вы как их считали? возможно у вас был пересчет всех предыдущих функций, до тестируемой.
У меня поиск в csw в 1ГБ (создан по вашему шаблону увеличенным на большее кол-во строк, искомые данные в конце файла) отработал за 9 секунд. Значит на 10 ГБ примерно 90 сек. Тест-файл прилагаю, протестируйте в VBA на вашем файле в 10 ГБ (на одном, а не на 115). Код теста я уже написал, вам нужно только будет изменить путь к вашему файлу и запустить.
Продублирую:
Код
Sub Test()
Dim t#: t = Timer
Debug.Print Application.Run("FindInCSV", "C:\Users\...\Downloads\пример_структуры_1_ГБ.csv", "ASD123FGH456")
Debug.Print "Time, sec: "; Timer - t
End Sub

Hugo, приветствую! Запускается как обычная надстройка (xla, xlam). Открывается или как файл Excel или устанавливается в папку надстроек.
Если установить как надстройку, будет видна в списке надстроек (как и xla, xlam)
Изменено: bedvit - 20 Май 2020 11:26:24
«Бритва Оккама» или «Принцип Калашникова»?
Поиск в файле csv, не открывая его
 
Цитата
excel_and написал:
Из-за огромного размера нескольких файлов пришлось разбивать их на части, по 500 000 строк (с помощью скрипта, который посоветовал Hugo), что на выходе дало много csv.
Вот это зря, в моем случае, чем больше файл,тем лучше) тестируйте на 10 ГБ.
Так и не понял, что нужно извлечь, поэтому извлекаю всю строку.
Итак, функция "FindInCSV" в категории функций "Bedvit_xll" (не реклама, а старая версия библы, не стал заморачиватся, переименовывать).
На входе путь к файлу и что ищем, на выходе найденная строка.
Работает очень просто, устанавливаем или открываем надстройку xll -  работаем.
Интересно сколько секунд обрабатывает файл в 10 ГБ  - напишите?
В архиве две версии xll под разную разрядность Excel (!) и пример использования функции.
Можно использовать в VBA через Application.Run
Тестируйте.
Изменено: bedvit - 19 Май 2020 23:56:24
«Бритва Оккама» или «Принцип Калашникова»?
Поиск в файле csv, не открывая его
 
Цитата
Андрей VG написал:
Следовательно был сделан вывод - вы считаете себя вполне самодостаточным разработчиком, чтобы довести решение до требуемого самостоятельно
Андрей, привет! Не понял твою мысль :)
excel_and, скиньте файл, я вам сделаю простое решение - функцию в Excel, возвращающую нужную часть строки или всю строку, по первому совпадению из указанного csv.
«Бритва Оккама» или «Принцип Калашникова»?
Поиск в файле csv, не открывая его
 
Приложите небольшой пример csv-файла, что ищем и какой результат возвращаем. Будет время сделаю вам библиотеку, думаю, будет быстрее всего, здесь предложенного. У вас сколько ОЗУ, какой разрядности система, в каком формате/кодировке csv файл?
Изменено: bedvit - 19 Май 2020 11:12:22
«Бритва Оккама» или «Принцип Калашникова»?
Поиск в файле csv, не открывая его
 
Цитата
excel_and написал:
(особенно, если будут использоваться штатные средства винды и стандартного офиса).
Здесь ребята справятся лучше меня.
Подумал о таком решении, можно реализовать, в виде exe или .xll-надстройки для Excel. Но это не штатные средства Excel и предложенные выше решения вполне рабочие.
Хотя, конечно, интересно за сколько секунд будет обрабатываться данные в .exe или xll.
Изменено: bedvit - 18 Май 2020 19:56:57
«Бритва Оккама» или «Принцип Калашникова»?
Поиск в файле csv, не открывая его
 
Можно было бы написать программку, с хорошей скоростью, но... Жаль, не смогу поучаствовать, нет времени совсем..
«Бритва Оккама» или «Принцип Калашникова»?
Изменить регистр в словосочетаниях (место рождения)
 
Сотни раз и несколько лет, проще написать макрос со словарем всех встречающихся слов, и делать нужную замену.
«Бритва Оккама» или «Принцип Калашникова»?
Можно ли ускорить работу Excel, заменив HDD на SSD?
 
Цитата
Юрий М написал:
128-битная версия
А уже есть и такая? На ГП(видеокарта) работает? (Там разрядности и 512 есть, и даже 4096 бит)
«Бритва Оккама» или «Принцип Калашникова»?
Данные из хранилища данных через SQL в Excel., Выгрузка данных из хранилища данных.
 
Элементарно. Открываете PP. Делаете в нем sql-запрос к Хранилищу, там же таблицу ИНН (можно забрать с листа), делаете JOIN, выгружаете в виде сводной или просто таблицы на лист Excel.
«Бритва Оккама» или «Принцип Калашникова»?
Можно ли ускорить работу Excel, заменив HDD на SSD?
 
Цитата
sokol92 написал:
15 лет
Вот это сильно! 2-3 мес оптимизаций и у меня начинают закипать нейроны, за 15 лет может случится overflow :)
«Бритва Оккама» или «Принцип Калашникова»?
Driver Oracle ставлю согласно инструкции но ничего не выходит, есть запрос к БД ORACLE для подключения требуется установить драйвер
 
У вас какой разрядности Excel?
«Бритва Оккама» или «Принцип Калашникова»?
Количество цветов в произвольном диапазоне R+G+B
 
Цитата
MCH написал:
PS: жаль что вопрос мимо "Избушки" прошел, можно было бы посоревноваться
Хорошая идея, но вначале ушла из поля зрения. С другой стороны, можно здесь отписаться, у кого короче решение найдется.
382,5 - магическое число? )
«Бритва Оккама» или «Принцип Калашникова»?
Количество цветов в произвольном диапазоне R+G+B
 
Михаил, приветствую!
Да, первое формульное решение за вами)
Решение1:
Цитата
=ЕСЛИ(И(A2>255;A2<510);ЧИСЛКОМБ(382,5-ABS(A2-382,5)+2;2)-ЧИСЛКОМБ(382,5-ABS(A2-382,5)-254;2)*3;ЧИСЛКОМБ(382,5-ABS(A2-382,5)+2;2))
Глянул алгоритм ЧИСЛКОМБ(), если, вдруг, захочется разложить на арифметику, там где нет ЧИСЛКОМБ().
«Бритва Оккама» или «Принцип Калашникова»?
оптимальное размещение центров групп
 
Цитата
Ігор Гончаренко написал:
это подмечана простая закономерность и получена элементарная формула
Цитата
Ігор Гончаренко написал:
там где к вычислению результата привлекается компьютер - там заканчивается математика!
Не везде можно написать простую и понятную формулу, иногда быстрее "привлечь компьютер".
Вот пример. Точного математического решения так и не было найдено.
Скрытый текст
«Бритва Оккама» или «Принцип Калашникова»?
Генерация QR кодов в эксель
 
21/04/2020 - v1.0.2.4
Изменения:
1. Появилась возможность сохранять изображения в другие форматы (в связи с чем изменилось количество аргументов), пост 35 скорректировал.
FormatImage (код в функции/формат): 0 (bmp), 1 (jpeg), 2 (gif), 3 (tiff), 4 (png) . По умолчанию 4 (png) - самый малый размер.
2. Теперь QR сохраняется в монохромное изображение. т.е. с 24 бит на пиксель ранее, до 1 бита на пиксель теперь.
В любом цвете RGB.
Итого изображение размером 1140*1140 в 24 бит .BMP - 3808 КБ, 1140*1140 в 1 бит .PNG - 2КБ (итого, почти в 2 тыс. раз меньше размер)
Для этого сначала свой велик собрал в монохромном BMP, потом решил использовать WIN API, в виде GDI+.
Продукт для меня новый, трудоемкость вышла выше, чем для остальной части работ по этой функции.

3. Побочным эффектом освоения GDI+ стал метод конвертации вышеперечисленных форматов в любых сочетаниях, пример приложил в посте 35, код прост
Код
bVBA.ConvertFormatImage File, ConvertToFile, 3 'формат

4. Добавил рамку в 4 модуля (пикселя QR) в соответствии со стандартом.
5. Дописал обработчик ошибок (в задаваемых аргументах).
Изменено: bedvit - 21 Апр 2020 23:41:58
«Бритва Оккама» или «Принцип Калашникова»?
оптимальное размещение центров групп
 
Всем привет! Интересная тема и обсуждения. Сейчас нет времени вникать, но если будет необходимость, могу перенести расчет в xll или dll.
«Бритва Оккама» или «Принцип Калашникова»?
Удаление условного форматирования с сохранением вида ячеек созданного этим же форматированием
 
Перевести условное форматирование в обычное
«Бритва Оккама» или «Принцип Калашникова»?
Генерация QR кодов в эксель
 
Цитата
TorLink написал:
на 2013м офисе и ниже не работает,
Цитата
Danil920 написал:
с русскими символами не работает.
Может просто
Цитата
B.Key написал:
можно наваять свой activex
и дело в шляпе?

Самый эффективный способ не реализован.
Придется исправить. Держите COM/ActiveX.
Функция QRcodePrint на исходниках библиотеки libqrencode (емкость QR-кода составляет до 7000 цифр или 4000 символов)
Функция возвращает код ошибки. Если = 0 - значит ошибок нет, отработано штатно.
Аргументы:
1. QRcodeText - что печатаем (обязательное)
2. FileOut - куда печатаем (обязательное)
3. FormatImageOut -  формат изображения 0 (bmp), 1 (jpeg), 2 (gif), 3 (tiff), 4 (png)-по умолчанию. (этот и остальные аргументы не обязательны)
4. SizePixel - размер пикселя, по умолчанию 4 (минимально рекомендуемый)
5. PixelColorR =0 цвет RGB если хотим цветную картинку (по умолчанию черный)
6. PixelColorG = 0
7. PixelColorB =0
8. VersionSymbol - версия символов (по умолчанию = 0)
9. LevelErrCorrect - уровень коррекции ошибок (0-4, по умолчанию = 1  ~15%)

Матчасть по аргументам.

Собственно всё, качаем BedvitXLL(1.0.2.4)_beta.zip, ставим нужной разрядности (Excel) надстройку, пишем код
Код
Sub QR_Generate()
Dim bVBA As Object: Set bVBA = CreateObject("BedvitCOM.VBA") 'позднее связывание
Dim OutFile As String: OutFile = "C:\QR.bmp"
Dim QRcodeText As String: QRcodeText = "https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=71988&TITLE_SEO=71988-generatsiya-qr-kodov-v-eksel&MID=1050801#message1050801"

ActiveSheet.Shapes.SelectAll: Selection.Delete
If bVBA.QRcodePrint(QRcodeText, OutFile) = 0 Then [a1].Select: ActiveSheet.Pictures.Insert (OutFile)
 
End Sub
и работаем с кириллицей и любыми знаками Юникода, в любой версии Excel.
На всякий случай прикладываю и файл Excel.
Ниже QR-код на этот пост.
Изменено: bedvit - 21 Апр 2020 23:33:38
«Бритва Оккама» или «Принцип Калашникова»?
Как организовать хранение и обновление собранных данных (концептуально)?
 
Я бы поставил MySQL или SQLite. И заливал бы все туда.
«Бритва Оккама» или «Принцип Калашникова»?
Как отразить скрытые модули в VBA проекте ?
 
Видимо так, было бы интересно узнать метод от Владимир (ZVI). Уверен, что здесь LO/OO будут побеждены)
«Бритва Оккама» или «Принцип Калашникова»?
Как отразить скрытые модули в VBA проекте ?
 
Вот здесь один человек даже обещал справится с LO/OO. Но так мне и не ответил. Видимо не вышло.
Изменено: bedvit - 9 Апр 2020 19:07:03
«Бритва Оккама» или «Принцип Калашникова»?
Удалить в диспетчере имен некорректные имена кодом VBA, имена содержащие ошибку #ИМЯ?
 
Цитата
RAN написал:
Не удаляются имена (_xlfn.*).
Сейчас обнаружил, что не удаляются и имена (_xlcn.*) (умные таблицы?)
Причем пересохранение в другой формат результата не дает, а значит и этот путь закрыт (да и не очень он мне нравился)
Цитата
RAN написал:
Возможно С++ или C# помогут?.
знать бы куда тыкать.
«Бритва Оккама» или «Принцип Калашникова»?
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 61 След.
Наверх