Имя: Пароль:
1C
 
1C Ворд и Эксель
Ø
0 ionn
 
29.09.05
12:13
Сделал обработку которая берет таблицу из Word и переносит ее в Excel, а потом уж работает с данными.
Так вот, я ничего лучше не придумал чем copy paste (выделяется таблица копируется и вставляется). Это естественно все очень долго, а главное, когда paste уже сработало excel продолжает обдумывать что ему подсунули, а обработка пытается выполнять следующие команды. И появляется окно: Сервер занят. Действие не может быть завершено, т.к. программа "Microsoft Excel" не отвечает на запросы. И кнопки "Переключиться" и "Повторить". Если после завершения вставки нажать Повторить,то все нормально сработает.
Как можно избежать появления этого окна, или может по-другому из Worda в Excel перегонять?
1C v77
1 callisto
 
29.09.05
12:26
задача загрузчика данных: взять из этого (например из Excel)
а не "перегонять" данные из формата в формат... и уже потом взять.
.
т.е. данные надо сначала в Excel сделать... и работать только с Excel
2 smaharbA
 
29.09.05
12:30
так ненадо делать, но раз сделал то в ехеле в начале переноса...
oExcel.Calculation = -4135;
oExcel.ScreenUpdating = 0;
После переноса...
oExcel.ScreenUpdating = -1;
oExcel.Calculation = -4105;
3 ionn
 
29.09.05
12:57
(1) Я бы с удовольствием работал только с Excel, но вот банк присылает свои отчеты в Worde :( А как работать с таблицами в Worde я не знаю.
(2) чёй-то не сработало, окошко снова вылезло
4 ionn
 
29.09.05
14:07
up
5 Гений самоучка
 
29.09.05
14:29
Может сделать так:
Сделай шаблон в ехселе, в нем макрос который с вордом работает и этот пасте выполняет.
И вызывай из 1с этот макрос.
У меня так работает - графики многочиселнные в екселе строит. и управление в обработку не возвращается.
А вообще с вордом разберись, там ничего сложного, так же как и в екселе.
Делаешь макрос с желаемыми действиями и его разбираешь.
6 smaharbA
 
29.09.05
14:36
НомерТабицы=1;
КоличествоСтрок=oWord.ActiveDocument.Tables(НомерТабицы).Rows.Count;
КоличествоКолонок=oWord.ActiveDocument.Tables(НомерТабицы).Columns.Count;
Для НомерСтроки=1 по КоличествоСтрок Цикл
  Для НомерСтолбца=1 по КоличествоКолонок Цикл
    Сообщить(oWord.ActiveDocument.Tables(НомерТабицы).cell(НомерСтроки,НомерСтолбца));
  КонецЦикла;
КонецЦикла;
7 ionn
 
29.09.05
14:39
Спасибо, а как вызвать макрос?
8 Гений самоучка
 
29.09.05
14:44
Точно не помню, что-то типа
Application.Run(имя макроса)
Сделай макрос с запуском другого макроса - посмотри :)
9 Young
 
29.09.05
15:55
(7) К вопросу "как вызвать макрос":
http://www.script-coding.info/MSOffice.html
10 ionn
 
30.09.05
13:04
Попробавл и макросом сделать и циклами пройтись, не получилось:
Работа макроса также вызвает окно "Сервер занят"
Если делать как (6) то получается очень долго, и чем дольше работает тем медленнее :(
11 smaharbA
 
30.09.05
13:09
Тебе просто пример дан, можно всю строку враз как текст читать...
12 smaharbA
 
30.09.05
13:12
А можно и асинхронный вызов их сделать, пусть макрос в ехеле весит, "рождаешь" макрос vbs из 1С и запускаешь его, недожидаясь окончания выполнения и все... Либо в томже оффисе класс при открытии выполняющий определенные действия, открытие пролетит для 1С незамеченным, офис начнет работать сам посебе, а ты в 1С можешь дальше кнопки жмакать...
13 ionn
 
30.09.05
14:37
что-то с чтением строки целиком у меня не получается пока,
а макрос я делал, это не помагает, т.к. мне нужно перегнать данные в Excel, сохранить файл, а потом подключиться к этому файлу через ODBC
14 smaharbA
 
30.09.05
14:43
Ты непонял, если надо, поднимай ветку в понедельник, может и сделаю...
15 ionn
 
03.10.05
07:35
up
16 smaharbA
 
03.10.05
07:43
Чуток позднее
17 ionn
 
03.10.05
14:03
up
18 ionn
 
04.10.05
07:16
up?
19 smaharbA
 
04.10.05
10:15
Отдам долг...
Вот тупенький метод...(А так, все...)
...
Процедура Ворд2Ексель()
Перем ИмяФайла,ИмяНачКаталога;
ФС.ВыбратьФайл(0,ИмяФайла,ИмяНачКаталога,,"Текст(*.doc)|*.doc",);
Стр="
|set Word=CreateObject(""Word.Application"")
|Word.Documents.Open("""+ИмяНачКаталога+ИмяФайла+""")
|set Excel=CreateObject(""Excel.Application"")
|Excel.Calculation = -4135
|Excel.ScreenUpdating = 0
|Excel.DisplayAlerts=0
|Excel.Workbooks.Add
|For i=1 to 100
|Excel.ActiveWorkbook.Worksheets.Add
|Next
|For i=1 to 100
|Word.ActiveDocument.Content.Copy
|Excel.ActiveWorkbook.Worksheets(i).Paste
|Next
|Excel.ActiveWorkbook.SaveAs(""C:\123.xls"")
|Excel.DisplayAlerts=-1
|Excel.ScreenUpdating = -1
|Excel.Calculation = -4105
|Excel.Quit()
|Word.Quit()";
Текст=СоздатьОбъект("Текст");
Текст.ДобавитьСтроку(Стр);
Текст.Записать(КаталогИБ()+"Word2Excel.vbs");
ЗапуститьПриложение("wscript.exe "+КаталогИБ()+"Word2Excel.vbs");
КонецПроцедуры // Ворд2Ексель
И неделай через MSScripting там есть ограничение на время выполнения, после ченго вопрос/предупреждение