powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Глюк: Планировщик Win7 + VFP9 + Excel
9 сообщений из 9, страница 1 из 1
Глюк: Планировщик Win7 + VFP9 + Excel
    #36995257
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо под 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
Глюк: Планировщик Win7 + VFP9 + Excel
    #36998001
Фотография дикзай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

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

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

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

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

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

PS Вопрос так и не порешался, пока завел спец.пользователя держу его сессию открытой чтоб под ним задание выполнялось.
...
Рейтинг: 0 / 0
Глюк: Планировщик Win7 + VFP9 + Excel
    #36998695
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Глюк: Планировщик Win7 + VFP9 + Excel
    #36998706
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот собрано несколько вариантов экспорта в Excel, в том числе и через массив

Передача в Excel

Следует только заметить, что "оптимизировать" передачу через массив, убрав "лишнюю" функцию - не получится. Нужна именно функция и именно в таком виде.
...
Рейтинг: 0 / 0
Глюк: Планировщик Win7 + VFP9 + Excel
    #36999102
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМЯ так понимаю, что текстовый файл формируется через 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
Глюк: Планировщик Win7 + VFP9 + Excel
    #37000022
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос снят. Оказалось все просто: криворукие писатели из MS забыли папку создать C:\Windows\SysWOW64\config\systemprofile\Desktop
и если пользователь под кем запускается задание не админ, то ему надо права полные дать на systemprofile с подпапками
...
Рейтинг: 0 / 0
Глюк: Планировщик Win7 + VFP9 + Excel
    #37000492
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Глюк: Планировщик Win7 + VFP9 + Excel
    #37000687
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ,

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


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