Не удалось загрузить файл потому что ошибка во время парсинга excel файла ртс тендер

Раздел Импорт из 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.
Чистка реестра Windows

Что значит ошибка перенос в 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 в лишних пробелах, этот плагин должен помочь.

Исправить Rss поток WordPress.Как сделать сайт WP WordPress Fix Rss Feed ‹ WordPress.Как сделать сайт WP — WordPress

Если плагин 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 конфигурации

Как исправить ошибку (парсим 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

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

Требуется импортировать данные из Excel файлов в таблицу MS SQL
В SQL таблица состоит из колонок Col1, Col2 . Col30 тип ntext

Надо сделать импорт в эту таблицу произвольного 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

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

Цитата(Akina @ 13.3.2008, 13:42 )
А почему не реализовать это собсно средствами VBA? прямо из модулёчка в самом этом Эксельном файле?
Или, например, промежуточная ADP-шка.

Потому-что это используется в интернет-магазине, написанном на perl, а файл Excel — это прайсы поставщиков, которые загружаются, сверяются с существующими товарами поставщика, корректируются цены и д.р. параметры товаров в магазине и добавляются новые — нет возможности добавить в Excel доп обработчики, т.к. файлы не наши, и обяснять как это делать каждому менеджеру после получения файла, собственно говоря не хочется

Цитата(Magnifico @ 13.3.2008, 14:04 )
для 2005 open rowset

У нас 2000 и пока никаких причин, чтобы покупать 2005 нет, хотя это может стать причиной, вопрос в скорости работы. насколько быстро данный запрос откроет файл на 10 мегов?

Добавлено через 2 минуты и 2 секунды

Цитата(SharedNoob @ 13.3.2008, 14:52 )
А собственно ДТС пакет не выход

Вообще не выход, т.к.

Цитата(Itsys @ 13.3.2008, 13:34 )
Надо сделать импорт в эту таблицу произвольного Excel файла (структура может меняться, т.е. набор и количество колонок не постоянно) определенных колонок, т.е. не все подряд, а только допустим 3, 4 и 12 в соответствующие колонки таблицы MS SQL, т.е. 3 колонка в Col3, 4 в Col4, 12 в Col12 и начиная с определенной строки, например с 20 и до конца.

Какие колонки импортировать а какие нет — определяет менеджер при импорте, и файлы у всех поставщиков очень уж разные

Опытный

Профиль
Группа: Участник
Сообщений: 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

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

А 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

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

Цитата(SharedNoob @ 13.3.2008, 15:53 )
QA => F1 => поиск по указателю => OPENDATASOURCE (или OPENROWSET) => enter

До этого я сам догадался . Спасибо что напомнил, что есть такая функция в MS SQL (шутка). Ладно протестирую сообщу результаты.

Это сообщение отредактировал(а) Itsys — 13.3.2008, 16:09

Itsys

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

Код
SELECT TOP 10 * FROM OPENROWSET(
‘MSDASQL’,
‘Driver=Microsoft Excel Driver (*.xls);DBQ=pavlovFiles34’,
‘SELECT * FROM [LIST$]’
) as xls

Только парсит он не правильно
В файле Excel строка:

Код
New NUM CISBN IDNAME CLARICHEV C_SERIE CNAME CAUTHOR CLONGNAME IINPACK IPAGETOTAL CFORMAT CCOVER cSizes1 iWeight1 YPRICE CPARTITION CSUBPRTION CPUBLNAME CEAN cComplete
Код
New NULL CISBN NULL NULL C_SERIE CNAME CAUTHOR CLONGNAME NULL NULL CFORMAT CCOVER cSizes1 NULL NULL CPARTITION CSUBPRTION CPUBLNAME CEAN cComplete

Почему некоторые значения изменены на NULL?

Опытный

Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь

Репутация: 10
Всего: 17

Могут разные тиы данных в одном столбце:
1
2
3
4
5
6

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

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

Цитата(Itsys @ 13.3.2008, 15:06 )
Потому-что это используется в интернет-магазине, написанном на perl, а файл Excel — это прайсы поставщиков, которые загружаются, сверяются с существующими товарами поставщика, корректируются цены и д.р. параметры товаров в магазине и добавляются новые — нет возможности добавить в Excel доп обработчики, т.к. файлы не наши, и обяснять как это делать каждому менеджеру после получения файла, собственно говоря не хочется

Есть друие предложения и варианты?

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

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

Проблема только в том, что исходный файл произвольный, т.е. изначально не известно даже сколько колонок в файле, заголовки полей моут стоять в любой строке файла — моут в первой, а могут и в 20, так как в приведенном выше примере, и, первым делом чего я хочу сделать, так это получить хотябы список полей, а он мне вместо заголовка поля выдает NULL.

Есть ли способ CASTить все поля запроса в VARCHAR без их конкретного указания, ну типа CAST(* AS VARCHAR(5000))?

Beltar

Опытный

Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: нет
Всего: 7

Опытный

Профиль
Группа: Участник
Сообщений: 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

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

Beltar, Обработка на perl уже написана, толь проблема в том, что грузится очень долго, вот и ищу возможность быстрее обработать данные.

Itsys

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

Опытный

Профиль
Группа: Участник
Сообщений: 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

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

Вопрос только в том, как это запустить, а потом еще и желательнов запрос передать. мне сами именя листов не нужны, мне надо выбирать данные из первого листа в файле, может можно это как-нибудь задать не перебирая с помощью VB файл?

Код
select *
from openrowset(‘Microsoft.Jet.OLEDB.4.0’
, ‘Excel 8.0; HDR=YES; IMEX=1;Database=C:my.xls’
, [1])
Код
select *
from openrowset(‘Microsoft.Jet.OLEDB.4.0’
, ‘Excel 8.0; HDR=YES; IMEX=1;Database=C:my.xls’
, [sheet[1]$])

Опытный

Профиль
Группа: Участник
Сообщений: 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

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

В общем решил я отказаться от этой затеи, т.к. срорее всего никакого убыстрения по сравнению с существующей обработкой на 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

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

Код
[quote=Magnifico, 19.3.2008, 23:11, post1447877]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_applicatio[/quote]

Насколько я понимаю, это все работает не очень быстро

Опытный

Профиль
Группа: Участник
Сообщений: 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

Эксперт
***

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

Требуется импортировать данные из Excel файлов в таблицу MS SQL
В SQL таблица состоит из колонок Col1, Col2 … Col30 тип ntext

Надо сделать импорт в эту таблицу произвольного 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 строк, я так и не дождался  smile — обрубил.

ЗЫ Самый главный вопрос, если это реализовать средствами MS SQL, если это, конечно, впринципе возможно, будет ли это работать быстрее и меньше грузить процессор, память и сеть?

Akina

Советчик
****

Профиль
Группа: Модератор
Сообщений: 20544
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 453

А почему не реализовать это собсно средствами VBA? прямо из модулёчка в самом этом Эксельном файле?
Или, например, промежуточная ADP-шка.

———————

 О(б)суждение моих действий — в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция — Администрация форума.

Magnifico

Опытный
**

Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь

Репутация: 10
Всего: 17

для 2005 open rowset

Код

Select *  From 
Openrowset('msdasql','DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DefaultDir=c:filesnames.xls', 
'Select * From [sheet1$]')

———————

Всё  в  порядке   —   спасибо  зарядке  !

SharedNoob

Шустрый
*

Профиль
Группа: Участник
Сообщений: 125
Регистрация: 25.6.2007
Где: UA

Репутация: 2
Всего: 5

А собственно ДТС пакет не выход ?

Itsys

Эксперт
***

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

Цитата(Akina @  13.3.2008,  13:42 Найти цитируемый пост)
А почему не реализовать это собсно средствами VBA? прямо из модулёчка в самом этом Эксельном файле?
Или, например, промежуточная ADP-шка. 

Потому-что это используется в интернет-магазине, написанном на perl, а файл Excel — это прайсы поставщиков, которые загружаются, сверяются с существующими товарами поставщика, корректируются цены и д.р. параметры товаров в магазине и добавляются новые — нет возможности добавить в Excel доп обработчики, т.к. файлы не наши, и обяснять как это делать каждому менеджеру после получения файла, собственно говоря не хочется  smile

Цитата(Magnifico @  13.3.2008,  14:04 Найти цитируемый пост)
для 2005 open rowset

У нас 2000 и пока никаких причин, чтобы покупать 2005 нет, хотя это может стать причиной, вопрос в скорости работы… насколько быстро данный запрос откроет файл на 10 мегов?

Добавлено через 2 минуты и 2 секунды

Цитата(SharedNoob @  13.3.2008,  14:52 Найти цитируемый пост)
А собственно ДТС пакет не выход

Вообще не выход, т.к.

Цитата(Itsys @  13.3.2008,  13:34 Найти цитируемый пост)
Надо сделать импорт в эту таблицу произвольного Excel файла (структура может меняться, т.е. набор и количество колонок не постоянно) определенных колонок, т.е. не все подряд, а только допустим 3, 4 и 12 в соответствующие колонки таблицы MS SQL, т.е. 3 колонка в Col3, 4 в Col4, 12 в Col12 и начиная с определенной строки, например с 20 и до конца.

Какие колонки импортировать а какие нет — определяет менеджер при импорте, и файлы у всех поставщиков очень уж разные  smile

Magnifico

Опытный
**

Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь

Репутация: 10
Всего: 17

локальный xls  на 10,3 мега
в менеджмент студио за 23 секунды   44392 строк

———————

Всё  в  порядке   —   спасибо  зарядке  !

SharedNoob

Шустрый
*

Профиль
Группа: Участник
Сообщений: 125
Регистрация: 25.6.2007
Где: UA

Репутация: 2
Всего: 5

Цитата(Magnifico @ 13.3.2008,  14:04)
для 2005 open rowset

Код

Select *  From 
Openrowset('msdasql','DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DefaultDir=c:filesnames.xls', 
'Select * From [sheet1$]')

Дык а чем не устраивает это ? возвращает набор данных который лежит в ексель файле …. да дальше вороти-нехачу .

Добавлено @ 15:18
ой извеняюсь, недочитал …sql2005

Добавлено @ 15:24

ДЛЯ SQL 2000
вариант 1

Код

SELECT *
FROM OPENDATASOURCE(
'Microsoft Excel Driver (*.xls)',
'Data Source=D: ;'
)...[название файлла без расширения]

вариант 2

Код

SELECT  *
  FROM OPENROWSET  ('MSDASQL',
                    'Driver={Microsoft Excel Driver (*.xls)};
                     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

Эксперт
***

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

А DefaultDir можно задать как serverfiles?

Это сообщение отредактировал(а) Itsys — 13.3.2008, 15:42

SharedNoob

Шустрый
*

Профиль
Группа: Участник
Сообщений: 125
Регистрация: 25.6.2007
Где: UA

Репутация: 2
Всего: 5

QA => F1 => поиск по указателю => OPENDATASOURCE (или OPENROWSET) => enter
и читаем. 

ps
для начала прочитайте данные с локального компьютера, а потом можно и подключить сетевой диск если что.

Это сообщение отредактировал(а) SharedNoob — 13.3.2008, 15:54

Itsys

Эксперт
***

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

Цитата(SharedNoob @  13.3.2008,  15:53 Найти цитируемый пост)
QA => F1 => поиск по указателю => OPENDATASOURCE (или OPENROWSET) => enter

До этого я сам догадался smile. Спасибо что напомнил, что есть такая функция в MS SQL (шутка). Ладно протестирую сообщу результаты.

Это сообщение отредактировал(а) Itsys — 13.3.2008, 16:09

Itsys

Эксперт
***

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

Код

SELECT TOP 10 * FROM OPENROWSET(
 'MSDASQL', 
 'Driver=Microsoft Excel Driver (*.xls);DBQ=pavlovFiles34', 
 'SELECT * FROM [LIST$]'
) as xls

Только парсит он не правильно  smile 
В файле Excel строка:

Код

New    NUM    CISBN    IDNAME    CLARICHEV    C_SERIE    CNAME    CAUTHOR    CLONGNAME    IINPACK    IPAGETOTAL    CFORMAT    CCOVER    cSizes1    iWeight1    YPRICE    CPARTITION    CSUBPRTION    CPUBLNAME    CEAN    cComplete

А он выдает:

Код

New    NULL    CISBN    NULL    NULL    C_SERIE    CNAME    CAUTHOR    CLONGNAME    NULL    NULL    CFORMAT    CCOVER    cSizes1    NULL    NULL    CPARTITION    CSUBPRTION    CPUBLNAME    CEAN    cComplete

Почему некоторые значения изменены на NULL?

Magnifico

Опытный
**

Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь

Репутация: 10
Всего: 17

Могут разные тиы данных в одном столбце:
1
2
3
4
5
6

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

Эксперт
***

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

С Excel-ем сделать ничего не могу…. т.к.

Цитата(Itsys @  13.3.2008,  15:06 Найти цитируемый пост)
Потому-что это используется в интернет-магазине, написанном на perl, а файл Excel — это прайсы поставщиков, которые загружаются, сверяются с существующими товарами поставщика, корректируются цены и д.р. параметры товаров в магазине и добавляются новые — нет возможности добавить в Excel доп обработчики, т.к. файлы не наши, и обяснять как это делать каждому менеджеру после получения файла, собственно говоря не хочется

Есть друие предложения и варианты?

PS хотелось бы сделать все без вмешательства пользователей — получил файл по почте — загрузил в back-office интернет-магазина и все — дальше система сама все обрабатывет, менеджеру надо только подтверждать выполнение определнных действий.. smile

Magnifico

Опытный
**

Профиль
Группа: Участник
Сообщений: 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

Эксперт
***

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

Проблема только в том, что исходный файл произвольный, т.е. изначально не известно даже сколько колонок в файле, заголовки полей моут стоять в любой строке файла — моут в первой, а могут и в 20, так как в приведенном выше примере, и, первым делом чего я хочу сделать, так это получить хотябы список полей, а он мне вместо заголовка поля выдает NULL.

Есть ли способ CASTить все поля запроса в VARCHAR без их конкретного указания, ну типа CAST(* AS VARCHAR(5000))?

Beltar

Опытный
**

Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: нет
Всего: 7

Возможно, имеет смысл накидать простейшую софтину в DelphiBuilderVS в которой просто открывать файл и указывать самому какие столбцы и с какой строчки импортировать и в какое поле БД. И пусть эта софтина все в базу кидает. Может этот процесс займет несколько минут, но ведь вы явно не по 50 файлов в день получаете. А пытаться все предусмотреть в том числе как будет названо поле с названием товара, например, «товар», «наименование» или даже «название фильма», если торгуете DVD-дисками, нереально.
Импорт в сам Excel текстовых файлов сделан именно так.

———————

Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.

Magnifico

Опытный
**

Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь

Репутация: 10
Всего: 17

есть еще опции HDR=Yes;IMEX=1;

http://connectionstrings.com/?carrier=excel

«HDR=Yes; считает первую строку заголовком полей
«IMEX=1;» интерпретирует данные как текст

———————

Всё  в  порядке   —   спасибо  зарядке  !

Magnifico

Опытный
**

Профиль
Группа: Участник
Сообщений: 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

Эксперт
***

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

Сработало!!!!

Beltar, Обработка на perl уже написана, толь проблема в том, что грузится очень долго, вот и ищу возможность быстрее обработать данные.

Itsys

Эксперт
***

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

Только обрадовался…. по условию я не знаю название листа, и мне надо выбрать первый из существующих. Как указать не название листа sheet1$, а его порядковый номер?

Magnifico

Опытный
**

Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь

Репутация: 10
Всего: 17

Код

Sub ПеребратьИменаЛистов()
Dim XLSFile As String
Dim i As Integer
i = 1
XLSFile = "C:filesnamesw.xls"

Workbooks.Open XLSFile

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

Эксперт
***

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

Вопрос только в том, как это запустить, а потом еще и желательнов запрос передать… мне сами именя листов не нужны, мне надо выбирать данные из первого листа в файле, может можно это как-нибудь задать не перебирая с помощью VB файл?

И так

Код

select * 
from openrowset('Microsoft.Jet.OLEDB.4.0'
, 'Excel 8.0; HDR=YES; IMEX=1;Database=C:my.xls'
, [1])

и так

Код

select * 
from openrowset('Microsoft.Jet.OLEDB.4.0'
, 'Excel 8.0; HDR=YES; IMEX=1;Database=C:my.xls'
, [sheet[1]$])

пробовал…

Magnifico

Опытный
**

Профиль
Группа: Участник
Сообщений: 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) 

Цитата
мне надо выбирать данные из первого листа в файле

Вот из за этой казалось мелочи придется сильно помучиться (от Vba не убежишь)

———————

Всё  в  порядке   —   спасибо  зарядке  !

Itsys

Эксперт
***

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

В общем решил я отказаться от этой затеи, т.к. срорее всего никакого убыстрения по сравнению с существующей обработкой на Perl я не получу.

Еще раз спасибо.

Magnifico

Опытный
**

Профиль
Группа: Участник
Сообщений: 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 +'$]'')'

exec(@sql)

———————

Всё  в  порядке   —   спасибо  зарядке  !

Itsys

Эксперт
***

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

Код

[quote=Magnifico, 19.3.2008,  23:11, post1447877]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_applicatio[/quote]

Насколько я понимаю, это все работает не очень быстро  smile

Magnifico

Опытный
**

Профиль
Группа: Участник
Сообщений: 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

будет уже второй…
Из этого следует лучше обращаться к книге по имени (надюсь её название хотя бы известно или тоже скрипт писать ,перебирая все 
эксель файлы?  smile  )

Код

Workbooks("Names.xls").Sheets(1).Name

в 2000  OLE Automation должно как то включаться (поиск)

———————

Всё  в  порядке   —   спасибо  зарядке  !

Itsys

Эксперт
***

Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 1
Всего: 34

Ну попробую…. насколько я знаю, OLE в принципе не самый быстрый способ, т.к. при его использовании загружается приложение сервер — это раз, считывается в память файл — это два и только потом можно из него чего-нибудь получить.

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) 0 Пользователей: « Предыдущая тема | MS SQL Server | Следующая тема »

