Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выгрузка данных в Excel / 11 сообщений из 11, страница 1 из 1
17.10.2016, 11:15
    #39328050
Pulsar_p
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка данных в Excel
День добрый!
Может есть у кого ссылка как создать шаблон Excel и загрузить туда данные из таблицы?
...
Рейтинг: 0 / 0
17.10.2016, 11:47
    #39328073
T1gRa_NT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка данных в Excel
Есть 2 варианта.
1. Рисовать шаблон из FoxPro
2. Открывать готовый файл, заполнять данными, сохранять под нужным именем
А как заполнять данные зависит от их объема, нужных свиристелок при загрузке и необходимой скорости.
Самый просто вариант использовать Ole.
...
Рейтинг: 0 / 0
17.10.2016, 11:51
    #39328074
Pulsar_p
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка данных в Excel
T1gRa_NT,
Спасибо, но мне бы все же хотелось ссылки на конкретные примеры. Самому что-то внятное нагуглить не получилось.
С шаблонами я работал, да вот беда, файл со ссылками куда-то подевался...
...
Рейтинг: 0 / 0
17.10.2016, 11:53
    #39328076
T1gRa_NT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка данных в Excel
Хорошо, Вам какой вариант?
...
Рейтинг: 0 / 0
17.10.2016, 11:58
    #39328081
T1gRa_NT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка данных в Excel
http://vfpdev.narod.ru/docs/vfpexcel.html - вменяемое описание. сам учился по нему)
...
Рейтинг: 0 / 0
17.10.2016, 11:59
    #39328082
Pulsar_p
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка данных в Excel
T1gRa_NT,
Второй, пожалуй, покороче будет. Там где через шаблон.
(А если бы оба два, так и вообще замечательно.)
...
Рейтинг: 0 / 0
17.10.2016, 13:47
    #39328174
T1gRa_NT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка данных в Excel
Работа через готовый файл:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
***Проверка наличия файла и его удаления при наличии***
IF FILE("D:\Are\OUT\Справочники.xlsb")
	DELETE FILE "D:\Are\OUT\Справочники.xlsb"
ENDIF
***Попытка поймать ошибку***
ON ERROR DO errhand	  && errhand is the error handler procedure
fil_excel = "D:\Are\Shab\Shab.xlsb" && выбор файла шаблона из текущей директории и директории SHABLON
filnam_r = "Shab.xlsb" && Имя файла эксель
nam_fil = "D:\Are\OUT\Справочники.xlsb" &&Указание директории и имений файла в который выгружаем
fil_new = (nam_fil)
ERASE (fil_new)	&&Удаляем файл для перезаписи
ole2 = GETOBJECT(fil_excel)
ole2.application.windows(filnam_r).activate
ole1 = ole2.application
	WITH ole1
		.activeworkbook.saveas(fil_new)
DO sprav
		.range("A1").select				&& Перемещение курсора в ячейку
    ENDWITH
WAIT CLEAR
ole1.visible = .T.	&& Отображение файла на экране
RELEASE ole1	&& Закрытие процесса Excel
ON ERROR  && Restore system error handler


PROCEDURE sprav
.sheets("sprav ").select	&& выбор листа
	SELECT sprav	&& выбор исходного файла
	COUNT TO kolz		&&&Общее кол-во записей
	nomst = 2	&& определение строки с которой пишем для всех справочников
	SCAN 
		WAIT WINDOW 'Формирование списка sprav запись № '+ALLTRIM(STR(nomst-2))+' из ' +ALLTRIM(STR(kolz)) NOWAIT 
		ole1.parent.cells(nomst, 1).value = field1
