powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP6.0-Excell
17 сообщений из 17, страница 1 из 1
VFP6.0-Excell
    #32631433
Виктори
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне нужно выводить данные в Эксел. Таблицы по числу районов-их число постоянно меняется от 60 до 110- поэтому у меня в шаблоне 110 листов- можно ли сделать так, чтобы в шаблоне был один лист, а в получаемом файле эксел по районам?
...
Рейтинг: 0 / 0
VFP6.0-Excell
    #32633478
My_name_is_Kostyan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй написать макрос в EXCEL. Начни с того, что очищай лист целиком, затем экспортируй таблицу из FoxPro.Потом поменяй названия полей названия полей и т.д. Шаблон будет один. Макрос запиши на открытие документа и все.
...
Рейтинг: 0 / 0
VFP6.0-Excell
    #32633596
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВикториМне нужно выводить данные в Эксел. Таблицы по числу районов-их число постоянно меняется от 60 до 110- поэтому у меня в шаблоне 110 листов- можно ли сделать так, чтобы в шаблоне был один лист, а в получаемом файле эксел по районам?

Как программно скопировать лист Excel в новый лист Excel?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
loExcel = CreateObject('Excel.Application')
loExcel.Workbooks.Add
* Общее количество листов в книге
LOCAL lnSheetsCount
lnSheetsCount = m.loExcel.ActiveWorkbook.Sheets.count

* Завожу информацию в первый лист (для проверки)
loExcel.ActiveWorkbook.Sheets( 1 ).Cells( 1 , 1 ).Value = 'Пример'

* Копирую содержимое первого листа в новый лист, 
* который будет расположен следом за последним листом
m.loExcel.ActiveWorkbook.Sheets( 1 ).Copy(NULL,m.loExcel.ActiveWorkbook.Sheets(m.lnSheetsCount))

m.loExcel.Visible=.T.
...
Рейтинг: 0 / 0
VFP6.0-Excell
    #32633600
Виктори
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой а поподробней нельзя-что-то я не очень понимаю.
А так у всех моих таблиц и структура и шапка одинаковая
...
Рейтинг: 0 / 0
VFP6.0-Excell
    #32633694
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поподробнее что?

Создай файл PRG. Скопируй в него приведенный код и запусти на исполнение из VFP.

А дальше, экспериментируй с приведенным кодом.
...
Рейтинг: 0 / 0
VFP6.0-Excell
    #32633865
Виктори
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой а поподробней нельзя-что-то я не очень понимаю.
А так у всех моих таблиц и структура и шапка одинаковая
...
Рейтинг: 0 / 0
VFP6.0-Excell
    #32633882
Виктори
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ Спасибо большое- завтра буду пробовать- а по поводу подробнее- это я у My_name_is_Kostyan спрашивала
...
Рейтинг: 0 / 0
VFP6.0-Excell
    #32634499
Виктори
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ Делаю как вы написали- но копируется весь лист с данными-т.е. если в 1 листе ячейка заполнена, а во 2 нет- там остаются цифры 1. Заранее же количества листов не знаю-оно задается в цикле. Как быть?
...
Рейтинг: 0 / 0
VFP6.0-Excell
    #32634530
Виктори
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А еще нумерация получается в обратном порядке- т.е. последний заполненный лист получается с номером, например, 12- стоит первым
...
Рейтинг: 0 / 0
VFP6.0-Excell
    #32634752
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВикториВладимирМ Делаю как вы написали- но копируется весь лист с данными-т.е. если в 1 листе ячейка заполнена, а во 2 нет- там остаются цифры 1. Заранее же количества листов не знаю-оно задается в цикле. Как быть?

А HELP почитать по командам VB для Excel? Он поставляется вместе с EXCEL. Да даже просто внимательно посмотреть на приведенный код. Повторяю еще раз:

Код: plaintext
1.
2.
* Общее количество листов в книге
LOCAL lnSheetsCount
lnSheetsCount = m.loExcel.ActiveWorkbook.Sheets.count

ВикториА еще нумерация получается в обратном порядке- т.е. последний заполненный лист получается с номером, например, 12- стоит первым

Опять же, либо внимательнее смотрите приведенный код, либо читайте HELP по VB:

Код: plaintext
1.
2.
* Копирую содержимое первого листа в новый лист, 
* который будет расположен следом за последним листом
m.loExcel.ActiveWorkbook.Sheets( 1 ).Copy(NULL,m.loExcel.ActiveWorkbook.Sheets(m.lnSheetsCount))

Заметили, что первым параметром стоит NULL?

Выдержка из HELP

Copy Method

Syntax 1: Copies the object to the Clipboard. Copies a picture of the point or series to the Clipboard.

Syntax 2: Copies the Range to the specified range or to the Clipboard.

Syntax 3: Copies the sheet to another location in the workbook.

Syntax 1

expression . Copy

Syntax 2

expression . Copy(Destination)

Syntax 3

expression . Copy(Before, After)

expression Required. An expression that returns an object in the Applies To list. To copy an entire chart sheet, use Syntax 3 with the Chart object. To copy only the chart area, use Syntax 1 with the ChartArea object.

Destination Optional Variant. Specifies the new range to which the specified range will be copied. If this argument is omitted, Microsoft Excel copies the range to the Clipboard.

Before Syntax 3: Optional Variant. The sheet before which the copied sheet will be placed. You cannot specify Before if you specify After.

After Optional Variant. The sheet after which the copied sheet will be placed. You cannot specify After if you specify Before.

Remarks