Re: ошибка при подаче заявки (РТС Тендер)

На РТС, если не грузятся документы или не проходит заявка, помогает следующее: сохранить часть заявки, или всю как черновик, войти в черновики и уже оттуда отправлять. Несколько раз помагало.


sergej067
Завсегдатай
 
Сообщений: 129
Зарегистрирован: 24 сен 2014, 20:54
Благодарил (а): 0 раз.
Поблагодарили: 12 раз.
Роль: Специализированная организация
Пункты репутации: -1

У кого 23.03.2015 с 10.30-11.00 были проблеммы с РТС.

Сообщение sergej067 » 25 мар 2015, 16:01

23.03 в 10.45 у нас проходил аукцион. Вошли в личный кабинет, подготовились к подаче ценового предложения и стали ждать. Предолжения подовали 2 участника№2 и №4. На 11 минуте проведения торгов, после предложения 2участника 4-ый пять минут молчал. До конца подачи оставалось 4м. 45сек. Яуменьшаю предложение 2 учнастника 0,5% и нажимаю подать, появляется колёсико загрузки, секунд через 30 выскакивает сообщение: ошибка, ваше цена выше чем у 2 участника. Проверяю цену,наше цена на 0,5% меньше. вторая попытка, то же самое, третья попытка — то же. На 4 попытке стали проводить фиксацию. 4- попытка, тоже но сообщение выскочило другое: Кратковременная потеря связи. Мы так и не смогли подать ценовое предложение. К сожалению камеры не было снимали на телефон. Как только пошло доп время, я попробовал проверить ещё раз, через 5 сек выскочило сообщение: ошибка, вы не можите подать цену ниже че у 2-го участника. То есть площадка стала всё распозновать. Будем подовать в ФАС, но ввиду того что у нас не видео а фото, есть большие сомнения, что ФАС удовлетворит нашу жалобу. Но попробуем, фото прилагаю. Если у кого-то были в это время тоже проблеммы с подачей и есть видео, просьба сообщить. А на будующее, советую всем, иметь видеокамеру перед началом торгов. Кстати, такое встречал на РТС несколько раз, но тогда с нескольких попыток всё таки удалось подать.
Обратились в техподдержку, ответ получили стандартный: с нашей стороны сбоев в работе площадки не зафиксированно.