*!*			.sheets("sprav").Hyperlinks.Add(.sheets("sprav").cells(nomst,1),"","sprav2!A1","Ссылка на что-то там")	&&Создаем гипперсылку на sprav
		ole1.parent.cells(nomst, 2).value = field2
		ole1.parent.cells(nomst, 3).value = ALLTRIM(field3)
		ole1.parent.cells(nomst, 4).value = field4
		ole1.parent.cells(nomst, 5).value = field5
		ole1.parent.cells(nomst, 6).value = field6
		ole1.parent.cells(nomst, 7).value = field7
		nomst = nomst+1
	ENDSCAN
				
	**** Разлиновка ячеейк****
	.range(.cells(1, 1), .cells(nomst-1, 7)).select 
		WITH .selection
			.borders.linestyle = 1
			.borders.weight = 2
		ENDWITH
	.range("A1").select	&& Перемещение курсора в ячейку
ENDPROC

PROCEDURE errhand
*!*		SUSPEND	&&Пауза для отладки
	= AERROR(aErrorArray)  && Data from most recent error
*!*		CLEAR
*!*		? 'The error provided the following information'  && Display message
		? 'И где что не то'
		? 'На листе: '+ALLTRIM(ole1.ActiveSheet.name)
		? 'Номер строки: ' +ALLTRIM(STR(nomst))
*!*			? 'На листе' + ActiveSheet.name
	FOR n = 1 TO 7  && Display all elements of the array
		? aErrorArray(n)
	ENDFOR
	IF aErrorArray(1,1)=1426	&&Если в массиве первая запись с кодом ошибки 1426
		RETRY	&&Пытаемся по новой записать значение
	ENDIF 
ENDPROC




Создаем файл сами

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
***В эксель***
PROCEDURE v_excel
***Вставляем в excel***
IF vartype(ole1)='L'
	ole1 = CreateObject("Excel.Application")
	ole1.WorkBooks.add
	ole2=ole1.Application
ENDIF
WITH ole2
IF tek_chto>3	&&вствляем новый лист в конец, если номер чего-то по порядку более 3
		ole2.Sheets.Add(null,ole2.Sheets(tek_chto-1),(tek_chto+1)-tek_chto)
	ENDIF
	.sheets(tek_chto).name="что-то "+ALLTRIM(STR(o_code))
	.sheets(tek_chto).select	&&Выбираем лист соответствующий текущему номеру по порядку чего-то
***Наименование шапки делаем****
	***На 2016 год***
	ole2.parent.cells(1, 1).value = 'Данные 2016 года'
	ole2.parent.cells(2, 1).value = 'Что-то 2016'
	ole2.parent.cells(2, 2).value = 'Наименование чего-то'
	ole2.parent.cells(2, 3).value = 'Код чего-то2'
	ole2.parent.cells(2, 4).value = 'Наименование чего-то2'
	ole2.parent.cells(2, 5).value = 'чего-то3'
	ole2.parent.cells(2, 6).value = 'Наименование чего-то3'
	ole2.parent.cells(2, 7).value = 'Примечания по чего-то3'
	ole2.parent.cells(2, 8).value = 'Ограничение по возрасту'
	ole2.parent.cells(2, 9).value = 'Решение о включении в куда-то 2016'

	***Приводим шапку в порядок 2016***
	.range(.cells(1, 1), .cells(1, 9)).select
		WITH .selection
			.Font.Size = 14		&&Размер шрифта
			.Font.Bold = .T. 	&&жирность
			.MergeCells = .T. && обьединение ячееке
			.HorizontalAlignment = 3	&&горизонтали по центру
			.VerticalAlignment = 2	&&вертикали по центру
		ENDWITH
	***Ширина столбцов***
	***На 2016 год***
	ole2.Columns(1).ColumnWidth=5
	ole2.Columns(2).ColumnWidth=20
	ole2.Columns(3).ColumnWidth=8.86
	ole2.Columns(4).ColumnWidth=14.29
	ole2.Columns(5).ColumnWidth=16
	ole2.Columns(6).ColumnWidth=20
	ole2.Columns(7).ColumnWidth=11.86
	ole2.Columns(8).ColumnWidth=12.43
	ole2.Columns(9).ColumnWidth=12.43
	Вставляем данные
	.range("A3").select	&& Перемещение курсора в ячейку
	.ActiveWindow.FreezePanes= .T.	&&Закрепляем шапку для скроллинга
