Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 VFP6.0-Excell  [new]
Виктори
Guest
Мне нужно выводить данные в Эксел. Таблицы по числу районов-их число постоянно меняется от 60 до 110- поэтому у меня в шаблоне 110 листов- можно ли сделать так, чтобы в шаблоне был один лист, а в получаемом файле эксел по районам?
2 авг 04, 14:06    [852507]     Ответить | Цитировать Сообщить модератору
 Re: VFP6.0-Excell  [new]
My_name_is_Kostyan
Member

Откуда:
Сообщений: 5
Попробуй написать макрос в EXCEL. Начни с того, что очищай лист целиком, затем экспортируй таблицу из FoxPro.Потом поменяй названия полей названия полей и т.д. Шаблон будет один. Макрос запиши на открытие документа и все.
3 авг 04, 14:48    [855445]     Ответить | Цитировать Сообщить модератору
 Re: VFP6.0-Excell  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Виктори
Мне нужно выводить данные в Эксел. Таблицы по числу районов-их число постоянно меняется от 60 до 110- поэтому у меня в шаблоне 110 листов- можно ли сделать так, чтобы в шаблоне был один лист, а в получаемом файле эксел по районам?


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

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.
3 авг 04, 15:29    [855630]     Ответить | Цитировать Сообщить модератору
 Re: VFP6.0-Excell  [new]
Виктори
Guest
Ой а поподробней нельзя-что-то я не очень понимаю.
А так у всех моих таблиц и структура и шапка одинаковая
3 авг 04, 15:30    [855634]     Ответить | Цитировать Сообщить модератору
 Re: VFP6.0-Excell  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Поподробнее что?

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

А дальше, экспериментируй с приведенным кодом.
3 авг 04, 16:03    [855795]     Ответить | Цитировать Сообщить модератору
 Re: VFP6.0-Excell  [new]
Виктори
Guest
Ой а поподробней нельзя-что-то я не очень понимаю.
А так у всех моих таблиц и структура и шапка одинаковая
3 авг 04, 17:06    [856026]     Ответить | Цитировать Сообщить модератору
 Re: VFP6.0-Excell  [new]
Виктори
Guest
ВладимирМ Спасибо большое- завтра буду пробовать- а по поводу подробнее- это я у My_name_is_Kostyan спрашивала
3 авг 04, 17:12    [856050]     Ответить | Цитировать Сообщить модератору
 Re: VFP6.0-Excell  [new]
Виктори
Guest
ВладимирМ Делаю как вы написали- но копируется весь лист с данными-т.е. если в 1 листе ячейка заполнена, а во 2 нет- там остаются цифры 1. Заранее же количества листов не знаю-оно задается в цикле. Как быть?
4 авг 04, 10:49    [857233]     Ответить | Цитировать Сообщить модератору
 Re: VFP6.0-Excell  [new]
Виктори
Guest
А еще нумерация получается в обратном порядке- т.е. последний заполненный лист получается с номером, например, 12- стоит первым
4 авг 04, 10:58    [857281]     Ответить | Цитировать Сообщить модератору
 Re: VFP6.0-Excell  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Виктори
ВладимирМ Делаю как вы написали- но копируется весь лист с данными-т.е. если в 1 листе ячейка заполнена, а во 2 нет- там остаются цифры 1. Заранее же количества листов не знаю-оно задается в цикле. Как быть?


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

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

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


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

* Копирую содержимое первого листа в новый лист, 
* который будет расположен следом за последним листом
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.
4 авг 04, 12:09    [857678]     Ответить | Цитировать Сообщить модератору
 Re: VFP6.0-Excell  [new]
Виктори
Guest
Ой куда не поставлю cells(9,15) везде ошибка выходит- совсем я запуталась.
А при чем здесь null вообще никак
4 авг 04, 15:48    [858826]     Ответить | Цитировать Сообщить модератору
 Re: VFP6.0-Excell  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Ты это о чем опять? Приведи код и укажи в каком месте глючит. А так тебя очень трудно понять
4 авг 04, 17:25    [859349]     Ответить | Цитировать Сообщить модератору
 Re: VFP6.0-Excell  [new]
neznajka
Member

Откуда: Украина
Сообщений: 387
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-ников нет, тогда лучше программно оформить сканирование директории, содержащей эти файлы, на предмет поиска файлов с нужной структурой или с названиями из заранее сформированного списка (опять же – если перечень их названий стабилен и не изменяется со временем).
4 авг 04, 23:55    [860007]     Ответить | Цитировать Сообщить модератору
 Re: VFP6.0-Excell  [new]
Виктори
Guest
ВладимирМ
Насколько я поняла- нужно вставить диапазон копирования(строки-столбцы)- но не совсем пойму куда
автор
m.loExcel.ActiveWorkbook.Sheets(1).Copy(NULL,m.loExcel.ActiveWorkbook.Sheets(m.lnSheetsCount))

В этой строке он всегда дает ошибку, а куда еще я не представляю
5 авг 04, 09:50    [860412]     Ответить | Цитировать Сообщить модератору
 Re: VFP6.0-Excell  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Ты о чем опять? Код приведи!!!

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

Ошибка будет только в том случае, если в новой книге вообще нет ни одного листа. Т.е. если значение m.lnSheetsCount=0
5 авг 04, 10:49    [860633]     Ответить | Цитировать Сообщить модератору
 Re: VFP6.0-Excell  [new]
Виктори
Guest
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))


Я ведь хочу копировать только шапку-или все вообще не так делается???
5 авг 04, 11:08    [860717]     Ответить | Цитировать Сообщить модератору
 Re: VFP6.0-Excell  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Виктори
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) Скопировать в этот новый лист некий диапазон из уже существующего листа.

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

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 предполагается, что до нее стоит ссылка на тот объект, который собственно и копируется. В твоем примере ты пытался скопировать целый лист в какую-то ячейку другого листа. За что и получал ... сообщение об ошибке.
5 авг 04, 11:30    [860806]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить