Имя: Пароль:
1C
 
Из Excel в dbf
0 admin1s
 
03.03.09
09:25
Привет всем уважаемым участникам форума!
Проблема такая, когда то делал экспорт из Excel в dbf, для использования dfb в 1С. Делал вроде через Delphi 7, используя DataBase desktop. Сейчас стоит Delphi 2009 там нет DataBase Desktop. Как можно выкрутиться быстро из этой ситуации?

PS как вариант можно просто считать из Excel в справочник, подскажите код ,как подключиться к Excel. Спасибо
1 Дуб
 
03.03.09
09:26
2 Sadovnikov
 
03.03.09
09:27
(0) ВК RiK_SQL

ЗагрузитьТаблицуИзЕкселя(<?>,,,,,,);
Синтаксис:
ЗагрузитьТаблицуИзЕкселя(<ИмяФайла>,<ТаблицаЗначений>,<Область>,<СписокНомеровКолонок>,<ИмяЛиста>,<СсылкаНаExcel>,<ЗакрыватьExcel>)
Назначение:
Считывает в таблицу значений данные из файла Excel.
Возвращает: 1 в случае удачного выполнения метода, 0 - в случае ошибки.
Параметры:

<ИмяФайла> - строка, файл, из которого будут извлекаться данные.
<ТаблицаЗначений> - ПУСТАЯ таблица значений, в которой будут возвращены данные из файла. Колнки результирующей таблицы будут иметь названия Колонка<НомерКолонкиВТаблицеЗначений> (например - Колонка2).
<Область> - строка, адрес области (ЛевыйВерхнийУгол : ПравыйНижнийУгол, либо числами в формате <КолонкаНачала|СтрокаНачала|КолонкаКонца|СтрокаКонца>) из которой необходимо считать данные. Если в адресе правого нижнего угла вместо количества строк указан знак ? - будут считаны все строки до конца файла. Например: 'A1:D?'.
<СписокНомеровКолонок> - необязательный параметр, список значений, содержащий номера колонок результирующей выборки, которые необходимо поместить в таблицу значений. Если данный параметр опущен - в ТЗ будут помещены все колонки выборки.
<ИмяЛиста> - необязательный параметр, строка, имя листа Excel. Значение по умолчанию - 'Лист1'.
<СсылкаНаExcel> - необязательный параметр, ссылка на созданный в 1С объект Excel.Application. Если этот параметр не пустой, компонента Excel создавать не будет, а будет пользоваться переданным ей из 1С.
<ЗакрыватьExcel> - необязательный параметр, 1 - после выполнения метода Excel будет закрыт, 0 - нет.

Пример:

   ТабТемп = СоздатьОбъект(''ТаблицаЗначений'');
   Спис    = СоздатьОбъект(''СписокЗначений'');
   Спис.ДобавитьЗначение(2);
   Спис.ДобавитьЗначение(4);
   Сообщить(ОбъектП.ЗагрузитьТаблицуИзЕкселя(''C:\Temp\Удалить\Все файлы для Паши Зотова\ПоляТаблицыСкоринга1.xls'',ТабТемп,''A1:D?'',Спис,''СправочникиДляПолей''));

Пример 2:
Процедура ЗагрузкаРиК_1С()
   ОбъектП.ОткрытьОкноСообщения(''Загружаем данные...'');
   НачВыгрузки = _GetPerformanceCounter();
   ТемпТаб    = СоздатьОбъект(''ТаблицаЗначений'');
   
   Попытка
       // запускаем Excel-Server
       ExProg = СоздатьОбъект(''Excel.Application'');
   Исключение      
       Сообщить(ОписаниеОшибки(),''!'');
       Возврат;
   КонецПопытки;
   Попытка
       НужныйФайл  = ExProg.Workbooks.Open(СокрЛП(ФайлДляЗагрузки));
       НужныйЛист  = НужныйФайл.Sheets(''Лист1'');
       ExProg.Visible    = 0;
   Исключение
       Предупреждение(''Произошла ошибка при загрузке информации !!!'');
       Возврат;
   КонецПопытки;
   
   Если ОбъектП.ЗагрузитьТаблицуИзЕкселя(СокрЛП(ФайлДляЗагрузки),ТемпТаб,''A1:AX?'',,,ExProg) <> 1 Тогда
       ОбъектП.ЗакрытьОкноСообщения();
       Предупреждение(''Произошла ошибка при загрузке информации !!!'');
       Возврат;
   КонецЕсли;

   КонВыгрузки = _GetPerformanceCounter();
   Сообщить(''Время загрузки РиК составило ''+Цел((КонВыгрузки-НачВыгрузки)/1000)+'' секунд'');
   
   ОбъектП.ЗакрытьОкноСообщения();
   //ТемпТаб.ВыбратьСтроку();