If you don't specify either Before or After, Microsoft Excel creates a new workbook that contains the copied sheet.
...
Рейтинг: 0 / 0
VFP6.0-Excell
    #32635299
Виктори
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ой куда не поставлю cells(9,15) везде ошибка выходит- совсем я запуталась.
А при чем здесь null вообще никак
...
Рейтинг: 0 / 0
VFP6.0-Excell
    #32635571
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты это о чем опять? Приведи код и укажи в каком месте глючит. А так тебя очень трудно понять
...
Рейтинг: 0 / 0
VFP6.0-Excell
    #32635968
Фотография neznajka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Виктори :
А имена исходных Fox-таблиц с районными данными подчинены какой-либо номерной закономерности или носят случайный(хаотический) характер? Я это к тому, что если есть какая-либо последовательная логика в наименованиях dbf-ников (например – raj001.dbf, raj002.dbf, raj003.dbf, и т.д.) то очень легко организовать экспорт этих таблиц в теле цикла For i=1 To n … Endfor, где n – текущее число таблиц, подлежащих экспорту: достаточно лишь сформировать привязку названия очередного экспортируемого файла с текущим значением параметра (i) цикла – что-то вроде: file_name=”raj”+padl(alltrim(str(i)),3,”0”), и затем дать стандартную команду копирования(экспорта) из файла с именем file_name. А еще лучше – оформить такой цикл отдельной процедурой, входным параметром которой будет количество подлежащих экспорту файлов и, возможно – общая символьная часть наименований этих файлов (в приводимом варианте – “raj”), если эта часть время от времени претерпевает изменения.
Если же никакой закономерности в наименованиях исходных dbf-ников нет, тогда лучше программно оформить сканирование директории, содержащей эти файлы, на предмет поиска файлов с нужной структурой или с названиями из заранее сформированного списка (опять же – если перечень их названий стабилен и не изменяется со временем).
...
Рейтинг: 0 / 0
VFP6.0-Excell
    #32636239
Виктори
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ
Насколько я поняла- нужно вставить диапазон копирования(строки-столбцы)- но не совсем пойму куда
авторm.loExcel.ActiveWorkbook.Sheets(1).Copy(NULL,m.loExcel.ActiveWorkbook.Sheets(m.lnSheetsCount))

В этой строке он всегда дает ошибку, а куда еще я не представляю
...
Рейтинг: 0 / 0
VFP6.0-Excell
    #32636359
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты о чем опять? Код приведи!!!

Эта строка копирования ЛИСТА с порядковым номером 1 ЦЕЛИКОМ за последним листом книги! При чем здесь координаты ячейки?

Ошибка будет только в том случае, если в новой книге вообще нет ни одного листа. Т.е. если значение m.lnSheetsCount=0
...
Рейтинг: 0 / 0
VFP6.0-Excell
    #32636410
Виктори
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LOCAL lnSheetsCount, lnCellsCount
lnSheetsCount = m.sn.ActiveWorkbook.Sheets.count
lnCellsCount= m.sn.ActiveWorkbook.Sheets(1).Cells(9,12)

m.sn.Visible=.T.
m.sn.ActiveWorkbook.sheets(1).Copy(m.sn.ActiveWorkbook.sheets(m.lnSheetsCount).cells(m.lnCellsCount))

Я ведь хочу копировать только шапку-или все вообще не так делается???
...
Рейтинг: 0 / 0
VFP6.0-Excell
    #32636464
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виктори LOCAL lnSheetsCount, lnCellsCount
lnSheetsCount = m.sn.ActiveWorkbook.Sheets.count
lnCellsCount= m.sn.ActiveWorkbook.Sheets(1).Cells(9,12)

m.sn.Visible=.T.
m.sn.ActiveWorkbook.sheets(1).Copy(m.sn.ActiveWorkbook.sheets(m.lnSheetsCount).cells(m.lnCellsCount))

Я ведь хочу копировать только шапку-или все вообще не так делается???

(...) (вырезано цензурой)
А сразу этого сказать было нельзя?

Теперь прикинь какие вообще действия понадобяться?
1) Нужно создать НОВЫЙ ЧИСТЫЙ лист
2) Скопировать в этот новый лист некий диапазон из уже существующего листа.

Получается примерно следующее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
loExcel = CreateObject('Excel.Application')
loExcel.Workbooks.Add
* Общее количество листов в книге
LOCAL lnSheetsCount
lnSheetsCount = m.loExcel.ActiveWorkbook.Sheets.count

* Завожу информацию в первый лист (для проверки)
loExcel.ActiveWorkbook.Sheets( 1 ).Cells( 1 , 1 ).Value = 'Пример'
loExcel.ActiveWorkbook.Sheets( 1 ).Cells( 10 , 1 ).Value = 'Пример10'

* Добавляю один новый чистый лист после последнего
m.loExcel.ActiveWorkbook.Sheets.Add(NULL,;
	m.loExcel.ActiveWorkbook.Sheets(m.lnSheetsCount),;
	 1 )

* Копирую в первую строку этого нового листа первые  10  строк из первого листа
m.loExcel.ActiveWorkbook.Sheets( 1 ).RANGE("1:10").Copy( ;
	m.loExcel.ActiveWorkbook.Sheets(m.lnSheetsCount+ 1 ).rows( 1 ))

m.loExcel.Visible=.T.

Винмательнее читай HELP. В команде COPY предполагается, что до нее стоит ссылка на тот объект, который собственно и копируется. В твоем примере ты пытался скопировать целый лист в какую-то ячейку другого листа. За что и получал ... сообщение об ошибке.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP6.0-Excell
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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