Имя: Пароль:
1C
1С v8
Загрузка из Экселя
0 Альбатрос
 
25.04.12
12:47
Кусок кода:

СтрЗапроса = "

   |SELECT *
   |FROM [A11:AF]
   |";
       
   Попытка
       RecordSet = Об_Конект.Execute(СтрЗапроса);
   Исключение
       Сообщить("Не удалось выполнить запрос к файлу Excel
       |"+ ОписаниеОшибки(),СтатусСообщения.Важное);
       Возврат;
   КонецПопытки;

   Пока НЕ RecordSet.EOF() Цикл    
       Сообщить(""+RecordSet.Fields(0).value);
       СпАрт.Добавить(Строка(RecordSet.Fields(0).value));
       RecordSet.MoveNext();    
   КонецЦикла;



Вопрос: Почему RecordSet.Fields(0).value это значения колонки "В", Как обратиться к колонке "А"?
1 etc
 
25.04.12
12:50
(0) Странный запрос. Разве после FROM не должно идти имя листа?
2 Альбатрос
 
25.04.12
12:51
(1) Нет, это через движок, у меня нет установленного екселя
3 aleks-id
 
25.04.12
12:51
(1) не должно. но вот после AF должно идти число обозначающее последнюю строку
4 Альбатрос
 
25.04.12
12:52
(3) Опытным путем определил, что если не указывать, то отрабатывается по последнюю строку, сколько бы их там не было. Что мне и нужно.
5 Альбатрос
 
25.04.12
12:55
Повторюсь. Загвоздка в том, что RecordSet.Fields(0).value это значения колонки "В". По идее ведь должна быть А.
6 etc
 
25.04.12
13:00
(1) так я и предполагал что ты через ADO делаешь.
7 etc
 
25.04.12
13:03
Я так делаю:

rs = Новый COMОбъект("ADODB.Recordset");
rs.CursorType = 0;
rs.LockType = 1;
rs.Open("SELECT * FROM ["+ИмяТаблицы+"]",dbCon);
8 Альбатрос
 
25.04.12
13:08
А я так:
СтрокаПодключения = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = E:\остатки.xls";
СтрокаПодключения = СтрокаПодключения + "; Extended Properties = "+"""Excel 12.0"+";HDR=NO;IMEX=1"";";
   Об_Конект = Новый COMОбъект("ADODB.Connection");

   Попытка
       Об_Конект.Open(СтрокаПодключения);
9 Альбатрос
 
25.04.12
13:10
Ну так кто подскажет все таки? Такое ощущени, что указаные строки являются не включаемыми в выборку, как сделать, чтоб они туда попадали?
10 etc
 
25.04.12
13:11
(9) может Execute как-то не так отрабаотывает? Попробуй через Open
11 Альбатрос
 
25.04.12
13:14
(10) Неее, в моем случае этот метод не пойдет, у меня .connection
12 etc
 
25.04.12
13:17
СтрокаПодключения = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = E:\остатки.xls";
СтрокаПодключения = СтрокаПодключения + "; Extended Properties = "+"""Excel 12.0"+";HDR=NO;IMEX=1"";";
   Об_Конект = Новый COMОбъект("ADODB.Connection");

   
   Об_Конект.Open(СтрокаПодключения);

   rs = Новый COMОбъект("ADODB.Recordset");
   rs.CursorType = 0;
   rs.LockType = 1;
   rs.Open("SELECT * FROM ["+ИмяТаблицы+"]", Об_Конект);

   Пока НЕ rs.EOF() Цикл    
       Сообщить(""+rs.Fields(0).value);
       СпАрт.Добавить(Строка(rs.Fields(0).value));
       rs.MoveNext();    
   КонецЦикла;
13 Альбатрос
 
25.04.12
13:29
(12) А как узнать имя таблицы?
14 Альбатрос
 
25.04.12
13:30
У меня ОпенОфис, там написано Лист 1 =)
15 aleks-id
 
25.04.12
13:35
выкладывай на депозит свой лист. будем пробовать
16 etc
 
25.04.12
14:17
(13) вот так:

rst = Новый COMОбъект("ADODB.Recordset");
rst = dbCon.OpenSchema(20);
СписокТаблиц = Новый Массив;
Пока НЕ rst.EOF Цикл
   СписокТаблиц.Добавить(rst.Fields("TABLE_NAME").Value);
   rst.MoveNext();
КонецЦикла;
rst.Close();
rst = Неопределено;

//получим имя первого листа файла
ИмяТаблицы = СписокТаблиц[0];
17 Альбатрос
 
25.04.12
14:24
(16) Спасибо, так заработало, но первую колонку все равно не берет
18 Альбатрос
 
25.04.12
14:24
Щас выложу таблицу, гляньте, я наверное чо нибудь туплю
19 Альбатрос
 
25.04.12
14:29
Хм... заработало... и такой вопрос сразу: если данные первой колонки пустые, она игнорируется выборкой что ли?
20 etc
 
25.04.12
14:31
(19) возможно
21 etc
 
25.04.12
14:32
(19) поэтому лучше конечно когда колонки именованные (первая строка таблицы)
22 etc
 
25.04.12
14:33
тогда ставишь HDR=YES и получаешь имена колонок
23 Альбатрос
 
25.04.12
14:40
(22) Спасибо всем за помощь!
AdBlock убивает бесплатный контент. 1Сергей