:: Visual Foxpro, Foxpro for DOS
Экспорт в Excel
Vedmak
Автор

Сообщений: 5972
Откуда: CiTY
Дата регистрации: 30.10.2003
Заполняю шаблон.

SELECT Tmp
lnStep = 0
lnRow = 5
SCAN
SCATTER memvar
loSheet.Range( xlCell("D",lnRow), xlCell("AA",lnRow) ).select
loExcel.Selection.Copy
loSheet.range[ xlCell("A",lnRow) ].Value = TRANSFORM( m.postpart_)+" "+ALLTRIM( m.postname_ )
loSheet.range[ xlCell("D",lnRow) ].Value = m.Okm1_
loSheet.range[ xlCell("E",lnRow) ].Value = m.Okm2_
loSheet.range[ xlCell("H",lnRow) ].Value = m.Okm1_z_
loSheet.range[ xlCell("I",lnRow) ].Value = m.Okm2_z_
loSheet.range[ xlCell("L",lnRow) ].Value = m.Okm1_p_
loSheet.range[ xlCell("M",lnRow) ].Value = m.Okm2_p_
loSheet.range[ xlCell("R",lnRow) ].Value = m.Real1_
loSheet.range[ xlCell("S",lnRow) ].Value = m.Real2_
loSheet.range[ xlCell("V",lnRow) ].Value = m.Real1_z_
loSheet.range[ xlCell("W",lnRow) ].Value = m.Real2_z_
loSheet.range[ xlCell("Z",lnRow) ].Value = m.Real1_p_
loSheet.range[ xlCell("AA",lnRow) ].Value = m.Real2_p_
lnRow = lnRow + 1
loSheet.Range( xlCell("D",lnRow), xlCell("AI",lnRow) ).select
loExcel.ActiveSheet.paste()
ENDSCAN

Не могу отловить причину. На разных машинах в разное время случаются конфликты

[attachment 32784 Joxi.jpg]

Причем проблема плавающая: то на методе Excel-а .Select вывалится exception, то на .Paste.

Код не изменялся лет 5. Менялись машины и версии винды. Сейчас MS Win10 x64. MS Office постарше 10-ки.

Куда стоит копать ?


------------------
Говорить стоит лишь для тех, кто слушает.




Исправлено 1 раз(а). Последнее : Vedmak, 06.02.20 22:31
Ratings: 0 negative/0 positive
Re: Экспрот в Excel
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Я раньше записывал в код программы, на каких строках появлялись эти 1429, потом надоело. Системы не обнаружил. может есть связь с загруженностью машины. На одном и том же терминальном сервере у кого-то то и дело валится, а у кого-то не появляется, т.е. от данных может зависит.
Ratings: 0 negative/0 positive
Re: Экспрот в Excel
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Vedmak
Куда стоит копать ?
В использование .Select(), ActiveSheet и в общем работу с буфером обмена для данной цели. Заполнение шаблона, в т.ч. копирование "правильно отформатированных шаблонных диапазонов" делается без использования указанных методов.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Экспрот в Excel
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
Vedmak
loSheet.Range( xlCell("D",lnRow), xlCell("AI",lnRow) ).paste()
И не занимайся ерундой.
У меня бы твой кусок текста превратился бы в такое:
Select Tmp
lnStep = 0
lnRow = 5
Scan
With loSheet
.Range( xlCell("D",lnRow), xlCell("AA",lnRow) ).Copy()
xlCell("A",lnRow).Value = Transform( postpart_)+" "+Alltrim( postname_ )
xlCell("D",lnRow).Value = Okm1_
xlCell("E",lnRow).Value = Okm2_
xlCell("H",lnRow).Value = Okm1_z_
xlCell("I",lnRow).Value = Okm2_z_
xlCell("L",lnRow).Value = Okm1_p_
xlCell("M",lnRow).Value = Okm2_p_
xlCell("R",lnRow).Value = Real1_
xlCell("S",lnRow).Value = Real2_
xlCell("V",lnRow).Value = Real1_z_
xlCell("W",lnRow).Value = Real2_z_
xlCell("Z",lnRow).Value = Real1_p_
xlCell("AA",lnRow).Value = Real2_p_
lnRow = lnRow + 1
.Range( xlCell("D",lnRow), xlCell("AI",lnRow) ).paste()
Endwith
Endscan


------------------
Лень - это неосознанная мудрость.




Исправлено 1 раз(а). Последнее : ssa, 06.02.20 21:17
Ratings: 0 negative/0 positive
Re: Экспрот в Excel
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
ssa
И не занимайся ерундой.

То же использование буфера обмена, только в профиль. И те же проблемы в итоге.

loTemplateRange.COPY(m.loNewRange) && размножаем шаблонный блок
...
loNewRange.COLUMNS(m.lcDataColumns).VALUE = loHelper.PassArray("paData") && перегоняем данные из массива в ячейки за 1 вызов
...
* сам хелпер-метод
PROCEDURE PassArray(tcArrayName)
RETURN @&tcArrayName
ENDPROC


------------------
WBR, Igor
Ratings: 0 negative/2 positive
Re: Экспрот в Excel
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Vedmak
Причем проблема плавающая: то на методе Excel-а .Select вывалится exception

У меня "эта проблема" не плавающая - .select не сработает, если loSheet не является ActiveSheet.
(плюс не сработает, если лист является "скрытым").



Исправлено 1 раз(а). Последнее : akvvohinc, 06.02.20 22:37
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
Vedmak
Автор