Вложения
Кадр 4.rar
Кадр 4
(499.66 KiB) Скачиваний: 343
Кадр 2.rar
КАдр 2
(504.17 KiB) Скачиваний: 273
Кадр 1.rar
Кадр 1
(398.75 KiB) Скачиваний: 355

sergej067
Завсегдатай
 
Сообщений: 129
Зарегистрирован: 24 сен 2014, 20:54
Благодарил (а): 0 раз.
Поблагодарили: 12 раз.
Роль: Специализированная организация
Пункты репутации: -1

Re: У кого 23.03.2015 с 10.30-11.00 были проблеммы с РТС.

Сообщение NafNaf » 25 мар 2015, 17:52

Площадка действительно не работала. Но подтверждений у меня нет. Аукцион начинался в 11.15, и в 11.15 она заработала. По этому скринов не пришлось делать.


NafNaf
Завсегдатай
 
Сообщений: 122
Зарегистрирован: 15 янв 2015, 10:50
Благодарил (а): 6 раз.
Поблагодарили: 4 раз.
Роль: Поставщик
Пункты репутации: 0

Re: У кого 23.03.2015 с 10.30-11.00 были проблеммы с РТС.

Сообщение jkmufACN » 26 мар 2015, 18:40

Площадка РТС-тендер 23.03.2015 в 11.00 не работала .Пытались подать предложение по аукциону , но пока «крутилось колесико»-минуты 3 прошло не появилось ни одного предложения и так до трех раз «кликали»,а перед истечением 10мин получили сообщение ошибка, вы не можете подать цену ниже ранее поданной, но на экране так и не высветилось не наше предложение ни кого-то еще.Результат-статус «аукцион признан не состоявшимся» и победа досталась участнику, который по протоколу рассмотрения первых частей заявок был под номером 1.


