|
ADO + xlsx + Win Server 2008 r2 x64 = бедаааа | ☑ | ||
---|---|---|---|---|
0
bacila
06.06.13
✎
03:07
|
Потратил я 3 дня и 3 ночи в попытках устранить трабл,а трабл в общем такой , надо загружать файлы экселевские, локально на ноутбуке все работает, но при при переносе на клиент - серверный вариант работать перестает (вернее загружает только xls а на xlsx валится при открытии) выдавая следующую ошибку: {ОбщийМодуль.ЧтениеИзЭкселя.Модуль(18)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Access Database Engine): External table is not in the expected format.
причем прошу заметить что accessdatabaseengine2010x64 я ставил, accessdatabaseengine2007 я тоже ставил собственно сам код: &НаСервере Функция ПарсингЭкселя(пФайл,Знач ПроверочныйСтолбец = 1, СтруктураКолонок = Неопределено, Знач НачСтрока = 2, Знач КонСтрока = 0) Экспорт Файл = ПолучитьИзВременногоХранилища(пФайл); ИмяФайла = ЭлектронныеДокументыСлужебный.ТекущееИмяВременногоФайла(); Файл.Записать(ИмяФайла); СтрокаСоединения = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = "+СокрЛП(ИмяФайла); //СтрокаСоединения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = "+СокрЛП(ИмяФайла); СтрокаСоединения = СтрокаСоединения + "; Extended Properties = "+"""Excel 12.0"+";HDR=NO;IMEX=1"";"; Connection = Новый COMОбъект("ADODB.Connection"); Connection.ConnectionString = СтрокаСоединения; Попытка Connection.Open(); // в этом месте возникает ошибка Помогите кто чем может, реально уже утомился..... |
|||
1
Stormicon
06.06.13
✎
06:51
|
Extended Properties="Excel 12.0 Xml;HDR=YES
|
|||
2
Stormicon
06.06.13
✎
06:54
|
Поменяй во-первых опции, а во-вторых, провайдер прописан в х64 консоли или х86 ?
|
|||
3
Stormicon
06.06.13
✎
06:56
|
microsoft.com/en-us/download/details.aspx?id=13255 - надеюсь стоит? там же на страничке указаны Extended Properties для xlsx.
|
|||
4
bacila
06.06.13
✎
09:46
|
(3) на ноуте и xls и xlsx грузит, на серваке только xls с такими параметрами.
microsoft.com/en-us/download/details.aspx?id=13255 да стоит (2) не понял про консоль |
|||
5
bacila
06.06.13
✎
09:51
|
(1) зачем мне заголовки включать?
|
|||
6
Serginio1
06.06.13
✎
11:13
|
||||
7
bacila
06.06.13
✎
11:37
|
(6) там задача решилась снеся 1 эксель установив другой, у меня эксель там вообще не стоит, и xls у меня читает , а xlsx нет.
|
|||
8
Gammi
06.06.13
✎
11:48
|
используй разные строки подключения на сервере и на ноутбуке. Найди нужную для 64-х сервера
|
|||
9
Serginio1
06.06.13
✎
11:53
|
(7) Ты плохо читал. Для работы в 64 разрядном приложении тебе нужно учтановить Microsoft Access Database Engine 2010 Redistributable
http://www.microsoft.com/en-us/download/details.aspx?id=13255 Предварительно снеся все что относится к 32 разрядному офису. В том числе и 32 разрядный Microsoft Access Database Engine 2010 Redistributable Две версии драйверов стоять не могут. По ссылке чел установил 64 Microsoft Access Database Engine 2010 Redistributable и поставил сверзу офис 2003. |
|||
10
Serginio1
06.06.13
✎
11:58
|
На клиенте тебе нужно ставить 32 разрядный вариант. Два варианта драйверов 32 и 64 разрядных не живут
|
|||
11
bacila
06.06.13
✎
13:53
|
(9) я все так и сделал (10) на клиенте мне вообще зачем драйвер, все делается на сервере
|
|||
12
Serginio1
06.06.13
✎
14:01
|
У тебя 1С сервер 32 разрядный?
|
|||
13
Serginio1
06.06.13
✎
14:04
|
А пути то у тебя правильные. Если доходит до Connection.Open(); у тебя проблема с путями. Учти что ты выполняешь код на сервере и пути должны быть относительно него и права доступа
|
|||
14
Serginio1
06.06.13
✎
14:08
|
||||
15
Serginio1
06.06.13
✎
14:14
|
У меня
СтрокаПодключения = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = "+ИмяФайла; СтрокаПодключения = СтрокаПодключения + "; Extended Properties = "+"""Excel 12.0"+";HDR=NO;IMEX=1"";"; АДОСоединение=Новый COMОбъект("ADODB.Connection"); АДОСоединение.ConnectionString=СтрокаПодключения; АДОСоединение.ConnectionTimeout = 15; АДОСоединение.CursorLocation = 3; // Подключаемся Попытка АДОСоединение.Open(); Исключение Сообщить(ОписаниеОшибки()); Сообщить ("Невозможно подключится к Microsoft Excel Driver!!! |Возможно файл ["+ИмяФайла+"] открыт другим пользователем."); Возврат Неопределено; КонецПопытки; |
|||
16
Serginio1
06.06.13
✎
14:25
|
http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/57cb3121-755d-4cd5-8cda-a0630cbf535b/
Я установил пакет MSXML 6.0 на Win 2003 Server и что сделали свое дело. |
|||
17
bacila
06.06.13
✎
14:32
|
(12) сервер x64
(13) посмотри код внимательнее, я получаю файл в двоичном виде сохраняю его на сервере и потом с ним работаю (16) MSXML 6.0 тоже ставил говорю же уже уйму вариантов перепробовал |
|||
18
bacila
06.06.13
✎
14:36
|
(14) читаю, букв много ))
|
|||
19
Serginio1
06.06.13
✎
14:40
|
ЭлектронныеДокументыСлужебный.ТекущееИмяВременногоФайла();
На каталог есть параметры Эксель\Центр управления безопасностью\Надежные расположения |
|||
20
Serginio1
06.06.13
✎
14:43
|
(18) Там расположение по ключам должно быть Office14 \ ACEOLEDB.DLL
Вы должны быть в состоянии решить эту проблему, выполнив ремонт установке офисного или Access. Кроме того, можно изменить раздел реестра изменения DLL путь, чтобы соответствовать вашей версии Access. Access 2007 следует использовать OFFICE12, Access 2010 - Office14 и доступе 2013 - OFFICE15 (ОС: 64bit офис: 64bit) или (ОС: 32bit офис: 32bit) Ключ: HKCR \ CLSID \ {3BE786A0-0366-9434-4F5C-25CF162E475E} \ InprocServer32 \ Параметр: (По умолчанию) Данные значения: C: \ Program Files \ Common Files \ Microsoft Shared \ Office14 \ ACEOLEDB.DLL (ОС: 64bit офис: 32bit) Ключ: HKCR \ Wow6432Node \ CLSID \ {3BE786A0-0366-9434-4F5C-25CF162E475E} \ InprocServer32 \ Параметр: (По умолчанию) Данные значения: C: \ Program Files (x86) \ Common Files \ Microsoft Shared \ Office14 \ ACEOLEDB.DLL |
|||
21
bacila
06.06.13
✎
14:59
|
(20) ну я так и понял примерно, спасибо , за последнее время это реально какая то новая инфа и вариант.
|
|||
22
Serginio1
06.06.13
✎
15:05
|
Еще при записи в xlsx нужно явно указать Extended Properties=Excel 12.0 Xml;
может и для чтения поможет |
|||
23
bacila
06.06.13
✎
15:05
|
(20) только я чет не совсем понял, как в итоге то должно быть если уменя 1с сервер x64 и odbc драйве x 64
|
|||
24
bacila
06.06.13
✎
15:06
|
(22) я не записываю, а локально при чтении (на ноуте) когда писа xml отказывалось читать
|
|||
25
Serginio1
06.06.13
✎
15:09
|
Должен быть C: \ Program Files \ Common Files \ Microsoft Shared \ Office14 \ ACEOLEDB.DLL
|
|||
26
bacila
06.06.13
✎
15:28
|
у меня нет таких веток НО нашел такой раздел HKEY_CLASSES_ROOT\Microsoft.ACE.OLEDB.12.0\CLSID где как раз указан этот ключ
|
|||
27
bacila
06.06.13
✎
15:29
|
{3BE786A0-0366-4F5C-9434-25CF162E475E}
|
|||
28
bacila
06.06.13
✎
15:29
|
может просто самому создать?
|
|||
29
Serginio1
06.06.13
✎
15:38
|
Тебе нужен Найди где у тебя ACEOLEDB.DLL и если там не Office14 переделай на Office14 соответственно папка такая должна бытью Ил просто удали и заного установи драйвер отсюда http://www.microsoft.com/en-us/download/details.aspx?id=13255
|
|||
30
bacila
06.06.13
✎
17:12
|
(29) да я его уже раз 5 переустанавливал, именно этот
|
|||
31
bacila
06.06.13
✎
17:16
|
HKEY_CLASSES_ROOT\CLSID\{3BE786A0-0366-4F5C-9434-25CF162E475E}\InprocServer32 = C:\Program Files\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL
вот нашел :( |
|||
32
Serginio1
06.06.13
✎
17:31
|
То есть ключ правильный? А просто файл экселем то открывается? Проверь на загрузку заведомо валидного файла
|
|||
33
bacila
06.06.13
✎
17:40
|
ну на другой машине открывается, да и я не один файл пробовал
|
|||
34
Serginio1
06.06.13
✎
18:00
|
Я про то что вместо
Файл = ПолучитьИзВременногоХранилища(пФайл); ИмяФайла = ЭлектронныеДокументыСлужебный.ТекущееИмяВременногоФайла(); Файл.Записать(ИмяФайла); попробовать. ИмяФайла=ВПутьКВалидномуФайлу; |
|||
35
bacila
10.06.13
✎
01:29
|
(34) Решил я забить пока что на это, надоело
|
|||
36
Reaper_1c
10.06.13
✎
01:43
|
xlsx - это zip с нулевым сжатием набитый XML-ками. Уже сто лет в интенетах лежат готовые обработки для работы с ним без всяких ADO, COM и прочего...
|
|||
37
bacila
10.06.13
✎
02:26
|
(36) метод нужен универсальный для чтения любых экселей
|
|||
38
bacila
10.06.13
✎
02:27
|
Задача решена, добавлены в ручную соответсвующие ветки из 20 ого поста, и все заработало Serginio1-у большое спасибо за то что натолкнул на мысль, хоть и не напрямую
|
|||
39
bacila
11.06.13
✎
14:26
|
теперь другая проблема, xlsx загружается без лидирующих нулей
|
|||
40
Jaap Vduul
11.06.13
✎
14:39
|
(39)
Это, скорее всего, просто форматирование соответствующее в ячейках. Так что просто форматируй аналогичным образом. |
|||
41
bacila
11.06.13
✎
14:51
|
ну 1с так сохраняет , криво как то в каком то неведомом формате
|
|||
42
bacila
11.06.13
✎
14:52
|
когда ставишь у ячейки формат текст 0 исчезают в экселе, в итоге фигня получается
|
|||
43
bacila
11.06.13
✎
14:53
|
потому что эти нули нужны
|
|||
44
Jaap Vduul
11.06.13
✎
14:55
|
Имелось в виду форматировать уже на стороне 1цэ, ну или в момент выборки, в запросе.
|
|||
45
Serginio1
11.06.13
✎
16:52
|
А ты в 1С поставь ф ячейке содержит значение и тип значения строка
|
|||
46
bacila
11.06.13
✎
21:03
|
(45) да я то не сохраняю из 1с, это всякие прайсы и тд, которые присылают контрагенты
|
|||
47
bacila
11.06.13
✎
21:04
|
причем когда до этого делал загрузку локально на ноуте, нули загружались, но в данный момент уже радостно что на серваке хоть как то работает
|
|||
48
romansun
11.06.13
✎
23:17
|
||||
49
Serginio1
13.06.13
✎
10:39
|
Попробуй IMEX=1;ImportMixedTypes=Text
http://social.msdn.microsoft.com/Forums/en-US/fordataru/thread/4585d864-cb04-4112-8fef-6445cdb66ba1 |
|||
50
Serginio1
13.06.13
✎
11:52
|
Или попробуй
АДОЗапись.Open("Select ''+F1 as A from ["+ИмяЛиста+"$]"); Где F1 это первая колонка A '' должен указать, что строка. С кастами у меня не получилось |
|||
51
Serginio1
14.06.13
✎
16:45
|
Кстати из соседней ветки v8: Есть ли способ оптимизации скорости при обращении к строкам xls?
АДОЗапись.Open("Select ''+Format(F1,'text') as Цвет from ["+ИмяЛиста+"$]"); |
|||
52
Eugeneer
14.06.13
✎
16:55
|
Можете не долбится даже.
Все решено от и до включая работы всех форматов во всех режимах 1С - тонкий, толстый, вэб-клиент, Линус и вин сервера 32/64. И так далее. Все проблемы с лидирующими нулями и прочими гемморами, включая файлы с кривыми символами и так далее и так далее http://subsystems.ru/catalog/27/159/ |
|||
53
Eugeneer
14.06.13
✎
16:58
|
Адо не будет работать нормально - уже прожевано на протяжении 4 лет.
|
|||
54
Serginio1
14.06.13
✎
17:15
|
(53) Да нет вариант
АДОЗапись.Open("Select ''+F1 as A from ["+ИмяЛиста+"$]"); Читает ведущие нули где '' это пара одинарных ковычек |
|||
55
bacila
19.06.13
✎
13:57
|
да беда в том что читает то он как текст, а 1с сохраняет в каком то смешенном формате, проблема в драйверах , мучаться не захотелось, все читаю в базе и загружаю убирая лидирующие нули там где они есть,чтоб привести к одному формату, а то мучаться времени нет
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |