Список форумов BOSSForum.RU - Форум. БОСС-Кадровик
Независимый форум, посвященный системе БОСС-Кадровик
и всему, что с ней связано
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Загрузка из Excel в Босс данных, большой объем
На страницу Пред.  1, 2, 3
 
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> X-язык
Предыдущая тема :: Следующая тема  
Автор Сообщение
Denis



Зарегистрирован: 01.06.2011
Сообщения: 39

СообщениеДобавлено: Ср Сен 19, 2012 15:24    Заголовок сообщения: Ответить с цитатой

эт означает что без вариантов и вытащить значения таким способом не получится?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mike
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 07.04.2011
Сообщения: 255

СообщениеДобавлено: Ср Сен 19, 2012 16:33    Заголовок сообщения: Ответить с цитатой

Да вот не знаю, если честно...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Denis



Зарегистрирован: 01.06.2011
Сообщения: 39

СообщениеДобавлено: Ср Сен 19, 2012 16:58    Заголовок сообщения: Ответить с цитатой

Ладно, буду думать иные варианты

Спасибо
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Lidiya



Зарегистрирован: 17.10.2011
Сообщения: 9

СообщениеДобавлено: Вт Сен 25, 2012 11:36    Заголовок сообщения: Ответить с цитатой

Добрый день!
А у меня при выполнении данного кода выдает ошибку
Nemoxur писал(а):
Код:
Alias last_row as Long;
execute xOcxFree(*);
ALIAS FileToOpen = @@xFile(Dlgopen "","",1,"Worksheet Files (*.xls)|*.xls||; *.xls","Открыть файл для импорта") AS string;
IF FileToOpen == '' THEN error;
ADODB.Connection as AutoCon;
ADODB.Recordset as AutoSet;
Excel.Application as Excel;
AutoCon.Open('@@xUtil{dsq}');
AutoSet.MaxRecords = 0;
AutoSet.CursorLocation = 1;
Excel.Workbooks.Open('FileToOpen');
Excel.Worksheets(1).Activate;
Execute xSql{$
DELETE FROM user_imp_excel
};
execute xocx{
last_row = Excel.ActiveSheet.Cells.SpecialCells(11).Row;
};

Execute xocx{
AutoSet.Open('user_imp_excel',:AutoCon,0,3,2);
};
local vb.Connection==&AutoCon;
local vb.DestTable==&AutoSet;
local vb.Excel==&Excel;
local vb.last=last_row;
vb{
For r = 1 To last
DestTable.AddNew
DestTable("str1") = Excel.ActiveSheet.Cells(r,1)
DestTable("str2") = Excel.ActiveSheet.Cells(r,2)
DestTable("str3") = Excel.ActiveSheet.Cells(r,3)
DestTable("str4") = Excel.ActiveSheet.Cells(r,4)
DestTable("str5") = Excel.ActiveSheet.Cells(r,5)
DestTable("str6") = Excel.ActiveSheet.Cells(r,6)
DestTable.MoveNext
Next
DestTable.UpdateBatch
};
AutoSet.Close;
AutoCon.Close;
Excel.Workbooks.Close;
execute xOcxFree(AutoSet,AutoCon,Excel);
RETURN Импорт был произведен успешно!;
browser{select str1,str2,str3,str4,str5,str6 from user_imp_excel;};


сама ошибка:
"Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности, проверьте значения всех состояний OLE DB."
ругается именно на DestTable("str1") = Excel.ActiveSheet.Cells(r,1).
Кто-нибудь может помочь?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
zhenya17



Зарегистрирован: 04.02.2009
Сообщения: 190
Откуда: Кемерово

СообщениеДобавлено: Пт Сен 28, 2012 13:29    Заголовок сообщения: Ответить с цитатой

Mike писал(а):
Вот оно что...
Ну сори тогда, я по сути гадал, так как проверить у меня не на чем =)
Хоть бы кофейную гущу использовал. Может, толку бы больше было Very Happy
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Spartak



Зарегистрирован: 18.03.2010
Сообщения: 180

СообщениеДобавлено: Вт Фев 26, 2013 08:40    Заголовок сообщения: Ответить с цитатой

Можно так попробовать:

Excel.Application as Excel;
vb{
Dim Ex
Set Ex = GetObject(, "Excel.Application")
Dim Sh
Set Sh = Ex.ActiveSheet
};
return @@vb{Sh.Cells(2,2).Value};
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Green



Зарегистрирован: 20.09.2013
Сообщения: 32

СообщениеДобавлено: Вс Дек 29, 2013 13:02    Заголовок сообщения: Ответить с цитатой

Я вот так делаю, норм работает)