КонецПроцедуры
3 Привратник
 
03.03.09
09:29
Excel штатно умеет сохранять файлы в формате дбф
4 kalleka
 
03.03.09
09:29
(3) Ну кто мешает изобретать велосипед, даже полезно иногда))
5 Chum
 
03.03.09
09:34
(0) в екселе: Файл - Сохранить как... - Тип файла (dBase IV)

Что касаемо клюшек, то грузить туда можно и из екселя через оле, а не только через объект xbase если что...
6 Мулька
 
03.03.09
09:35
(0) Месье знает толк в извращениях :))
7 admin1s
 
03.03.09
09:57
из Excel можно сохранить в dBase IV, но файл не открывается в 1С!

Подскажите более простой и надежный способ, без извращеньев!
8 Мулька
 
03.03.09
10:01
(7) Что значит не открывается? Он читается и этого достаточно. А зачем из Экселя сохранять в ДБФ, что бы потом открывать его из 1С.
Почему Эксель сразу не открыть в 1С?
9 ДенисЧ
 
03.03.09
10:02
(7) А почему IV?
10 Chum
 
03.03.09
10:02
(7) ак ка ты его пытаешься открыть в 1с? О_о
11 Дуб
 
03.03.09
10:03
(7) не "не открывается в 1С", а "не открывается штатными средствами 1С". И открывается и читается совершенно замечательно :)
12 admin1s
 
03.03.09
10:17
хорошо, сохранил как в dBase4, нужно посмотреть поля или нет? Открываю прогой FildWin (для просмотра dbf файлов)- выдает ошибку, как поля считать, и занести в справочник 1с, не зная названий полей?
13 ДенисЧ
 
03.03.09
10:18
КоличествоПолей()
Синтаксис:
КоличествоПолей()
Назначение:
Возвращает количество полей в записи.

ОписаниеПоля(<?>,,,,)
Синтаксис:
ОписаниеПоля(<НомерПоля>,<НазваниеПоля>,<Тип>,<Длина>,<Точность>)
Назначение:
Возвращает в параметрах описание поля с заданным номером.
Параметры:
<НомерПоля> - номер поля для которого требуется получить описание,
<НазваниеПоля> - идентификатор переменной для названия поля,
<Тип> - идентификатор переменной для типа поля в соответствии с инструкциями CodeBase,
<Длина> - идентификатор переменной для длины поля,
<Точность> - идентификатор переменной для числа знаков после десятичной точки (только для числовых полей).
Подробнее см. в документации, глава ''Работа с базами данных DBF формата''
14 Мулька
 
03.03.09
10:19
(12) Здравствуй Света
15 Chum
 
03.03.09
10:23
(12) при сохранении в дбасе4 ты структуру файла блюдел? типа: первая строка - заголовки полей на инглише и не более 8 допустимых символов. Не должно быть пустых строк и т.д.?
16 Chum
 
03.03.09
10:24
>Достижения (опыт)    1С77,MSSQL2k
и другие страшные слова
17 Sadovnikov
 
03.03.09
11:01
Пипец...
18 у лю 427
 
03.03.09
11:34
а ф т а р - м у д а к.....

аткравенный....

P.S. сохранить как - ДБФ-III.  Эти файлы одноэсина прекрасно читает
19 admin1s
 
03.03.09
11:44
(18) на... иду урод!
20 у лю 427
 
03.03.09
11:54
Неужели? Сам уже идешь? Как в (19)?

P.S. формат ДБФ-4 одноЭсина не поддерживает.....
21 admin1s
 
03.03.09
16:59
(7) Почему Эксель сразу не открыть в 1С?
как можно сразу считать Excel в 1C?
22 Mikeware
 
03.03.09
17:02
"но если туп как дерево - родишься баобабом. И будешь баобабом тыщщу дет, пока помрешь."©
23 vde69
 
03.03.09
17:02
(20) ДБФ-4 поддерживает даже семерка (через АДО и небольшой патч реестра)
24 Мулька
 
03.03.09
17:06
(23) Прекрасно читает и через ХБэйс
25 vde69
 
03.03.09
17:09
(24) в лоб далеко не все, например фоксовый формат....
26 mrkorn
 
03.03.09
17:21
2007 эксель не поддерживает экспорт в dBase
27 admin1s
 
03.03.09
19:53
мля, вас не поймешь то поддерживает то нет....
есть нормальные ссылки на нормальный хэлп, на этом форуме ,киньте кому не трудно? Задолбался искать....
28 admin1s
 
