Комментарии
Виктор, 14 Мар 2023 — 14:58.#1
Все верно, к сожалению парсер не может автоматически брать название из столбца и присваивать ему то разрешение в котором он сохранен. Видимо скачивание файлов реализовано не сначала скачать и переименовать а напрямую задает файлу нужное имя забывая про разрешение. Надеюсь автор подправит в будущем, поскольку делать финты ушами очень не удобно, да и большая часть файлов сохраняется кривенько, а если нужно скачивать за одну загрузку большое количество файлов разных расширений это вообще писец ;). У меня вот другая проблема, не сохраняет длинные названия файлов, хотя в винде все ограничения на длину путей отключены. Возможно у вас с картинками одна из этих проблем.
Илья, напишите мне на почту, постараюсь помочь
Илья, 8 Окт 2021 — 20:55.#3
Присоединяюсь. Столкнулся с той же проблемой, парсер не может сохранить файл, если задавать ему имя по столбцу…
Владимир, 21 Май 2021 — 16:50.#4
Добрый день. Что-то не так с этими значениями артикула, хотя в excel они выглядят, как обычные. У меня есть ваша программа PastePictures, так она тоже не может именовать картинки по значению этих артикулов. В чем может быть причина?
Владимир, не видя файла настроек, не могу сказать.
Можем настроить под заказ.
Владимир, 20 Май 2021 — 19:28.#6
Да, причина в наименовании файла. Если берется имя из URL, то картинка скачивается, если задается по маске(данные из столбца), то файл не скачивается. Выбирается столбец с артикулами. В чем проблема?
Владимир, возможно неверно задано имя файла (файл не удаётся сохранить по заданному пути и под заданным именем файла)
Владимир, 20 Май 2021 — 14:10.#8
Добрый день. Парсер нормально отработал по сайту, все параметры вывелись в excel, в том числе, ссылки картинок, но сами картинки не загрузились. Парсер выдает сообщение: Ошибка скачивания файла-Не удалось скачать файл по ссылке: https://… Но сама ссылка рабочая и по ней картинка замечательно открывается. ??
Добрый день! Есть задача распарсить xls. Все вроде хорошо и не раз уже такое делал , пользуюсь библиотекой apache.poi .
Три строчки кода
HSSFWorkbook xlsxFile = new HSSFWorkbook(new FileInputStream("../отчет.xls"));
HSSFSheet xlsxList = xlsxFile.getSheet("Лист1");
System.out.println(xlsxList.getRow(10).getCell(0));
И тут выпадает эксепшен:
«Exception in thread «main» java.lang.RuntimeException: Unexpected missing row when some rows already present»
Я примерно понимаю в что xls необычный и есть вырезанные ячейки, совмещенные ячейки/строки, но не понимаю как побороть данную ошибку.
Раздел Импорт из Excel – предназначен для загрузки текстовых данных о товарах и услугах компании в формате XLS, XLSX, CSV.
Это может быть файл созданный по нашему шаблону для импорта, или же, к примеру, файл экспортированый с другого сайта в формате XLS, XLSX, CSV.
Рассмотрим ошибки в файле импорта, которые чаще всего допускают пользователи и решения для корректировки.
Сообщение об ошибке » В выбранном файле не все обязательные поля или файл поврежден». Как это решить?
1. Возможно, при создании файла импорта, используя наш шаблон, были допущены ошибки. В шаблоне импорта первая строка файла это подсказки, а в файле импорта первой строкой должны идти названия колонок. Нужно удалить первую строку с подсказками перед сохранением заполненного файла:
2. Ошибка возникает при попытке загрузить файл не в формате xls, xlsx или csv при импорте из Excel. Измените расширение импортируемого файла.
Если файл создан в результате экспорта с другого сайта проверьте его на соответствие с нашим шаблоном и наличием обязательных полей/колонок в файле Excel. Посмотреть правила составления файла Excel можно в Кабинете компании — Товары и Услуги — Импорт из Excel
3. Формат одной или нескольких ячеек выбран не верно. Например, в колонке ЦЕНА значение должно быть числовое и целое:
4. Если файл импорта был создан не из нашего шаблона тогда ошибка может быть из-за отсутствия или неверного заполнения поля колонок Адрес_подраздела и Идентификатор_подраздела. Если файл импорта создан из шаблона, импорт происходит даже если эти поля пустые.
После импорта отсутствуют фото к товару , хотя он были в файле импорта. Почему?
Причин, почему в результате импорта картинка не отобразилась, может быть несколько. Если это не связано с настройками импорта, то причину можно найти в файле импорта.
1. В файле импорта не указаны URL для изображений. Для импорта из Excel это колонка Ссылка_изображения. Ссылки должны быть разделены запятыми с пробелами:
Проверьте наличие ссылки в строке товара в колонке для фото, возможно там пустая строка или ссылка картинки указана с ошибкой, не полностью.
2. Также нужно проверить доступность ссылки, если это ссылка на картинку с сайта — скопируйте её и вставьте в строку браузера. Перейдите по адресу ссылки — если картинка отображается — адрес ссылки корректный.
Импорт прошел и у всех товаров теперь статус «Наличие не известно». Почему?
Для обозначения статуса наличия в колонке Наличие применяется:
Если оставить поле наличия пустым — статус вашего товара станет Наличие не известно.
Не отобразилась скидка после импорта. В чем причина?
Колонка Скидка должна иметь процентное или числовое значение, если в этой колонке (или ячейке) значение было указано не % или число — скидка не отобразится. На примере изображения ниже преобразуйте ячейки колонки Скидка в нужный формат:
В файле импорта были заполнены характеристики, но в карточке товара они оказались в Дополнительном. Почему?
На сайте компании и на портале Основные характеристики могут выступать фильтрами при поиске, а Дополнительные характеристики просто отображаются в описании к товару списком.
Если были указаны характеристики, но после импорта они отражаются в Дополнительных, значит для Рубрики, к которой относится товар, нет такой характеристики в нашей базе и система перенесла эти атрибуты в дополнительные.
Мнение эксперта
Знайка, самый умный эксперт в Цветочном городе
Если у вас есть вопросы, задавайте их мне!
Задать вопрос эксперту
Знание языка запросов Xpath для использования функции не обязательно, можно воспользоваться опцией браузера копировать Xpath. Если же вы хотите что-то уточнить, я с радостью помогу!
Облачные сервисы не требуют установки на ПК. Все данные хранятся на серверах разработчиков, вы скачиваете только результат парсинга. Доступ к программному обеспечению осуществляется через веб-интерфейс или по API.
Что значит ошибка перенос в excel
Добавить список url можно вручную, XLSX-файлом или ссылкой на XML-карту сайта. Отчеты выгружаются в форматах HTML и XLSX. Первые 500 запросов — бесплатно. Все нюансы работы с инструментом мы описали в гайде.
Открыв, RSS ленту своего сайта видишь, что ленты нет, а браузер сообщает об ошибке. Как мне удается вернуть «на место», «отвалившуюся» RSS ленту я и расскажу дальше.
Примечание: Хочу поправиться и замечу, что неисправности фида не валятся с неба. Скорее всего, это результат установки нового плагина или ваше изменение, некоторых файлов в шаблоне. Так как, для формирования фида используется язык разметки XML, который имеет строгие правила синтаксиса, то любое изменение в файлах, которые не влияют на работу сайта, могут «отстегнуть» RSS.
Для исправления ошибки, я обычно делаю следующие шаги, причем исправление фида может произойти на любом шаге.
Примечание: Вообще эта синтаксическая ошибка называется ошибка разбора XML или XML Parsing Error. В разных браузерах она показывается по-разному. Например, в Chrome:
Предположительно, ошибка разбора появляется из-за пробельных символов (пробел, новая строка, табуляция) появившихся в коде WordPress перед декларацией XML.
Для начала, попытаемся устранить ненужные пробелы в коде
Не помогло, или не хочется лазить по коду, воспользуйтесь плагином: Fix RSS Feed WordPress. Хоть и плагин не протестирован на версии 3.8, вполне может помочь в восстановлении ленты RSS.
Данный плагин не обновлялся 2 года. Скорее всего, он уже не поддерживается и может быть несовместим с текущими версиями WordPress.
Плагин установите на сайт любым из способов установки плагинов. После активации плагина, откройте его и запустите процесс исправления. Если проблема неработающего канала RSS в лишних пробелах, этот плагин должен помочь.