jkmufACN
Новичок
 
Сообщений: 1
Зарегистрирован: 26 мар 2015, 18:15
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Роль: Прохожий
Пункты репутации: 0

новая эцп РТС-Тендер

Сообщение vvarior » 05 май 2015, 18:55

Подскажите у меня кончилась эцп, я получил новую и одновременно закончилась аккредитация на РТС-тендере, не пойму как теперь переаккредитоваться и что впервую очередь делать. Зайти на свой акк могу только по логин/паролю, если чтото делать начинаю пишет зайдите по сертификату а он уже не рабочий…


vvarior
Завсегдатай
 
Сообщений: 194
Зарегистрирован: 23 июл 2013, 21:57
Откуда: Ростов-на-Дону
Благодарил (а): 13 раз.
Поблагодарили: 3 раз.
Роль: Поставщик
Пункты репутации: 0

Re: новая эцп РТС-Тендер

Сообщение Аллевтина » 05 май 2015, 19:13

vvarior писал(а):Подскажите у меня кончилась эцп, я получил новую и одновременно закончилась аккредитация на РТС-тендере, не пойму как теперь переаккредитоваться и что впервую очередь делать. Зайти на свой акк могу только по логин/паролю, если чтото делать начинаю пишет зайдите по сертификату а он уже не рабочий…

