Всем привет! Даты из исходных строк получилось достать даже без предварительной обработки. Версии находятся с ошибками (на 462 строки 80 ошибок, 17%). Помогите доработать! Файл в посте №1.
Doober, здравствуйте! Нашёл Ваш макрос 2014 года и похожий код в виде UDF, подставил свои URL и Xpath, - ответ #ПУСТО!. Хотелось бы, чтобы работали: =ImportXML("http://www.nyam.pe.kr/dev/imagine/doc/Whatsnew.txt") =ImportXML("https://www.autodesk.com/support/technical/article/caas/sfdcarticles/sfdcarticles/Autodesk-Licensing-Service-Updates.html";"//tr[1]/td[1]|//tr[1]/td[4]") =ImportXML("https://www.softpedia.com/get/Programming/File-Editors/Restorator.shtml";"//div[1]/span[2]|//h2/span") Это текстовая, динамическая и статическая страницы. Можете помочь?
Alien Sphinx, первая версия UDF в посте #1. Не смог доделать, но думаю, что смысл ясен. Буду рад, если кто-то предложит свои варианты. Может быть всё можно сделать проще?
Alien Sphinx, в смысле? Исходный текст уж какой есть, его я изменить не могу. Ожидаемый результат - дата в формате ГГГГ-ММ-ДД, пробел, кавычка, пробел, номер версии. Или что-то близкое по смыслу. Пока пытаюсь что-то написать в таком духе: - "оцифровываем" месяца (01^, 02^ и т.д.) - удаляем всё, кроме цифр и символов .^ - разбираем строку на 2 блока - "дата » версия" - преобразуем даты в формат "ГГГГ-ММ-ДД"
stalker138013, теперь понял. Исправил, файл там же. Jack Famous, New, сделал немного иначе. В VBA-версию GoogleTranslate добавил Function decodeHTML для замены всех кодов HTML соответствующими символами. В XLS-версии оставил только замену кода апострофа на апостроф, т.к. функция и так длинная, как Вы и предлагали.
PS: вопрос на счёт того, как сделать, чтобы формула работала с массивом строк остаётся актуальным. Я просто не знаю, как быть с разбивкой строк и каково ограничение Google Translate на длину строки...
stalker138013 На скриншоте 101010.jpg апострофа не было. Откуда оно берётся не знаю, у меня нет ни "& # 39;", ни апострофов. Файл перезалил, проверяйте.
To All Как бы сделать, чтобы формула работала сразу с массивом строк?
Всем привет! Сделал макрос, который выбирает данные из всех формул:
Код
Sub CollectFormulas()
Dim ws As Worksheet, cell As Range, fileNum As Integer, FilePath As String, fileContents As String, output As String, quoteText As String
FilePath = "C:\Формулы.txt"
fileNum = FreeFile()
Open FilePath For Output As fileNum
For Each ws In ActiveWorkbook.Worksheets
For Each cell In ws.UsedRange
If cell.HasFormula Then Print #fileNum, cell.FormulaLocal
Next cell
Next ws
Close fileNum
Open FilePath For Input As #1
fileContents = Input$(LOF(1), #1)
Close #1
For i = 1 To Len(fileContents)
If Mid(fileContents, i, 1) = """" Then
quoteText = ""
For j = i + 1 To Len(fileContents)
If Mid(fileContents, j, 1) = """" Then
i = j: Exit For
Else
quoteText = quoteText & Mid(fileContents, j, 1)
End If
Next j
quoteText = Trim(quoteText)
If InStr(output, quoteText) = 0 Then output = output & quoteText & vbNewLine
End If
Next i
Open FilePath For Output As #1
Print #1, output
Close #1
End Sub
И по идее всех элементов управления, диаграмм и комментариев:
Код
Sub CollectControls()
Dim ws As Worksheet, shp As Shape, cht As ChartObject, cmt As Comment, FilePath As String
FilePath = "C:\Controls.txt"
Open FilePath For Output As #1
For Each ws In ActiveWorkbook.Worksheets
' Проходим по всем элементам ActiveSheet.Shapes и собираем тексты
For Each shp In ws.Shapes
If shp.Type = msoFormControl Then
Select Case TypeName(shp.ControlFormat)
Case "CheckBox", "OptionButton", "GroupBox", "Button", "EditBox", "Label"
If shp.ControlFormat.Value <> "" Then Print #1, shp.ControlFormat.Value
End Select
End If
Next shp
' Проходим по всем элементам ActiveSheet.ChartObjects и собираем тексты
For Each cht In ws.ChartObjects
For Each shp In cht.Chart.Shapes
If shp.Type = msoFormControl Then
Select Case TypeName(shp.ControlFormat)
Case "CheckBox", "OptionButton", "GroupBox", "Button", "EditBox", "Label"
If shp.ControlFormat.Value <> "" Then Print #1, shp.ControlFormat.Value
End Select
End If
Next shp
Next cht
' Проходим по всем комментариям на листе и собираем тексты
For Each cmt In ws.Comments
If cmt.Text <> "" Then Print #1, cmt.Text
Next cmt
Next ws
' Проходим по всем комментариям в Range и собираем тексты
For Each cmt In ActiveSheet.Comments
If cmt.Text <> "" Then Print #1, cmt.Text
Next cmt
Close #1
End Sub
Первый работает, буду рад, если кто-то сможет оптимизировать. Второй что-то выбирает, но не всё. Как доработать и объединить с CollectValues?
Всем привет! Помогите рассчитать координаты вершин прямоугольника, заданного высотой и координатами срединной линии. Пока угол поворота 0 (пример 1), всё работает. Если есть поворот (пример 2), результат не правильный. Пожалуйста, поправьте функцию. Файл во вложении. С уважением.
Ещё вариант - в выборке 1273 строки, тоже как-то маловато...
Код
Sub TranslateValues()
Dim ws As Worksheet, cell As Range, dict As Object, arr() As Variant, i As Long, j As Long
Set dict = CreateObject("Scripting.Dictionary")
' Перебираем все листы в книге
For Each ws In ThisWorkbook.Worksheets
For Each cell In ws.UsedRange.Cells ' 1273
Select Case VarType(cell.Value)
Case vbDouble, vbString
If Not IsNumeric(cell.Value) And cell.Value <> "" And Not dict.exists(cell.Value) Then
dict.Add cell.Value, 1
End If
End Select
Next cell
Next ws
' Создаем отсортированный массив без дубликатов
ReDim arr(0 To dict.Count - 1)
i = 0
For Each Key In dict.keys
arr(i) = Key
i = i + 1
Next Key
' Записываем значения из массива в столбец A на листе "Translate"
Set ws = ThisWorkbook.Worksheets("Translate")
For i = 0 To UBound(arr)
If Not IsNumeric(arr(i)) Then arr(i) = CStr(arr(i))
Next i
ws.Range("A1").Resize(UBound(arr) + 1, 1).Value = Application.Transpose(arr)
' Удаляем дубликаты, сортируем
ws.Range("$A:$A").RemoveDuplicates Columns:=1, Header:=xlNo
With ws.Sort
.SortFields.Clear
.SortFields.Add Key:=ws.Range("A:A"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange ws.Range("A:A")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Добрый вечер! Помогите выбрать значения из всех ячеек всех листов книги Excel в словарь. Словарь надо отсортировать и вывести на лист Translate для дальнейшей русификации. Варианты из раздела "Приёмы" не подходят. Набросок кода с просторов Интернета в файле (модуль mTranslate) - выбирает лишь 193 строки. С уважением.
В принципе, получилось пересчитать XY обратно в GPS с помощью Sub Get_GPS. Но хотелось бы ускорить и получить на финише не Sub, а UDF.
Пример в X21:Y21: по XY легко найти только ближайшую координату сетки (широта/долгота=60/30). Уточнить координаты точки формулой, макросом через GoalSeekMultiple и т.д. не вышло. Пришлось считать в Get_XY массив вокруг этой точки: взял 55-70 по широте и 25-40 по долготе с шагом 0,1. Это уже 101*151=15251 точка и надо бы ещё больше, но не лезет из-за ошибки переполнения. В общем, жесть какая-то. Как такую махину оптимизировать?
В W:Y сделал набросок формульного пересчёта XY обратно в GPS. Файл в посте №1. Пока не очень точно - можно попереключать X7 и посмотреть на результаты. На сегодня мозг сломался окончательно. )) Надеюсь, кто-нибудь подскажет, как повысить точность...
doober, понял, благодарю! А чем Кемь и Краснодар отличаются от всех остальных не удалось выяснить? И главное - на сколько реально сделать обратный пересчёт XY в GPS?
Всё же сделал формулу пересчёта GPS в XY на VBA. Точнее к 2 формульным версиям в F:I (для обычных Office и Office 365) написал 2 VBA-версии формул в J:M (вторая содержит таблицу подстановки, не ссылаясь на лист). Но! Первая ошибается в 2 местах из 129, вторая вообще не хочет работать. ЧЯДНТ? Файл в посте №1.
Помогите написать функцию/макрос для определения языка текстовых строк. Оказалось, что в Excel достаточно просто использовать PythonLangDetect: 1. Идём в Excel - жмём Alt+F11 - жмём Ctrl+M: импортируем -- VBA-JSON-2.3.1\JsonConverter.bas -- VBA-JSON-2.3.1\specs\Specs.bas (он новее рекомендованного VBA-Dictionary-1.4.1\specs\Specs.bas) 2. Распаковываем в "D:\python" архив Python 3.11.3 Embedded и файл get-pip.py 3. Убираем "#" со строки "import site" в "D:\python\python311._pth" 4. Открываем консоль в папке D:\python - пишем: python get-pip.py python -m pip install langdetect python -c "from langdetect import detect; print(detect("Проверка")): получаем "ru" Согласно ISO 639-1 всё правильно.
Достаточно не использовать пути с пробелами и нажать "Start" в приложенном xlsm. Если рядом появилась папка (data) и "ru" в консоли, то всё работает (написал Function LNG и Sub LNG2). Для 36 строк определение языка занимает 27,41 с. (7,6 с./10 строк) - очень медленно. Для 36 строк 8 ошибочно, 16 правильно и для 12 тупо нет профиля - тоже не очень хорошо. В целевых файлах есть все 36 языков, строк от 2500 до 5000. Реально ли избавиться от окна Python, ускорить или чем-то заменить Function LNG?