экспоненциальные числа при переносе
Дата публикации: 30-09-2026 06:35:21
экспоненциальные числа при переносе в форуме Вопросы по Microsoft Excel.
====code====
Sub Пример()
Dim rng As Range
Set rng = FileQueryRange("C:\Users\m.....\Desktop\1.html") ' "1" — номер таблицы на странице, если нужно
If Not rng Is Nothing Then
' Данные можно использовать здесь
Range("A1").Resize(rng.Rows.Count, rng.Columns.Count).Value = rng.Value
End If
End Sub
Public Function FileQueryRange(ByVal filename$, Optional ByVal Tables$) As Range
' функция загружает HTML файл filename$
' на скрытый лист tmpWQ (при его отсутствии - лист создаётся)
' возвращает диапазон ячеек, заполненный импортированными данными
On Error Resume Next: Err.Clear
Dim tmpSheet As Worksheet: Set tmpSheet = ThisWorkbook.Worksheets("tmpWQ")
If tmpSheet Is Nothing Then
Application.ScreenUpdating = False
Set tmpSheet = ThisWorkbook.Worksheets.Add
tmpSheet.Name = "tmpWQ"
tmpSheet.Visible = xlSheetVeryHidden
End If
If tmpSheet Is Nothing Then
msg$ = "Не удалось добавить скрытый лист «tmpWQ» в файл программы"
MsgBox msg, vbCritical, "Невозможно выполнить запрос к файлу": End
End If
tmpSheet.Cells.Delete: DoEvents: Err.Clear
With tmpSheet.QueryTables.Add("URL;file:///" & Replace(filename$, " ", "%20"), tmpSheet.Range("A1"))
If Len(Tables$) Then
.WebSelectionType = xlSpecifiedTables
.WebTables = Tables$
Else
.WebSelectionType = xlEntirePage
End If
.FillAdjacentFormulas = False: .PreserveFormatting = True
.RefreshOnFileOpen = False: DoEvents
.WebFormatting = xlWebFormattingNone ' или xlWebFormattingAll
.Refresh BackgroundQuery:=False: DoEvents
If Err = 0 Then Set FileQueryRange = tmpSheet.UsedRange
.Delete: DoEvents
End With
End Function
=============
Всем добрый день!Прошу вашей помощи.Нашла функцию по переносу html в эксель. С помощью него переношу данные из платежного поручения (html) в эксель.При переносе длинные значения чисел принимают экспоненциальный формат. Не помогает установка текстового формата, пробовала другие. Пробовала переносить данные с помощью PQ, не получается (много вложенных таблиц, выгружается криво).Подскажите, как прописать в самой функции, чтобы все значения вставлялись, как текст. Спасибо!
1.html.zip30.09.2026 09:35:21, marussia.
Основное содержимое страницы с новостью.
marussia Пользователь Сообщений: 81
Регистрация: 10.09.2015
|
| Код |
|---|
Sub Пример()
Dim rng As Range
Set rng = FileQueryRange("C:\Users\m.....\Desktop\1.html") ' "1" — номер таблицы на странице, если нужно
If Not rng Is Nothing Then
' Данные можно использовать здесь
Range("A1").Resize(rng.Rows.Count, rng.Columns.Count).Value = rng.Value
End If
End Sub
Public Function FileQueryRange(ByVal filename$, Optional ByVal Tables$) As Range
' функция загружает HTML файл filename$
' на скрытый лист tmpWQ (при его отсутствии - лист создаётся)
' возвращает диапазон ячеек, заполненный импортированными данными
On Error Resume Next: Err.Clear
Dim tmpSheet As Worksheet: Set tmpSheet = ThisWorkbook.Worksheets("tmpWQ")
If tmpSheet Is Nothing Then
Application.ScreenUpdating = False
Set tmpSheet = ThisWorkbook.Worksheets.Add
tmpSheet.Name = "tmpWQ"
tmpSheet.Visible = xlSheetVeryHidden
End If
If tmpSheet Is Nothing Then
msg$ = "Не удалось добавить скрытый лист «tmpWQ» в файл программы"
MsgBox msg, vbCritical, "Невозможно выполнить запрос к файлу": End
End If
tmpSheet.Cells.Delete: DoEvents: Err.Clear
With tmpSheet.QueryTables.Add("URL;file:///" & Replace(filename$, " ", "%20"), tmpSheet.Range("A1"))
If Len(Tables$) Then
.WebSelectionType = xlSpecifiedTables
.WebTables = Tables$
Else
.WebSelectionType = xlEntirePage
End If
.FillAdjacentFormulas = False: .PreserveFormatting = True
.RefreshOnFileOpen = False: DoEvents
.WebFormatting = xlWebFormattingNone ' или xlWebFormattingAll
.Refresh BackgroundQuery:=False: DoEvents
If Err = 0 Then Set FileQueryRange = tmpSheet.UsedRange
.Delete: DoEvents
End With
End Function |
Всем добрый день! Прошу вашей помощи. Нашла функцию по переносу html в эксель. С помощью него переношу данные из платежного поручения (html) в эксель. При переносе длинные значения чисел принимают экспоненциальный формат. Не помогает установка текстового формата, пробовала другие. Пробовала переносить данные с помощью PQ, не получается (много вложенных таблиц, выгружается криво). Подскажите, как прописать в самой функции, чтобы все значения вставлялись, как текст. Спасибо! Изменено: marussia - 30.09.2026 10:59:43
|
|
|
|
|
|
Для начала приложите собственно функцию и пример файла, откуда переносите (данные в файле естественно можно заменить на липовые).
|
|
|
|
marussia Пользователь Сообщений: 81
Регистрация: 10.09.2015
|
| Цитата |
|---|
написал: Для начала |
не могу вложить файл html. ошибка "неверный формат"
|
|
|
|
nilske Пользователь Сообщений: 1810
Регистрация: 30.11.2018
|
|
|
|
|
Sanja Модератор Сообщений: 21240
Регистрация: 10.01.2013
|
| Цитата |
|---|
| marussia написал: ошибка "неверный формат" |
вложите в архив и прикрепите его тут Согласие есть продукт при полном непротивлении сторон
|
|
|
|
marussia Пользователь Сообщений: 81
Регистрация: 10.09.2015
|
ага. поняла. вложила архив
|
|
|
|
nilske Пользователь Сообщений: 1810
Регистрация: 30.11.2018
|
| Код |
|---|
Sub Пример()
Dim rng As Range
Set rng = FileQueryRange("C:\Users\Пользователь\Downloads\1.html.html") ' "1" — номер таблицы на странице, если нужно
If Not rng Is Nothing Then
With Range("A1").Resize(rng.Rows.Count, rng.Columns.Count)
.Value = rng.Value
.NumberFormat = "0"
End With
End If
End Sub |
|
|
|
|
marussia Пользователь Сообщений: 81
Регистрация: 10.09.2015
|
спасибо, но это не совсем решает проблему. вставляет числа с нулями на конце. все что после 15 знака становится нулями. Пробовала менять формат, но ничего не выходит. Апостроф подставляю, тоже нули. | Получатель | | 32110807020011000000 |
|
|
|
|
|
|
через регулярку добавила апсстроф после TD ТОЛЬКО ПОТОМ ОТКРЫЛА Изменено: galina mur - 30.09.2026 14:51:23
|
|
|
|
|
|
Найти (<td.*?>) замена \1'
|
|
|
|
nilske Пользователь Сообщений: 1810
Регистрация: 30.11.2018
|
тогда можно и вставить в ячейки таблицы перед текстом неразрывный пробел, макрос в этом случае тоже не понадобится Изменено: nilske - 30.09.2026 15:30:47
|
|
|
|
marussia Пользователь Сообщений: 81
Регистрация: 10.09.2015
|
спасибо! буду искать дальше решение.
|
|
|
|
nilske Пользователь Сообщений: 1810
Регистрация: 30.11.2018
|
marussia, Вы бы написали какие данные извлекаете из платёжки и как их используете, потому что "решение" вы ведь сейчас подразумеваете наверняка для промежуточного результата
|
|
|
|
marussia Пользователь Сообщений: 81
Регистрация: 10.09.2015
|
мне, собственно, и нужны наименования, числовые данные номера счетов, реквизиты. со всеми этими данными проблем нет, кроме длинных номеров счетов. дальше они подгружаются в шаблон. таких платежек много, хотела автоматизировать хоть как-то. руками я умею. формулами тоже подтягивала, но подтягивается с ошибками. такие ошибки недопустимы. это все равно что руками делать.
|
|
|
|
nilske Пользователь Сообщений: 1810
Регистрация: 30.11.2018
|
а исходный формат платёжек у вас именно в формате html, либо это тоже ваш промежуточный шаг?
|
|
|
|
marussia Пользователь Сообщений: 81
Регистрация: 10.09.2015
|
html приходит в приложение.
|
|
|
|
|
|
| Цитата |
|---|
marussia написал: нужны наименования, числовые данные номера счетов, реквизиты |
Power Query вроде нормально с этим справляется и можно даже на выходе получить вполне понятную структуру со всеми данными. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
|
|
|
|
nilske Пользователь Сообщений: 1810
Регистрация: 30.11.2018
|
попинал ии - результат в файле ) так как пример исходного файла только один, то и результат соответствует только этому одному примеру Изменено: nilske - 30.09.2026 17:27:14
(новые поля, остальные можно сделать по образцу)
|
|
|
|
|
|
как вариант | Цитата |
|---|
Sub Макрос6a() Dim zcell As Range, s1 Workbooks.Open Filename:="C:\Users\UseR\Documents\w2.html" ActiveWorkbook.SaveAs Filename:="C:\Users\UseR\Documents\w2.xlsx", _ FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False For Each zcell In Excel.ActiveSheet.UsedRange s1 = zcell.Value If s1 = "'" Then s1 = "" If Len(s1) > 10 Then Debug.Print s1 End If 'Получатель '40102810545370000015 '03100643000000014215 'Срок плат. 'Очер. плат. '32167863675627811555 '32110807020011000110 Next zcell End Sub |
|
|
|
|
marussia Пользователь Сообщений: 81
Регистрация: 10.09.2015
|
спасибо! буду разбираться
|
|
|
|
marussia Пользователь Сообщений: 81
Регистрация: 10.09.2015
|
| Цитата |
|---|
написал: попинал ии |
Добрый день! Попробовала через ваш макрос. Но есть проблема. Когда доходит до функции ParseHTMLDOM, он спотыкается на строке Set leftTableCells = htmlDoc.querySelectorAll(".mid-internal-table-second-left td") и пишет, что Object doesn't support this property or method. Error #438 Меняла только путь к файлу. 
|
|
|
|
marussia Пользователь Сообщений: 81
Регистрация: 10.09.2015
|
| Цитата |
|---|
написал: как вариант |
спасибо. все отлично работает, но формат все равно не меняется. на печать выходит вот так: | 4,01028E+19 | | 3,10064E+18 | | 1 | Срок плат. | | | | Очер. плат. | 5 | | 3,21679E+19 | Рез. поле | | | 0 | 0 | |
|
|
|
|
nilske Пользователь Сообщений: 1810
Регистрация: 30.11.2018
|
|
|
|
|
sokol92 Пользователь Сообщений: 4907
Регистрация: 10.09.2017
|
Трюк. Excel умеет непосредственно открывать файлы с расширением .html (проверьте на файле-примере из этой темы). Для того, чтобы Excel при открытии воспринимал все числа в таблицах как текст, можно в исходном файле все фрагменты текста (в конце один пробел): <td заменить на (в конце один пробел): <td style='mso-number-format:"\@";' Можно всё сделать макросом VBA.
|
|
|
|
marussia Пользователь Сообщений: 81
Регистрация: 10.09.2015
|
| Цитата |
|---|
написал: Можно всё сделать макросом VBA. |
добрый день! здорово! а возможно ли добавить такую опцию в мой макрос, который в самом начале?
|
|
|
|
sokol92 Пользователь Сообщений: 4907
Регистрация: 10.09.2017
|
Попробуйте сами это сделать (у меня пока нет Excel "под рукой"). Нужно (макросом) заменить указанные выше фрагменты текста в файле и вызвать Ваш макрос, который будет обрабатывать новый файл. Замечания: 1. | Код |
|---|
.WebFormatting = xlWebFormattingAll |
(иначе наши изменения в файле будут проигнорированы). 2. | Код |
|---|
Range("A1").Resize(rng.Rows.Count, rng.Columns.Count).Value = rng.Value |
Такая конструкция превратит строки, состоящие из цифр, в числа (с чем мы изначально воюем) (подробности здесь). Копировать диапазоны ячеек нужно штатным образом: Изменено: sokol92 - 06.10.2026 15:14:05
|
|
|
|
marussia Пользователь Сообщений: 81
Регистрация: 10.09.2015
|
Добрый день! Я порылась в интернете и скомпоновать попробовала, но знания мои более, чем скромны. | Код |
|---|
Sub OpenWebFile()
Const URL As String = "C:\Users\юзер\Desktop\документ.html"
Dim oWB As Workbook
' Создаём строку со стилем для текстовых ячеек
Dim styleStr As String
styleStr = "<style>" & ".textmode {" & "mso-number-format: \\@;" & "}</style>"
' Теперь вставляем эту строку в HTML-разметку таблицы
Dim htmlContent As String
htmlContent = "<html>" & "<head>" & styleStr & "</head>" & "<body>" & _
"<table>" & " <tr>" & " <td>123</td>" & " <td>000456</td>" & _
" </tr>" & "</table>" & "</body>" & "</html>"
' Далее используем htmlContent для вставки в ячейку
ActiveSheet.QueryTables.Add(Connection:= _
"HTML;FILENAME=" & ThisWorkbook.path & "\\temp.html").QueryTables(1).Table.innerHTML = htmlContent
On Error Resume Next
Set oWB = Workbooks.Open(filename:=URL, ReadOnly:=True)
If oWB Is Nothing Then
MsgBox "Cannot open the url " & URL, vbExclamation + vbOKOnly, "ERR " & Err.Number & ":" & Err.Description
Err.Clear
Else
' Change to your desired path and filename
oWB.SaveAs filename:="C:\Test\stuff.xlsx", FileFormat:=xlExcel8
Set oWB = Nothing
End If
End Sub |
в итоге спотыкается на строке: ActiveSheet.QueryTables.Add(Connection:= _ "HTML;FILENAME=" & ThisWorkbook.path & "\\temp.html").QueryTables(1).Table.innerHTML = htmlContent ошибка 450: wrong number of arguments or invalid property assignment пока роюсь дальше 
|
|
|
|
Alex Пользователь Сообщений: 1115
Регистрация: 13.04.2023
|
marussia, добрый день. Сделал по рекомендациям от sokol92, на основании макроса из 1 сообщения (путь замените на свой, а вообще лучше сделать выбор файла по кнопке, наверное). Протестируйте.
|
|
|
|
nilske Пользователь Сообщений: 1810
Регистрация: 30.11.2018
|
marussia, marussia, было бы неплохо получить от вас рецензию или микро-отзыв на попытку помочь из сообщения #23 работает, но хотелось бы другой вариант / не работает со следующей ошибкой / не получилось применить / прочее )
|
|
|
|
|
|
marussia Пользователь Сообщений: 81
Регистрация: 10.09.2015
|
| Цитата |
|---|
написал: от вас рецензию |
Добрый день! Да, простите, завал полный. Я протестировала ваш вариант, он хорошо работает, но выдает не все данные или не совсем корректно. Плательщик - пусто Банк плательщика - пусто Банк получателя: ИНН 1659097613 (подставил ИНН вместо банка) === ПОЛНЫЙ РЕЗУЛЬТАТ DOM-ПАРСИНГА === Сумма цифрами: 500-00 Сумма прописью: Пятьсот рублей 00 копеек ИНН Получателя: 1659097613 КПП Получателя: 165901001 БИК Получателя: 019205400 Счет 1 (ЕКС): 40102810445370000079 Счет 2 (КС): 03100643000000011100 УИН (Код): 32167816398727817280 --------------------------------------- Плательщик: ??? Банк плательщика: ??? Банк получателя: ИНН 1659097613 Получатель: УФК по Республике Татарстан (Управление Федеральной службы государственной регистрации, кадастра и картографии по Республике Татарстан)
|
|
|
|
Схожие новости
Классификация: Мнения. Схожих патентов: 0. Схожих новостей: 10. Тональность: 0. Информативность: 8.17. Источник: www.planetaexcel.ru.