Позвоните на РТС, они вам лучше нас подскажут.


Аллевтина
Завсегдатай
 
Сообщений: 591
Зарегистрирован: 16 сен 2014, 18:49
Благодарил (а): 57 раз.
Поблагодарили: 57 раз.
Роль: Поставщик
Пункты репутации: 23

Re: новая эцп РТС-Тендер

Сообщение mrbalamut » 05 май 2015, 19:19

vvarior писал(а):Подскажите у меня кончилась эцп, я получил новую и одновременно закончилась аккредитация на РТС-тендере, не пойму как теперь переаккредитоваться и что впервую очередь делать. Зайти на свой акк могу только по логин/паролю, если чтото делать начинаю пишет зайдите по сертификату а он уже не рабочий…

если память не изменяет…. Сделать новую регистрация (новый логин, новый пароль), потом эцп привязать, а деньги ваши сами прикрутятся


mrbalamut
Завсегдатай
 
Сообщений: 303
Зарегистрирован: 12 авг 2013, 18:02
Благодарил (а): 0 раз.
Поблагодарили: 24 раз.
Роль: Поставщик
Пункты репутации: 23

Ошибки импорта из Excel и их решения.

Раздел Импорт из 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.
Чистка реестра Windows

Что значит ошибка перенос в excel