03.03.09
19:53
PS мануал по теме...
29 у лю 427
 
03.03.09
20:10
Севда Гудратовна Гюльмамедова

"ДБФ-4 поддерживает даже семерка (через АДО и небольшой патч реестра)"

типично через.опное решение от вде69.
любит челаэк драть гланды как всегда, через одно место....


(21)
"Почему Эксель сразу не открыть в 1С?"


при 40 тыс строчек в экселе сохранить в ДБФ (программно, прямо из 1С) а потом протрясти ДБФ будет быстрее, чем просто трясти эксель...


(21)
"как можно сразу считать Excel в 1C?"


тетю Олю позвать западло?
30 у лю 427
 
03.03.09
20:12
(28) а хрен чищеный не надо? А то есть... Даром....
31 livard
 
04.03.09
02:22
db=CreateObject("ADODB.Connection");
   rs=CreateObject("ADODB.Recordset");
   db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+НазваниеФайла+";Extended Properties=""Excel 8.0;"+?(флХедер=1,"","HDR=NO;")+"IMEX=1;""";
   //db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+НазваниеФайла+";Extended Properties=""Excel 8.0;HDR=NO; IMEX=1;""";
   //HDR=NO - Имена полей имеют вид "F1, F2, F3..." то-есть буква "F" и порядковый номер колонки. Если данный параметр опустить
   // имена полей беруться из первой строки - для таблиц Экселя норма.
   db.Open();
   rs.ActiveConnection = db;
   rs.CursorType = 3; //3
   rs.LockType = 1;//2
   rs.Source = "Select * from ["+строка(test)+"$"+"]";
   rs.Open();
32 Sadovnikov
 
04.03.09
06:44
(29) "при 40 тыс строчек в экселе сохранить в ДБФ (программно, прямо из 1С) а потом протрясти ДБФ будет быстрее, чем просто трясти эксель" - Петь, ты не прав...
33 у лю 427
 
04.03.09
07:19
(32) Прав.... Ибо это верно для любой машины у клиентов, а твои решения с АДО или 1С++ у клиента могут
- не запуститься
- могут быть запрещены групповой политикой
- и т.д.
34 Sadovnikov
 
04.03.09
07:21
(33) Петь, фигню говоришь. Если у клиента такая картина, то надо админу с ноги в любое место да несколько раз.
35 у лю 427
 
04.03.09
07:36
Зря... не все вещи определяет свой админ....
есть клиенты, у которых голова в Мск и все диктуют оттель....
36 у лю 427
 
04.03.09
07:37
я, конечно, понимаю, что это маразм - но биться за правоту своей точки зрения бесплатно - да пошло оно в .опу....
37 Sadovnikov
 
04.03.09
07:38
(36) :))
38 у лю 427
 
04.03.09
07:39
накуй, накуй - пусть курятник распугивают тамошние идиоты... Мое дело сторона....
39 Sammo
 
04.03.09
08:00
(35) +100
40 Мулька
 
04.03.09
08:19
(29) А сразу в Экселе сохранить 40000 в ДБФ-4 тоже дольше будет? А вообще, я через буфер предпочитаю гонять загрузки/выгрузки.
41 Новичок
 
04.03.09
10:46
Мдя..ну наворотили то)) Из екселя в дбф с помощью делфи... сохранить ексел как дбф...(не всегда все хорошо проходит)
Ни...
Подключаемся к ексель, создаем пустой дбф с колонками нужными, а потом данные из екселя перекачиваем в дбф...

создание дбф
ДБФ1 = СоздатьОбъект("XBASE");    
   
 ДБФ1.ДобавитьПоле("NOMER","N",15,0);
 ДБФ1.ДобавитьПоле("DATA","D",10,0);    
 
ДБФ1.СоздатьФайл("аааа.dbf");
  ДБФ1.ЗакрытьФайл();    


заполнение дбф (есстесно в цикле)
 ДБФ1.Добавить();    
ДБФ1.УстановитьЗначениеПоля("DATA",б);// б -эт переменная с нужной инфой
ДБФ1.Записать();
42 Жан Пердежон
 
04.03.09
10:54
(0)
всегда сохранял в dbf из Excel - Сохранить как..
и всегда работало, что я делаю не так?
43 Has
 
04.03.09
12:03
(42)+1
хотя копейки могут потеряться
44 admin1s
 
04.03.09
13:26
Изречение: В умной беседе быть – ума прикупить, а в глупой – и свой растерять.

Спасибо, всем кто посчитал правильным ответить без выпендрежа, честь таким и хвала. А тем, флудильщикам-просто делать было нечего, да и сказать им особо нечего!