К списку форумов К списку вопросов
ADO. Простой вопрос.
Beholder
22.09.2004 - 14:50
Доброго всем времени суток. Возникла проблема. Выгружаем данные из 1С(самописная конфа) в ексель. Затем из екселя посредством АДО всандаливаем в 1С. примерно так:
  db=CreateObject("ADODB.Connection");
  rs=CreateObject("ADODB.Recordset");
  db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+имяфайла+";Extended Properties=""Excel 8.0;""";
  db.Open();
  rs.ActiveConnection = db;
  rs.CursorType = 3;
  rs.LockType = 2;
  rs.Source = "Select * from [sheet1$]";
  rs.Open();
.....................
Так вот, в екселевском файле нет явно выраженного листа. Т.е. есть только таблица. Соответственно не работает метод rs.Source = "Select * from [sheet1$]";, т.к. Sheet1 попросту нет. Пробывал Activesheet - тож ругается.
Зы. Сильно не бейте, проблема возникла часа 2 назад, а я в ado не силен...
Тухлыи
1 - 22.09.2004 - 14:52
В файле должен быть хоть один лист.
Gloom
2 - 22.09.2004 - 14:56
(0)В ёкселе - меню "Сервис" - Параметры - Вид - флаг "ярлычки листов"
Beholder
3 - 22.09.2004 - 14:56
Дык есть, только он внизу не показан. То етсь ты открываешь книгу в екселе внизу слева написано "лист1, лист2, лист3". А в моем случае такого нет. Есть один лист и он никак не обозначен. Можно конечно обозначить его через (ексель) Окна - новое. Тогда он, конечно, становится лист1, но каждый раз лазить туда...
Beholder
4 - 22.09.2004 - 15:01
2 Gloom - ага, фиг вам называется, старинная индейская изба. Как было так и остается.
Gloom
5 - 22.09.2004 - 15:03
(4)В нижнем левом углу книги, под номерами строк, пимпочка должна была появиться. При наведении на неё указатель мыши меняет форму. Взять эту пимпочку и тянуть вправо до появления чувства глубокого удовлетворения...
Beholder
6 - 22.09.2004 - 15:07
5 - Ну да, появились, но при каждой загрузке так делать? Нет ли метода типа activeSheet?
Gloom
7 - 22.09.2004 - 15:15
(6)Нет, надо или имя листа, или имя диапазона указывать. Не пойму, если вы сами листы из 1цэ получаете, почему не знаете как они называются...
Beholder
8 - 22.09.2004 - 15:23
Получаем файл не мы, а козлы с другого города. Они нам его по электронке присылают каждые 3 часа, затем это все и грузится. А к ним не можем дозвониться. Поэтому я и спросил. Так бы сказал им чтоб файлы нормальные делали. Фу-уф.
Gloom
9 - 22.09.2004 - 15:25
(8)Ну, тогда определяйте название прграммно через OLE или через ADOX...
Vladis
10 - 22.09.2004 - 15:39
Ну если не видно его названия это не значит что названия нет.
Я поэксперементировал, название листа всегда sheet1 (у меня английская версия Экселя)
Vladis
11 - 22.09.2004 - 15:47
Вот так можно получить список листов
обЭксел = СоздатьОбъект("Excel.Application");
For i = 1 To обЭксел.Workbooks(CurStrCB_Books).Sheets.Count Do
  Message(обЭксел.Workbooks(CurStrCB_Books).Sheets.Item(i).Name);
EndDo;
Здесь CurStrCB_Books номер книги.
Beholder
12 - 22.09.2004 - 16:01
Спасибо всем! Особенно Владису и Глуму :-).

К списку вопросов на форуме 1C

>>