Добавить список url можно вручную, XLSX-файлом или ссылкой на XML-карту сайта. Отчеты выгружаются в форматах HTML и XLSX. Первые 500 запросов — бесплатно. Все нюансы работы с инструментом мы описали в гайде.

Ошибка разбора XML или XML Parsing Error в RSS-ленте, решения проблемы

Открыв, RSS ленту своего сайта видишь, что ленты нет, а браузер сообщает об ошибке. Как мне удается вернуть «на место», «отвалившуюся» RSS ленту я и расскажу дальше.

Примечание: Хочу поправиться и замечу, что неисправности фида не валятся с неба. Скорее всего, это результат установки нового плагина или ваше изменение, некоторых файлов в шаблоне. Так как, для формирования фида используется язык разметки XML, который имеет строгие правила синтаксиса, то любое изменение в файлах, которые не влияют на работу сайта, могут «отстегнуть» RSS.

Для исправления ошибки, я обычно делаю следующие шаги, причем исправление фида может произойти на любом шаге.

Примечание: Вообще эта синтаксическая ошибка называется ошибка разбора XML или XML Parsing Error. В разных браузерах она показывается по-разному. Например, в Chrome:

Поиск – Ошибка разбора XML или XML Parsing Error в RSS-ленте

Предположительно, ошибка разбора появляется из-за пробельных символов (пробел, новая строка, табуляция) появившихся в коде WordPress перед декларацией XML.

