Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Глюк: Планировщик Win7 + VFP9 + Excel / 9 сообщений из 9, страница 1 из 1
04.12.2010, 19:13
    #36995257
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк: Планировщик Win7 + VFP9 + Excel
Надо под Win7 (64-битная) из планировщика запустить прогу, которая генерит отчет в экселе.
Точнее фоксом генерится текстовый файл с табуляциями, потом открывается экселем и форматирование делается.
В упрощенном варианте так работает:
Код: plaintext
1.
2.
loEx = newobject("Excel.Application")
loEx.Workbooks.OpenText(fullpath('test.txt'),  2 ,  1 ,  1 , - 4142 , .F., .T., .F., .F., .F., .F.)
...

В Win7 у меня права админа, задание тоже подо мной запускается.
Просто запускаю - работает.
Работает если в настройке задания стоит "Выполнять только для зарегистрированного пользователя"
Но стоит переключить на "Выполнять вне зависимости от регистрации пользователя" как начинаются проблемы с экселем: не может открыть текстовый файл (вылетает на .Workbooks.OpenText()).

Попробовал на 2-х компах, офисы 2003, 2007, Cron`ом пробовал запускать. Права на папку дал всем кому только можно - не помогает.

Никто с такой проблемой не сталкивался?
Пример глюка в архиве, если кто повторить захочет.
...
Рейтинг: 0 / 0
06.12.2010, 19:06
    #36998001
дикзай
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк: Планировщик Win7 + VFP9 + Excel
Dima T,

тупой вопрос от пользователя Фокса: а чего сразу не выводить из VFP в Excel?
...
Рейтинг: 0 / 0
07.12.2010, 07:18
    #36998463
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк: Планировщик Win7 + VFP9 + Excel
дикзайDima T,

тупой вопрос от пользователя Фокса: а чего сразу не выводить из VFP в Excel?
Посоветуй как без тормозов это сделать? Отчетик ~200 тыс.ячеек занимает.

Отдельно каждую ячейку заполнять - тормоза большие.

Передавать через буфер обмена тоже не вариант, тормоза в фоксе при сборе всего в переменную (чтобы потом ее в буфер обмена вставить).

Наиболее быстрый способ через текстовый файл - и фокс не тормозит и эксель его за несколько секунд открывает и форматирует.

PS Вопрос так и не порешался, пока завел спец.пользователя держу его сессию открытой чтоб под ним задание выполнялось.
...
Рейтинг: 0 / 0
07.12.2010, 10:35
    #36998695
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк: Планировщик Win7 + VFP9 + Excel
Dima TПередавать через буфер обмена тоже не вариант, тормоза в фоксе при сборе всего в переменную (чтобы потом ее в буфер обмена вставить).

Наиболее быстрый способ через текстовый файл - и фокс не тормозит и эксель его за несколько секунд открывает и форматирует.
Я так понимаю, что текстовый файл формируется через COPY TO, поскольку в противном случае, время создания текстового файла будет сопоставимо со временем создания символьной строки для буфера обмена.

Есть еще следующие варианты группового экспорта в Excel

1) ADO RecordSet - в данном случае подключится к таблицам DBF через OLE DB и выполнить запрос, чтобы получить RecordSet. Затем вставить этот RecordSet в Excel через метод Range.CopyFromRecordset(ADORecordSet).

Можно и "вручную" заполнять RecordSet, но по времени это несколько медленнее, чем вручную формировать символьную строку для буфера обмена.

2) Вставка массива через ссылочную "дыру" в FoxPro (надо написать специфическую функцию. Были темы в данном форуме). Массив можно сформировать через Select-SQL

3) Можно создать макрос Excel где выполнить прямое подключение к таблицам с заполнением ячеек.

PS: Хотя замечание насчет времени - не понятно. Ведь запуск идет через планировщика, т.е. время не настолько критично. Кроме того, 200 тысяч значений довольно быстро формируют символьную строку для буфера обмена.
...
Рейтинг: 0 / 0
07.12.2010, 10:39
    #36998706
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк: Планировщик Win7 + VFP9 + Excel
Вот собрано несколько вариантов экспорта в Excel, в том числе и через массив

Передача в Excel

Следует только заметить, что "оптимизировать" передачу через массив, убрав "лишнюю" функцию - не получится. Нужна именно функция и именно в таком виде.
...
Рейтинг: 0 / 0
07.12.2010, 12:44
    #36999102
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк: Планировщик Win7 + VFP9 + Excel
ВладимирМЯ так понимаю, что текстовый файл формируется через COPY TO, поскольку в противном случае, время создания текстового файла будет сопоставимо со временем создания символьной строки для буфера обмена.
Ошибаетесь, ниже пример кода это подтверждающий. Фокс медленно работает с большими строками, причем тормоза нелинейно нарастают по мере увеличения строки.
У меня на этом примере в файл пишется в 4 раза быстрее, а если str(j, 10) заменить на str(j, 20) - в 10 раз быстрее.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
clear
local lnSec, lnSec, i, j, lcS
lnSec = seconds()
lnH = fcreate('test.txt')
for i =  1  to  10000 
	lcS = ''
	for j =  1  to  20 
		lcS = lcS + str(j,  10 ) + chr( 9 )
	endfor
	fputs(lnH, lcS)
endfor
fclose(lnH)
? 'Создание файла:', seconds() - lnSec
lnSec = seconds()
lcS = ''
for i =  1  to  10000 
	for j =  1  to  20 
		lcS = lcS + str(j,  10 ) + chr( 9 )
	endfor
	lcS = lcS + chr( 10 ) + chr( 13 )
endfor
_cliptext = lcS
? 'Буфер обмена:', seconds() - lnSec

По большому счету это к теме топика не относится, т.к. как оказалось что без разницы как формировать отчет, остальные способы тоже не работают, глючит эксель под W7 при запуске из планировщика. Подозреваю что это как-то связано с обновленной системой раздачи прав, только где чего разрешить надо - не нашел пока.
...
Рейтинг: 0 / 0
07.12.2010, 16:54
    #37000022
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк: Планировщик Win7 + VFP9 + Excel
Вопрос снят. Оказалось все просто: криворукие писатели из MS забыли папку создать C:\Windows\SysWOW64\config\systemprofile\Desktop
и если пользователь под кем запускается задание не админ, то ему надо права полные дать на systemprofile с подпапками
...
Рейтинг: 0 / 0
07.12.2010, 19:57
    #37000492
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк: Планировщик Win7 + VFP9 + Excel
Dima TОшибаетесь, ниже пример кода это подтверждающий. Фокс медленно работает с большими строками, причем тормоза нелинейно нарастают по мере увеличения строки.
У меня на этом примере в файл пишется в 4 раза быстрее, а если str(j, 10) заменить на str(j, 20) - в 10 раз быстрее.
Спасибо. По факту даже можно предположить, почему так происходит. Вероятно, долго ищет окончание исходной строки, чтобы пределать к ней окончание. Косвенно это подтверждает тот факт, что заполнение массива происходит почти с той же скоростью, что и запись в файл.

Кстати, а кто мешает после формирования текстового файла сразу же загнать его в буфер?

Код: plaintext
1.
2.
3.
4.
lnH = fcreate('test.txt')
...
fclose(lnH)

_cliptext = FileToStr('test.txt')
...
Рейтинг: 0 / 0
07.12.2010, 21:53
    #37000687
XAndy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк: Планировщик Win7 + VFP9 + Excel
ВладимирМ,

Не, конец строки не ищется. Там каждый раз выделяется новый участок динамической памяти и туда копируется сначала старая строка, а потом и добавляемая :), т.е. все прелести интенсивной работы с кучей
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Глюк: Планировщик Win7 + VFP9 + Excel / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]