vb.(:i){(i);
numtab = sh.cells(i, 2 ).value
fio = sh.cells(i, 3 ).value
dtb = sh.cells(i, 5 ).value
pay1 = sh.cells(i, 8 ).value
pay2 = sh.cells(i, 9 ).value
pay3 = sh.cells(i, 10).value
pay4 = sh.cells(i, 11).value
pay5 = sh.cells(i, 12).value
pay6 = sh.cells(i, 13).value
pay7 = sh.cells(i, 15).value
pay8 = sh.cells(i, 16).value
pay9 = sh.cells(i, 17).value
}; --vb

alias numtab == vb.numtab;
alias fio == vb.fio;
alias dtb == vb.dtb;
alias pay1 == vb.pay1;
alias pay2 == vb.pay2;
alias pay3 == vb.pay3;
alias pay4 == vb.pay4;
alias pay5 == vb.pay5;
alias pay6 == vb.pay6;
alias pay7 == vb.pay7;
alias pay8 == vb.pay8;
alias pay9 == vb.pay9;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
tveritin



Зарегистрирован: 26.01.2016
Сообщения: 180
Откуда: Санкт-Петербург

СообщениеДобавлено: Пт Дек 09, 2022 10:25    Заголовок сообщения: Ответить с цитатой

Всё же метод считывания данных через ODBC DSN имеет ряд существенных недостатков:
1. Ограничения по формату, только xls определенных версий, xlsx вообще не понимает
2. Имя листа задается жестко
3. Надо каждому пользователю настраивать ODBC DSN for_xls или другой

Я для себя использую метод:

Код:
let FileName = '@@xFile(dlgopen ,"",0x8000c,"MS Excel Files (*.xls*)|*.xls*","Выберите файл ")';
if 'FileName' == '' then  error;

con;

Excel.Application as Excel;
Excel.Visible=false;
Excel.Workbooks.Open(FileName[""]);

VB {
Dim Ex
Dim Sh
Set Ex = GetObject(,"Excel.Application")
Set Sh = Ex.Worksheets(1)
dim n
dim f1
dim f2
dim f3
dim f4
dim f5
dim f6
};

Con Считываем данные из Excel;

alias vb.n:=2;

while {0 == 0} then
{

   vb {
      f1 = Sh.Cells(n,1).Text
      f2 = Sh.Cells(n,4).Text
      f3 = Sh.Cells(n,5).Text
      f4 = Sh.Cells(n,6).Text
      f5 = Sh.Cells(n,7).Text
      f6 = Sh.Cells(n,8).Text
      n = n + 1
    };

   alias _str1 == VB.f1; --Num_tab
   alias _str2 == VB.f2; -- вид
   alias _str3 == VB.f3; -- тип
   alias _str4 == VB.f4; -- с
   alias _str5 == VB.f5; -- по
   alias _str6 == VB.f6; -- коммент

   if  rtrim(_str1['']) = '' and rtrim(_str2['']) = '' and rtrim(_str3['']) = ''
   and rtrim(_str4['']) = '' and rtrim(_str5['']) = '' and rtrim(_str6['']) = '' then goto _out;
};

Проглатываются любые Excel-файлы. xls, xlsx, xlsm, xlt*
Обращение к листу как по номеру, так и по имени.
Но, к сожалению, в базовых объектах в таком виде он почему-то не применяется.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
superjek



Зарегистрирован: 04.04.2022
Сообщения: 25

СообщениеДобавлено: Пт Дек 09, 2022 17:33    Заголовок сообщения: Ответить с цитатой

1) Странно, у нас xlsx проглатывает. Видимо зависит от используемого драйвера
2) Пользователи работают на терминале, настроили один раз системный DSN - у всех все работает.
3) скорость импорта через ODBC быстрее на больших файлах.
4) Если нормальный Excel - не нужно конвертировать из строки в типы данных. Но нормальный он не всегда Very Happy

Из минусов - на некоторых Excel драйвер с ума сходит и по кругу данные загружает, пока в ошибку не выпадет.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
tveritin



Зарегистрирован: 26.01.2016
Сообщения: 180
Откуда: Санкт-Петербург

СообщениеДобавлено: Пт Дек 09, 2022 17:36    Заголовок сообщения: Ответить с цитатой

XLSX теперь тоже открывается, драйвер доустановил.
Я, собственно, не против такого метода. Да и достаточно много импортов в рабочей базе, заточенных под for_xls.
Не устраивает по большей части только одно: Нельзя обращаться к листу книги по его номеру.

Код:
Execute xLogin
{Open {DSN=for_xls;UID=1;PWD=1;},
scan #ss
SELECT *
FROM [filename].[График$] NO_HINT
execute
   { ... };


Можно ли обойти это, не меняя метод работы с excel-файлом?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> X-язык Часовой пояс: GMT + 4
На страницу Пред.  1, 2, 3
Страница 3 из 3

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Pоwerеd by рhpВB © 2001, 2005 рhpВB Grouр
Русская поддержка phрВB
Rambler's Top100 Рейтинг@Mail.ru Список форумов BOSSForum.RU