Для начала, попытаемся устранить ненужные пробелы в коде

Не помогло, или не хочется лазить по коду, воспользуйтесь плагином: Fix RSS Feed WordPress. Хоть и плагин не протестирован на версии 3.8, вполне может помочь в восстановлении ленты RSS.

Данный плагин не обновлялся 2 года. Скорее всего, он уже не поддерживается и может быть несовместим с текущими версиями WordPress.

Плагин установите на сайт любым из способов установки плагинов. После активации плагина, откройте его и запустите процесс исправления. Если проблема неработающего канала RSS в лишних пробелах, этот плагин должен помочь.

Исправить Rss поток WordPress.Как сделать сайт WP WordPress Fix Rss Feed ‹ WordPress.Как сделать сайт WP — WordPress

Если плагин Fix RSS Feed WordPress не помог, возможен конфликт одного из плагинов. Попробуйте, отключать в Консоли → Плагины → Установленные, последовательно каждый активный плагин, проверяя работоспособность ленты RSS.

Ошибки будут подсвечены желтым цветом. Ошибки связанные не с синтаксисом файлов, нужно решать для каждого конкретного случая отдельно.

Похожие посты:

2 комментария к “Ошибка разбора XML или XML Parsing Error в RSS-ленте, решения проблемы”

Это ведь уже не про RSS? по крайней мере убирать пробелы не помогло

По вопросу я не понял, после чего была такая ошибка.
Вероятно вы что-то импортируйте (контент, товары) при помощи плагина импорта.
Если плагин импорта тестирован на вашей версии, я бы сначала отключил другие плагины сайта и повторил импорт.
Если бы это не помогло, написал в suport хостинга.

Добавить комментарий Отменить ответ

Знайка, самый умный эксперт в Цветочном городе

Мнение эксперта

Знайка, самый умный эксперт в Цветочном городе

Если у вас есть вопросы, задавайте их мне!

Задать вопрос эксперту

Предположительно, ошибка разбора появляется из-за пробельных символов пробел, новая строка, табуляция появившихся в коде WordPress перед декларацией XML. Если же вы хотите что-то уточнить, я с радостью помогу!

Я продолжаю получать сообщение об ошибке. Это ошибка
Не уверен, что это подходящее место для этого или нет, если нет, я извиняюсь. Изначально продолжал подниматься, когда я был на ebay, теперь случается случайным образом.

Исправить ошибку Parser конфигурации

Бесплатная версия ограничена 500-ми url. В платной (лицензию можно купить на год) количество страниц для парсинга не ограничено, и она имеет гораздо больше возможностей. Среди них — парсинг цен, названий и описаний товаров с любого сайта. Как это сделать, мы подробно описали в гайде.

Добрый день! Есть задача распарсить 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 необычный и есть вырезанные ячейки, совмещенные ячейки/строки, но не понимаю как побороть данную ошибку.

Комментарии

Виктор, 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://… Но сама ссылка рабочая и по ней картинка замечательно открывается. ??

  • Не удалось загрузить файл повторите попытку или сообщите об ошибке
  • Не удалось загрузить сообщение об ошибке инстаграм
  • Не удалось загрузить систему так как файл системного реестра отсутствует или содержит ошибки
  • Не удалось загрузить систему так как критически важный драйвер отсутствует или содержит ошибки
  • Не удалось загрузить предметы вашего инвентаря ошибка запроса кс го маркет