ENDWITH
***Закрывает только тогда, когда номер чего-то по порядку равняется общему кол-ву чего-то*****
IF kol_chto =tek_chto
	RELEASE ole1	&& Закрытие процесса Excel
	ole2.activeworkbook.saveas(fil_new)		&&Сохраняем
	ole2.Application.Quit	&&Типо выход?
	RELEASE ole2	&& Закрытие процесса Excel
ENDIF




В примерах использую не самый быстрый механизм Ole т.к. еще прикручивался функционал проверка значений Excel и скорость выгрузки была не сильно критична.
Для увеличения скорости поищите на данном форуме вставка в Excel через буфер обмена или массивы.
Для записи числе более 15 знаков в файле шаблона формат изначально указан текстовый и выводится как текст.
Надеюсь поможет.
...
Рейтинг: 0 / 0
17.10.2016, 14:43
    #39328230
Pulsar_p
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка данных в Excel
T1gRa_NT,
Ни один из этих примеров работать не хочет... :(
...
Рейтинг: 0 / 0
18.10.2016, 07:06
    #39328640
T1gRa_NT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка данных в Excel
Оба взяты из работающих проектов, просто заменены комментарии и переменные на не говорящие.
Давайте разбираться что у Вас не работает.
...
Рейтинг: 0 / 0
18.10.2016, 07:37
    #39328647
T1gRa_NT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка данных в Excel
Ну на всякий, простейший пример еще раз, создаем Excel сами)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
CREATE CURSOR test_v_excel (id N(4),name C(30),date_v D)
INSERT INTO test_v_excel (id,name,date_v) VALUES (1,'Строка 1',CTOD('17.10.2016'))
INSERT INTO test_v_excel (id,name,date_v) VALUES (2,'Строка 2',CTOD('15.10.2016'))
INSERT INTO test_v_excel (id,name,date_v) VALUES (3,'Строка 5',CTOD('18.10.2016'))
INSERT INTO test_v_excel (id,name,date_v) VALUES (4,'Строка 6',CTOD('20.10.2016'))

***Создаем экземпляр Excel***
ole1 = CreateObject("Excel.Application")
ole1.WorkBooks.add
ole2=ole1.Application

WITH ole2
***Наименование шапки делаем****
	ole2.parent.cells(1, 1).value = 'Тестовый пример'
	ole2.parent.cells(2, 1).value = 'ID'
	ole2.parent.cells(2, 2).value = 'Номер строки'
	ole2.parent.cells(2, 3).value = 'Дата'
	***Приводим шапку в порядок***
	.range(.cells(1, 1), .cells(1, 3)).select
		WITH .selection
			.Font.Size = 14		&&Размер шрифта
			.Font.Bold = .T. 	&&жирность
			.MergeCells = .T. && обьединение ячееке
			.HorizontalAlignment = 3	&&горизонтали по центру
			.VerticalAlignment = 2	&&вертикали по центру
		ENDWITH
	***Ширина столбцов***
	ole2.Columns(2).ColumnWidth=20
	ole2.Columns(3).ColumnWidth=9.43

	***Тут выгружаем данные***
	nomst = 3	&& определение строки с которой пишем
	SELECT test_v_excel
	SCAN
		ole2.parent.cells(nomst, 1).value = id
		ole2.parent.cells(nomst, 2).value = ALLTRIM(name)
		ole2.parent.cells(nomst, 3).value = date_v
		nomst=nomst+1
	ENDSCAN

	*** Разлиновка ячеек***
	.range(.cells(1, 1), .cells(nomst-1, 3)).select 
		WITH .selection
			.borders.linestyle = 1
			.borders.weight = 2
		ENDWITH
	ole2.visible = .t.    &&Выводим окно Excel на показ
ENDWITH 
RELEASE ole1	&& Закрытие процесса Excel
RELEASE ole2	&& Закрытие процесса Excel


...
Рейтинг: 0 / 0
18.10.2016, 09:51
    #39328720
Pulsar_p
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузка данных в Excel
T1gRa_NT,
Спасибо, то что нужно!
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выгрузка данных в Excel / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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