Если плагин Fix RSS Feed WordPress не помог, возможен конфликт одного из плагинов. Попробуйте, отключать в Консоли → Плагины → Установленные, последовательно каждый активный плагин, проверяя работоспособность ленты RSS.
Ошибки будут подсвечены желтым цветом. Ошибки связанные не с синтаксисом файлов, нужно решать для каждого конкретного случая отдельно.
Похожие посты:
Это ведь уже не про RSS? по крайней мере убирать пробелы не помогло
По вопросу я не понял, после чего была такая ошибка.
Вероятно вы что-то импортируйте (контент, товары) при помощи плагина импорта.
Если плагин импорта тестирован на вашей версии, я бы сначала отключил другие плагины сайта и повторил импорт.
Если бы это не помогло, написал в suport хостинга.
Добавить комментарий Отменить ответ
Мнение эксперта
Знайка, самый умный эксперт в Цветочном городе
Если у вас есть вопросы, задавайте их мне!
Задать вопрос эксперту
Предположительно, ошибка разбора появляется из-за пробельных символов пробел, новая строка, табуляция появившихся в коде WordPress перед декларацией XML. Если же вы хотите что-то уточнить, я с радостью помогу!
Я продолжаю получать сообщение об ошибке. Это ошибка
Не уверен, что это подходящее место для этого или нет, если нет, я извиняюсь. Изначально продолжал подниматься, когда я был на ebay, теперь случается случайным образом.
Исправить ошибку Parser конфигурации
Бесплатная версия ограничена 500-ми url. В платной (лицензию можно купить на год) количество страниц для парсинга не ограничено, и она имеет гораздо больше возможностей. Среди них — парсинг цен, названий и описаний товаров с любого сайта. Как это сделать, мы подробно описали в гайде.
В статье:
- 1 Ошибки импорта из Excel и их решения.
- 1.1 Что значит ошибка перенос в excel
- 2 Ошибка разбора XML или XML Parsing Error в RSS-ленте, решения проблемы
- 2.1 Поиск – Ошибка разбора XML или XML Parsing Error в RSS-ленте
- 2.1.1 Похожие посты:
- 2.2 2 комментария к “Ошибка разбора XML или XML Parsing Error в RSS-ленте, решения проблемы”
- 2.2.1 Добавить комментарий Отменить ответ
- 2.3 Исправить ошибку Parser конфигурации
- 2.1 Поиск – Ошибка разбора XML или XML Parsing Error в RSS-ленте
Как исправить ошибку (парсим xls)?
Добрый день! Есть задача распарсить xls. Все вроде хорошо и не раз уже такое делал , пользуюсь библиотекой apache.poi .
Три строчки кода
И тут выпадает эксепшен:
«Exception in thread «main» java.lang.RuntimeException: Unexpected missing row when some rows already present»
Я примерно понимаю в что xls необычный и есть вырезанные ячейки, совмещенные ячейки/строки, но не понимаю как побороть данную ошибку.
- Вопрос задан более трёх лет назад
- 552 просмотра
ну а как обычно борят? Джава же данные не родит, если их там нет
отсеивайте проблемные строки, разбирайте вручную
Обычно . хм . наверное хияк-хияк )
А что значит проблемная строка ?
Полный эксепшен
Exception in thread «main» java.lang.RuntimeException: Unexpected missing row when some rows already present
at org.apache.poi.hssf.usermodel.HSSFSheet.setPropertiesFromSheet(HSSFSheet.java:211)
at org.apache.poi.hssf.usermodel.HSSFSheet.(HSSFSheet.java:136)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.(HSSFWorkbook.java:355)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.(HSSFWorkbook.java:400)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.(HSSFWorkbook.java:381)
at odsPars.main(odsPars.java:10)
Он указывает что ошибка в этой строке
HSSFWorkbook xlsxFile = new HSSFWorkbook(new FileInputStream(«../отчет.xls»));
Источник
Ошибка во время парсинга excel файла что это значит
| Itsys | |
Эксперт Профиль Репутация: 1 Требуется импортировать данные из Excel файлов в таблицу MS SQL Надо сделать импорт в эту таблицу произвольного Excel файла (структура может меняться, т.е. набор и количество колонок не постоянно) определенных колонок, т.е. не все подряд, а только допустим 3, 4 и 12 в соответствующие колонки таблицы MS SQL, т.е. 3 колонка в Col3, 4 в Col4, 12 в Col12 и начиная с определенной строки, например с 20 и до конца. Все осложняется тем, что может быть задан произвольный фильтр парсинга, например 4 колонка больше 60, соответственно загружаются все строки, у которых значение в четвертой колонке больше 60, фильтров может быть несколько. Второе больше не усложнение, а условие — файл Excel находится на другом сервере в сети и доступен через шару. PS Данный механизм реализован на Perl, т.е. perl парсит Excel файл и с помошью запросов вставляет это в таблицу, но работает все это очень медлено файл Excel на 16000 строк и 20 колонок парсится около 1-2 минут. Загрузка процессора под 100%, весь отжирается памяти примерно вес файла *3 и загружается сеть, т.к. perl стоит там же, где лежит Excel — на другом сервере. Загрузку файла на 50000 строк, я так и не дождался — обрубил. ЗЫ Самый главный вопрос, если это реализовать средствами MS SQL, если это, конечно, впринципе возможно, будет ли это работать быстрее и меньше грузить процессор, память и сеть? |
|
Советчик
Профиль
Группа: Модератор
Сообщений: 20507
Регистрация: 8.4.2004
Где: Зеленоград
Репутация: 25
Всего: 453
О(б)суждение моих действий — в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция — Администрация форума.
Опытный
Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь
Репутация: 10
Всего: 17
| Код |
| Select * From Openrowset(‘msdasql’,’DRIVER=;ReadOnly=1;DefaultDir=c:filesnames.xls’, ‘Select * From [sheet1$]’) |
Шустрый
Профиль
Группа: Участник
Сообщений: 125
Регистрация: 25.6.2007
Где: UA
Репутация: 2
Всего: 5
| Itsys | ||||||||
Эксперт Профиль Репутация: 1
Потому-что это используется в интернет-магазине, написанном на perl, а файл Excel — это прайсы поставщиков, которые загружаются, сверяются с существующими товарами поставщика, корректируются цены и д.р. параметры товаров в магазине и добавляются новые — нет возможности добавить в Excel доп обработчики, т.к. файлы не наши, и обяснять как это делать каждому менеджеру после получения файла, собственно говоря не хочется
У нас 2000 и пока никаких причин, чтобы покупать 2005 нет, хотя это может стать причиной, вопрос в скорости работы. насколько быстро данный запрос откроет файл на 10 мегов? Добавлено через 2 минуты и 2 секунды
Вообще не выход, т.к.
Какие колонки импортировать а какие нет — определяет менеджер при импорте, и файлы у всех поставщиков очень уж разные |
||||||||
Опытный
Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь
Репутация: 10
Всего: 17
Шустрый
Профиль
Группа: Участник
Сообщений: 125
Регистрация: 25.6.2007
Где: UA
Репутация: 2
Всего: 5
| Цитата(Magnifico @ 13.3.2008, 14:04) |
| для 2005 open rowset |
| Код |
| Select * From Openrowset(‘msdasql’,’DRIVER=;ReadOnly=1;DefaultDir=c:filesnames.xls’, ‘Select * From [sheet1$]’) |
Дык а чем не устраивает это ? возвращает набор данных который лежит в ексель файле . да дальше вороти-нехачу .
Добавлено @ 15:18
ой извеняюсь, недочитал . sql2005
ДЛЯ SQL 2000
вариант 1
| Код |
| SELECT * FROM OPENDATASOURCE( ‘Microsoft Excel Driver (*.xls)’, ‘Data Source=D: ;’ ). [название файлла без расширения] |
| Код |
| SELECT * FROM OPENROWSET (‘MSDASQL’, ‘Driver=; SourceDB=d:; DefaultDir=d:; SourceType=XLS; Exclusive=No; BackgroundFetch=Yes; Collate=Russian; Null=No; Deleted=No;’, ‘SELECT * FROM [название файлла без расширения]’) |
код на работоспособность не проверял но с драйвером для DBF все пашет
Это сообщение отредактировал(а) SharedNoob — 13.3.2008, 15:27
| Itsys | |
Эксперт Профиль Репутация: 1 А DefaultDir можно задать как serverfiles? Это сообщение отредактировал(а) Itsys — 13.3.2008, 15:42 |
|
Шустрый
Профиль
Группа: Участник
Сообщений: 125
Регистрация: 25.6.2007
Где: UA
Репутация: 2
Всего: 5
QA => F1 => поиск по указателю => OPENDATASOURCE (или OPENROWSET) => enter
и читаем.
ps
для начала прочитайте данные с локального компьютера, а потом можно и подключить сетевой диск если что.
Это сообщение отредактировал(а) SharedNoob — 13.3.2008, 15:54
| Itsys | ||
Эксперт Профиль Репутация: 1
До этого я сам догадался . Спасибо что напомнил, что есть такая функция в MS SQL (шутка). Ладно протестирую сообщу результаты. Это сообщение отредактировал(а) Itsys — 13.3.2008, 16:09 |
||
| Itsys | ||||||
Эксперт Профиль Репутация: 1
Только парсит он не правильно
Почему некоторые значения изменены на NULL? |
||||||
Опытный
Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь
Репутация: 10
Всего: 17
Могут разные тиы данных в одном столбце:
1
2
3
4
5
6
7А
7A это потенциальный нулл — ошибка преобразования
если не принципиальны типы данных: приводить столбцы эксель к строке
| Код |
| Sub ПривестиКСтроке() Dim temp As String Dim str As String str = «‘» For Each c In Selection temp = Trim(c.Value) |
c.Value = str & temp
Next c
End Sub
| Itsys | ||
Эксперт Профиль Репутация: 1
Есть друие предложения и варианты? PS хотелось бы сделать все без вмешательства пользователей — получил файл по почте — загрузил в back-office интернет-магазина и все — дальше система сама все обрабатывет, менеджеру надо только подтверждать выполнение определнных действий.. |
||
Опытный
Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь
Репутация: 10
Всего: 17
попробуй с cast(ПОЛЕ as nvarchar(255)) поиграться
| Код |
| select [ЗДЕСЬ] from openrowset( ‘MSDASQL’, ‘Driver=Microsoft Excel Driver (*.xls);DBQ=pavlovFiles34’, ‘SELECT [ИЛИ ЗДЕСЬ] FROM [LIST$]’ ) as xls |
если использовать эксель в качестве источника данных ADO ,OLE то полюбому будет приводится столбец к определенному типу данных
(которых больше в столбце) и будут ошибки преобразования.
Только банально перебирать столбцы и строки и приводить каждую ячейку к определн формату
для обработки грязных юзерских данных может и понадобится сложные обработчики писать и не в SQLSERVERE
да и ресурсоемкое это занятие
| Itsys | |
Эксперт Профиль Репутация: 1 Проблема только в том, что исходный файл произвольный, т.е. изначально не известно даже сколько колонок в файле, заголовки полей моут стоять в любой строке файла — моут в первой, а могут и в 20, так как в приведенном выше примере, и, первым делом чего я хочу сделать, так это получить хотябы список полей, а он мне вместо заголовка поля выдает NULL. Есть ли способ CASTить все поля запроса в VARCHAR без их конкретного указания, ну типа CAST(* AS VARCHAR(5000))? |
|
| Beltar | |
Опытный Профиль Репутация: нет |
|
Опытный
Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь
Репутация: 10
Всего: 17
есть еще опции HDR=Yes;IMEX=1;
«HDR=Yes; считает первую строку заголовком полей
«IMEX=1;» интерпретирует данные как текст
Опытный
Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь
Репутация: 10
Всего: 17
используй лучше оле дб он покорректней работает
| Код |
| select * from openrowset(‘Microsoft.Jet.OLEDB.4.0’ , ‘Excel 8.0; HDR=YES; IMEX=1;Database=C:my.xls’ , [sheet1$]) |
Select *
FROM OPENDATASOURCE(‘Microsoft.Jet.OLEDB.4.0’, ‘Data Source=C:my.xls;
Extended Properties=»Excel 8.0;HDR=Yes;»‘). [sheet1$]
| Itsys | |
Эксперт Профиль Репутация: 1 Beltar, Обработка на perl уже написана, толь проблема в том, что грузится очень долго, вот и ищу возможность быстрее обработать данные. |
|
| Itsys | |
Эксперт Профиль Репутация: 1 |
|
Опытный
Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь
Репутация: 10
Всего: 17
| Код |
| Sub ПеребратьИменаЛистов() Dim XLSFile As String Dim i As Integer i = 1 XLSFile = «C:filesnamesw.xls» |
Dim ws As Worksheet
For Each ws In Worksheets
MsgBox «Имя » & i & » -го листа: » & ws.Name
Debug.Print «Имя » & i & » -го листа: » & ws.Name
i = i + 1
Next ws
End Sub
| Itsys | ||||
Эксперт Профиль Репутация: 1 Вопрос только в том, как это запустить, а потом еще и желательнов запрос передать. мне сами именя листов не нужны, мне надо выбирать данные из первого листа в файле, может можно это как-нибудь задать не перебирая с помощью VB файл?
|
||||
Опытный
Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь
Репутация: 10
Всего: 17
| Цитата |
| Вопрос только в том, как это запустить |
excel -> (alt + F11)(Редактор VB) — > insert ->module ->копироватьКодСюда ->правим пути в коде ->RUN
Ole automation это единственный способ добраться к свойствам и методам Эксель
Все языки программирования интегрируются с Эксель именно так, (и ничего другого кроме вышеприведенного кода не придумаешь)
Никаким запросом имена листов узнать невозможно
Эксель не база данных ,и нет возможности получить Информационную схему
| Цитата |
| желательно в запрос передать |
Если хочешь помучиться в 2000 есть расширенные хранимые процедуры на c++ (Visual Studio 6 )
(у меня на с++ «аллергия»)
В БОЛЕ набрать OLE Automation там есть какие то методы работы , можно вызывать VBA методы и св-ва (не разбирался)
ищи хороший пример
Или писать прогу на любом языке ,опять же интеграция с Эксель(код вверху)
подключение к sql server -> передача параметров из встроенного VBA в хранимую процедуру (с openrowsetoM)
| Цитата |
| мне надо выбирать данные из первого листа в файле |
| Itsys | |
Эксперт Профиль Репутация: 1 В общем решил я отказаться от этой затеи, т.к. срорее всего никакого убыстрения по сравнению с существующей обработкой на Perl я не получу. Еще раз спасибо. |
|
Опытный
Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь
Репутация: 10
Всего: 17
в 2005 это работает:
| Код |
| declare @file_name varchar(255), @h_application int, @hr int,@h_workbook int , @data varchar(255),@source varchar(255),@description varchar(255) |
set @file_name = ‘c:filesserge.xls’
exec @hr = sp_OACreate ‘Excel.Application’, @h_application OUT
exec @hr = sp_OAMethod @h_application, ‘Application.workbooks.Open’, @h_workbook OUT , @file_name
exec @hr = sp_OAGetProperty @h_application, ‘Workbooks(1).Sheets(1).Name’, @data OUT
SELECT @data as [dat]
exec sp_OAMethod @h_application, ‘Quit’
exec @hr=sp_OADestroy @h_application
—set @data =’NewSheet1′;
declare @SQL nvarchar(4000)
set @SQL =
‘SELECT * FROM OPENROWSET(»Microsoft.Jet.OLEDB.4.0»’ +’,’+»’Excel 8.0;HDR=Yes;IMEX=1;Database=C:filesserge.xls»’+’,’+ »’Select * From [‘+ @data +’$]»)’
| Itsys | ||
Эксперт Профиль Репутация: 1
set @file_name = ‘c:filesserge.xls’ exec @hr = sp_OACreate ‘Excel.Application’, @h_application OUT exec @hr = sp_OAMethod @h_application, ‘Application.workbooks.Open’, @h_workbook OUT , @file_name SELECT @data as [dat] |
Насколько я понимаю, это все работает не очень быстро
Опытный
Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь
Репутация: 10
Всего: 17
Это работает мгновенно!
Получить имя первого листа первой открытой книги- какая же здесь может быть нагрузка
| Код |
| exec @hr = sp_OAGetProperty @h_application, ‘Workbooks(1).Sheets(1).Name’, @data OUT |
я просто незнаю будет ли работать в 2000?
Что то ты рано сдался! Это то что доктор прописал .
Одна тонкость Workbooks(1).Sheets(1).Name -мы получаем имя первого листа первой открытой книги,если будет открыта другая книга,
допустим локально , а потом будет выполнен этот запрос -то подхватит именно эту книгу ,а
| Код |
| exec @hr = sp_OAMethod @h_application, ‘Application.workbooks.Open’, @h_workbook OUT , @file_name |
будет уже второй.
Из этого следует лучше обращаться к книге по имени (надюсь её название хотя бы известно или тоже скрипт писать ,перебирая все
эксель файлы? )
| Код |
| Workbooks(«Names.xls»).Sheets(1).Name |
в 2000 OLE Automation должно как то включаться (поиск)
| Itsys | |
Эксперт Профиль
Репутация: 1 |
Требуется импортировать данные из Excel файлов в таблицу MS SQL Надо сделать импорт в эту таблицу произвольного Excel файла (структура может меняться, т.е. набор и количество колонок не постоянно) определенных колонок, т.е. не все подряд, а только допустим 3, 4 и 12 в соответствующие колонки таблицы MS SQL, т.е. 3 колонка в Col3, 4 в Col4, 12 в Col12 и начиная с определенной строки, например с 20 и до конца. Все осложняется тем, что может быть задан произвольный фильтр парсинга, например 4 колонка больше 60, соответственно загружаются все строки, у которых значение в четвертой колонке больше 60, фильтров может быть несколько. Второе больше не усложнение, а условие — файл Excel находится на другом сервере в сети и доступен через шару. PS Данный механизм реализован на Perl, т.е. perl парсит Excel файл и с помошью запросов вставляет это в таблицу, но работает все это очень медлено файл Excel на 16000 строк и 20 колонок парсится около 1-2 минут. Загрузка процессора под 100%, весь отжирается памяти примерно вес файла *3 и загружается сеть, т.к. perl стоит там же, где лежит Excel — на другом сервере. Загрузку файла на 50000 строк, я так и не дождался ЗЫ Самый главный вопрос, если это реализовать средствами MS SQL, если это, конечно, впринципе возможно, будет ли это работать быстрее и меньше грузить процессор, память и сеть? |
| Akina | |
|
Советчик Профиль
Репутация: 25 |
А почему не реализовать это собсно средствами VBA? прямо из модулёчка в самом этом Эксельном файле? ——————— О(б)суждение моих действий — в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция — Администрация форума. |
| Magnifico | |||
|
Опытный Профиль
Репутация: 10 |
для 2005 open rowset
——————— Всё в порядке — спасибо зарядке ! |
||
| SharedNoob | |
|
Шустрый Профиль
Репутация: 2 |
А собственно ДТС пакет не выход ? |
| Itsys | |||||||||
Эксперт Профиль
Репутация: 1 |
Потому-что это используется в интернет-магазине, написанном на perl, а файл Excel — это прайсы поставщиков, которые загружаются, сверяются с существующими товарами поставщика, корректируются цены и д.р. параметры товаров в магазине и добавляются новые — нет возможности добавить в Excel доп обработчики, т.к. файлы не наши, и обяснять как это делать каждому менеджеру после получения файла, собственно говоря не хочется
У нас 2000 и пока никаких причин, чтобы покупать 2005 нет, хотя это может стать причиной, вопрос в скорости работы… насколько быстро данный запрос откроет файл на 10 мегов? Добавлено через 2 минуты и 2 секунды
Вообще не выход, т.к.
Какие колонки импортировать а какие нет — определяет менеджер при импорте, и файлы у всех поставщиков очень уж разные |
||||||||
| Magnifico | |
|
Опытный Профиль
Репутация: 10 |
локальный xls на 10,3 мега ——————— Всё в порядке — спасибо зарядке ! |
| SharedNoob | |||||||||
|
Шустрый Профиль
Репутация: 2 |
Дык а чем не устраивает это ? возвращает набор данных который лежит в ексель файле …. да дальше вороти-нехачу . Добавлено @ 15:18 Добавлено @ 15:24 ДЛЯ SQL 2000
вариант 2
код на работоспособность не проверял но с драйвером для DBF все пашет Это сообщение отредактировал(а) SharedNoob — 13.3.2008, 15:27 |
||||||||
| Itsys | |
Эксперт Профиль
Репутация: 1 |
А DefaultDir можно задать как serverfiles? Это сообщение отредактировал(а) Itsys — 13.3.2008, 15:42 |
| SharedNoob | |
|
Шустрый Профиль
Репутация: 2 |
QA => F1 => поиск по указателю => OPENDATASOURCE (или OPENROWSET) => enter ps Это сообщение отредактировал(а) SharedNoob — 13.3.2008, 15:54 |
| Itsys | |||
Эксперт Профиль
Репутация: 1 |
До этого я сам догадался Это сообщение отредактировал(а) Itsys — 13.3.2008, 16:09 |
||
| Itsys | |||||||
Эксперт Профиль
Репутация: 1 |
Только парсит он не правильно
А он выдает:
Почему некоторые значения изменены на NULL? |
||||||
| Magnifico | |||
|
Опытный Профиль
Репутация: 10 |
Могут разные тиы данных в одном столбце: 7A это потенциальный нулл — ошибка преобразования если не принципиальны типы данных: приводить столбцы эксель к строке
——————— Всё в порядке — спасибо зарядке ! |
||
| Itsys | |||
Эксперт Профиль
Репутация: 1 |
С Excel-ем сделать ничего не могу…. т.к.
Есть друие предложения и варианты? PS хотелось бы сделать все без вмешательства пользователей — получил файл по почте — загрузил в back-office интернет-магазина и все — дальше система сама все обрабатывет, менеджеру надо только подтверждать выполнение определнных действий.. |
||
| Magnifico | |||
|
Опытный Профиль
Репутация: 10 |
попробуй с cast(ПОЛЕ as nvarchar(255)) поиграться
если использовать эксель в качестве источника данных ADO ,OLE то полюбому будет приводится столбец к определенному типу данных для обработки грязных юзерских данных может и понадобится сложные обработчики писать и не в SQLSERVERE ——————— Всё в порядке — спасибо зарядке ! |
||
| Itsys | |
Эксперт Профиль
Репутация: 1 |
Проблема только в том, что исходный файл произвольный, т.е. изначально не известно даже сколько колонок в файле, заголовки полей моут стоять в любой строке файла — моут в первой, а могут и в 20, так как в приведенном выше примере, и, первым делом чего я хочу сделать, так это получить хотябы список полей, а он мне вместо заголовка поля выдает NULL. Есть ли способ CASTить все поля запроса в VARCHAR без их конкретного указания, ну типа CAST(* AS VARCHAR(5000))? |
| Beltar | |
Опытный Профиль Репутация: нет |
Возможно, имеет смысл накидать простейшую софтину в DelphiBuilderVS в которой просто открывать файл и указывать самому какие столбцы и с какой строчки импортировать и в какое поле БД. И пусть эта софтина все в базу кидает. Может этот процесс займет несколько минут, но ведь вы явно не по 50 файлов в день получаете. А пытаться все предусмотреть в том числе как будет названо поле с названием товара, например, «товар», «наименование» или даже «название фильма», если торгуете DVD-дисками, нереально. ——————— Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
| Magnifico | |
|
Опытный Профиль
Репутация: 10 |
есть еще опции HDR=Yes;IMEX=1; http://connectionstrings.com/?carrier=excel «HDR=Yes; считает первую строку заголовком полей ——————— Всё в порядке — спасибо зарядке ! |
| Magnifico | |||
|
Опытный Профиль
Репутация: 10 |
используй лучше оле дб он покорректней работает
——————— Всё в порядке — спасибо зарядке ! |
||
| Itsys | |
Эксперт Профиль
Репутация: 1 |
Сработало!!!! Beltar, Обработка на perl уже написана, толь проблема в том, что грузится очень долго, вот и ищу возможность быстрее обработать данные. |
| Itsys | |
Эксперт Профиль
Репутация: 1 |
Только обрадовался…. по условию я не знаю название листа, и мне надо выбрать первый из существующих. Как указать не название листа sheet1$, а его порядковый номер? |
| Magnifico | |||
|
Опытный Профиль
Репутация: 10 |
——————— Всё в порядке — спасибо зарядке ! |
||
| Itsys | |||||
Эксперт Профиль
Репутация: 1 |
Вопрос только в том, как это запустить, а потом еще и желательнов запрос передать… мне сами именя листов не нужны, мне надо выбирать данные из первого листа в файле, может можно это как-нибудь задать не перебирая с помощью VB файл? И так
и так
пробовал… |
||||
| Magnifico | |||||||
|
Опытный Профиль
Репутация: 10 |
excel -> (alt + F11)(Редактор VB) — > insert ->module ->копироватьКодСюда ->правим пути в коде ->RUN Ole automation это единственный способ добраться к свойствам и методам Эксель Никаким запросом имена листов узнать невозможно
Если хочешь помучиться в 2000 есть расширенные хранимые процедуры на c++ (Visual Studio 6 ) В БОЛЕ набрать OLE Automation там есть какие то методы работы , можно вызывать VBA методы и св-ва (не разбирался) Или писать прогу на любом языке ,опять же интеграция с Эксель(код вверху)
Вот из за этой казалось мелочи придется сильно помучиться (от Vba не убежишь) ——————— Всё в порядке — спасибо зарядке ! |
||||||
| Itsys | |
Эксперт Профиль
Репутация: 1 |
В общем решил я отказаться от этой затеи, т.к. срорее всего никакого убыстрения по сравнению с существующей обработкой на Perl я не получу. Еще раз спасибо. |
| Magnifico | |||
|
Опытный Профиль
Репутация: 10 |
в 2005 это работает:
——————— Всё в порядке — спасибо зарядке ! |
||
| Itsys | |||
Эксперт Профиль
Репутация: 1 |
Насколько я понимаю, это все работает не очень быстро |
||
| Magnifico | |||||||
|
Опытный Профиль
Репутация: 10 |
Это работает мгновенно!
я просто незнаю будет ли работать в 2000? Что то ты рано сдался! Это то что доктор прописал !!!!!!!!!!!!!!!! Одна тонкость Workbooks(1).Sheets(1).Name -мы получаем имя первого листа первой открытой книги,если будет открыта другая книга,
будет уже второй…
в 2000 OLE Automation должно как то включаться (поиск) ——————— Всё в порядке — спасибо зарядке ! |
||||||
| Itsys | |
Эксперт Профиль
Репутация: 1 |
Ну попробую…. насколько я знаю, OLE в принципе не самый быстрый способ, т.к. при его использовании загружается приложение сервер — это раз, считывается в память файл — это два и только потом можно из него чего-нибудь получить. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) 0 Пользователей: « Предыдущая тема | MS SQL Server | Следующая тема »
Вы к изначальной ссылке вида
link = 'https://habr.com/ru/top/page2/'
дописываете counter
res = req.get(link + str(counter))
в итоге получаете 404 для адреса:
'https://habr.com/ru/top/page2/2'
Меняйте номер страницы в goParse():
def goParse():
titles, links, times, hyperlinks = [], [], [], []
page_num = 2
while True:
print(page_num)
res = requests.get(f'https://habr.com/ru/top/page{page_num}/')
html = BeautifulSoup(res.text, 'lxml')
times += html.find_all('span', class_='post_time')
links_a = html.find_all('a', class_='post__title_link')
page = html.find_all('a', id='next_page')
for a in links_a:
hyperlinks.append(make_Hyperlink(a.text, a['href']))
if page == 'None':
break
else:
page_num += 1
print(hyperlinks)
PS page_num должен начинаться с 2
UPD запуск goParse() с while page_num < 5: (страницы 2-4) отдает hyperlinks с 38 ссылками/тайтлами:
[
'=HYPERLINK("https://habr.com/ru/post/538870/", "Кодирование Рида-Соломона для чайников" )',
'=HYPERLINK("https://habr.com/ru/company/audiomania/blog/540612/", "Что послушать, когда пишешь код: бесплатные миксы, заглушка для второго монитора и эмбиент-плеер" )',
'=HYPERLINK("https://habr.com/ru/post/541322/", "Author.today — пираты под флагом копирайта?" )', '=HYPERLINK("https://habr.com/ru/company/itelma/blog/540784/", "Тренды 2021 в индустрии полупроводников" )',
...
'=HYPERLINK("https://habr.com/ru/post/540130/", "Скромное обаяние конспирологии" )',
'=HYPERLINK("https://habr.com/ru/post/541330/", "[приглашение] Запись саундтреков в жанре киберпанк для OSINT инструмента" )',
'=HYPERLINK("https://habr.com/ru/company/rostelecom/blog/541208/", "Как мы автоматизировали тестирование верстки сайта с помощью скриншотов" )'
]
-
Max Human
New Member
Пользователи- Регистрация:
- 20 июн 2014
- Сообщения:
- 18
Всем привет,
Ситуация такая: запускаю парсинг, на 250+ страниц, из них 8 заканчиваются с ошибками, при том, что в браузере все хорошо грузится.
В результате парсинга, получаю:
— 7 страниц с ошибкой: «файл не сохранен: результирующий документ оказался пустым»— при этом, нужная инфа парсится и сохраняется в CSV — я растерян;— 1 страница с ошибкой: «файл не сохранен: программе не удалось загрузить страницу»
— запись в CSV отсутствует — это логично, вель есть ошибка. но в браузере грузится ок;Вопрос:
— можно, что то сделать, что бы не было ошибок и все записывалось в CSV?
— если все-таки получаю ошибку — как сохранить в CSV ссылку и слово «ошибка», что бы я видел, что есть таковая?**Скрытое содержимое: доступно при наличии 1 постов.**
Спасибо.
-
Root
Администратор
Администратор- Регистрация:
- 10 мар 2010
- Сообщения:
- 14.817
- Город:
- Барнаул
Здравствуйте.
Пробуйте парсить в 1 поток (может этот сайт не всегда отвечает на частые запросы).
Чтобы игнорировать «файл не сохранен: программе не удалось загрузить страницу» и выводить что-либо на подобных страницах, например <CD_DOCURL!> (ссылка на текущий WEB-документ, который парсим), нажимаем ctrl+6 и вставляем туда <CD_DOCURL!>.
С уважением к вам, Сергей…
-
Max Human
New Member
Пользователи- Регистрация:
- 20 июн 2014
- Сообщения:
- 18
«нажимаем ctrl+6 и вставляем туда <CD_DOCURL!>»
— если я сохраняю результаты парсинга в CSV — как указать ячейку, в которой должен вывестись <CD_DOCURL!>, замещающий ошибку? или как-то автоматом сохранит? -
Root
Администратор
Администратор- Регистрация:
- 10 мар 2010
- Сообщения:
- 14.817
- Город:
- Барнаул
Посчитать, в какой столбец вам нужно вставить и поставить разделители столбцов:
-
Min-Z-Drav
New Member
Пользователи- Регистрация:
- 14 янв 2015
- Сообщения:
- 32
«файл не сохранен: результирующий документ оказался пустым»
тоже самое и у меня… парсю в один поток…самое главное при предпросмотре все нормально загружается… а когда начинаю парсинг ошибки!
Попытался без php загрузилось нормально, но когда совмещаю php и загрузку файлов… выдает ошибку!
Последнее редактирование: 14 май 2015
-
Kreol
Модератор
Команда форума
Модератор- Регистрация:
- 6 янв 2013
- Сообщения:
- 2.645
1) Вы пробовали передавать cookies?
2) 8 ошибок на 250 товаров это не так много, это даже меньше 1%
3) Поставьте меньше потоков, либо добавьте паузу -
Min-Z-Drav
New Member
Пользователи- Регистрация:
- 14 янв 2015
- Сообщения:
- 32
1) Зачем передавать, если при предпросмотре.. все отлично
2) у меня в проекте 18 ссылок и все с ошибками…. 100%
3) Потоков 1У меня вопрос… можно ли так сделать:
<скрипт>код разный
<загрузка картинки>
</скрипт> ?Мне кажется проблема иза этого…
Если сделать так:
<скрипт>код разный
</скрипт>
<загрузка картинки>То все отлично загружается… и скрипт срабатывает и картинка загружается… только приходиться немного дописать код в скрипте.. дабы название картинки записывало в базу!
Поделиться этой страницей






)