Сообщений: 5972
Откуда: CiTY
Дата регистрации: 30.10.2003
А для жителей крайнего севера можно подробнее. Вижу просветы в своих знаниях для понимания этой цитаты.


------------------
Говорить стоит лишь для тех, кто слушает.
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
Все то же, что и у остальных: не надо эмулировать интерактивную работу и использовать специфические для этого функции, то бишь Select и Selection. В примерах показано как то делается.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Vedmak
А для жителей крайнего севера можно подробнее.

Всё просто - книга Excel может состоять из нескольких листов, но лишь один из них является текущим (ActiveSheet) - тот, что видит юзер при интерактивной работе.

В то же время, работая с объектом Excel, ты можешь читать/заполнять ячейки (.value или .formula) любого листа (получив на него ссылку тем или иным способом), а не только текущего:
loSheet.cells[1,1].value = 'абвгд'

При этом loSheet.name может быть равным 'Лист1', а loBook.ActiveSheet.name = 'Лист2'

Но вот выполнение loSheet.cells[1,1].select, если loSheet.name != loBook.ActiveSheet.name, вызовет именно эту ошибку.

Поэтому если есть необходимость в .select, то сначала надо сделать этот лист активным (если он неактивный):
loSheet.activate

Почти та же проблема будет и со скрытым листом - его не удастся активизировать, а следовательно, и сделать там .select.

PS
Некоторую аналогию можно найти у Фокса - это рабочие области, одна из которых - текущая, но многие операции можно выполнять и над таблицами в нетекущих областях. Многие, но не все!

PPS
Извини, я смотрю форум "без ветвей" и думал, что твой вопрос относился к моему посту, как к предшествующему.
Но удалять не буду.



Исправлено 2 раз(а). Последнее : akvvohinc, 07.02.20 00:15
Ratings: 0 negative/1 positive
Re: Экспрот в Excel
Vedmak
Автор

Сообщений: 5972
Откуда: CiTY
Дата регистрации: 30.10.2003
Igor Korolyov
Vedmak
Куда стоит копать ?
В использование .Select(), ActiveSheet и в общем работу с буфером обмена для данной цели. Заполнение шаблона, в т.ч. копирование "правильно отформатированных шаблонных диапазонов" делается без использования указанных методов.

Спасибо, направление понял. Покопал тут же на форуме и нашел несколько более простой метод.


------------------
Говорить стоит лишь для тех, кто слушает.
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
() расскажешь, если получится? )
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Да, к сожалению есть пара штук в экселе, которые не сделать без Select/selection - но если можно обойтись без них (и без буфера обмена, конечно!) то стоит так и делать. Копирование ячеек в рамках листа (чтобы форматы скопировались), копирование самих листов, применение всяких элементов форматирования, заполнение значениями и формулами, насколько я помню, вполне обходятся без этого.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Помню, были требования юзеров, чтобы на листах при их первом открытии текущими ячейками были вполне определенные ячейки. Можно ли такое требование реализовать без .select?
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
andrewk

Сообщений: 174
Откуда: Красноярск
Дата регистрации: 15.05.2005
akvvohinc
чтобы на листах при их первом открытии текущими ячейками были вполне определенные ячейки
Не, ну .Select для того и предназначен — выбрать (сделать активной) область. Как если бы юзер ткнул в неё мышкой. То есть для этой хотелки это как раз самое оно.
А вот при всяких автоматических заполнениях, особенно если они могут быть долгими, желательно этим не пользоваться. Ведь, возможно, пока работает наша прога, юзер может открыть другой эксельный документ и чего-то в нём делать, а может и в «нашем» документе пытаться по листам перемещаться. Ну а уж про юзать буфер обмена и говорить не стоит.
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
andrewk
Ну а уж про юзать буфер обмена и говорить не стоит.
Кому как!
Юзаю все время. Доволен!
В Фоксе буфер заполняю. Форматы в буфер через макет. Всякие объединения ячеек в том числе.
У меня свой построитель. Написан примерно тогда, когда Банщиков писал. Я его еще в Уфе показывал.



Исправлено 2 раз(а). Последнее : Ydin, 09.02.20 10:53
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
andrewk

Сообщений: 174
Откуда: Красноярск
Дата регистрации: 15.05.2005
Возможно. Но при этом теряется содержимое буфера, которое, возможно, было очень ценно для юзера. Кроме того, если процедура формирования отчёта относительно долгая, в это время юзер может, например, в Ворде крапать и пытаться пользоваться буфером, результат, наверное, будет неожиданным.
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Ну дык вывесить на фулскрин вырвиглазное окно где красным 32 шрифтом написать "руки прочь от клавиатуры и мышки! иди пить чай пока готовится отчёт!"


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
BlockInput
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Без надписей это гарантирует волну звонков в саппорт о том что "манитор не печатает, кампутер вирусы захватили". Впрочем, и надписи не помогают как правило - кто ж их читает


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Экспорт в Excel
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Последнее время отчеты выдаю в DBF FOX2X AS 866, их эксели до сих пор открывают. Мемо-поля не читает - это минус, стараюсь без них, и форматирования с раскраской нет. Из плюсов - быстро изготовляется табличка. А так да, надо обходиться без программного Ctrl-C, но часть функций не работает в скрытом режиме, надо как-то выкручиваться...

forum.foxclub.ru - копирование без буфера
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 24 shumik73  (Гостей: 23)

© 2000-2024 Fox Club 
Яндекс.Метрика